From 1af203d2a8b1d5510ed708994ee45a87f460d596 Mon Sep 17 00:00:00 2001 From: Wind4 Date: Sun, 29 Nov 2015 17:30:52 +0800 Subject: [PATCH] vlmcsd-svn812-2015-08-30-Hotbird64 --- GNUmakefile | 563 ++ KMSServer.idl | 14 + KMSServer_c_mingw_gcc.c | 278 + KMSServer_c_x64_mingw_gcc.c | 731 ++ KMSServer_h.h | 80 + KMSServer_s2_mingw_gcc.c | 282 + KMSServer_s2_x64_mingw_gcc.c | 730 ++ Makefile | 7 + README | 13 + README.compile-and-pre-built-binaries | 110 + README.openssl | 55 + ...-el-glibc2.20-gcc4.9.1-binutils2.24.config | 1458 +++ ...bc2.20-gcc4.9.1-binutils2.24-thumb1.config | 1457 +++ ...-el-glibc2.20-gcc4.9.1-binutils2.24.config | 1485 +++ ...bc2.20-gcc4.9.2-binutils2.25-thumb1.config | 1630 ++++ ...-hf-glibc2.20-gcc4.9.1-binutils2.24.config | 1474 +++ ...bc2.20-gcc4.9.1-binutils2.24-thumb2.config | 1485 +++ ...armv4-el-musl-gcc4.9.1-binutils2.24.config | 1495 +++ ...l-musl-gcc4.9.1-binutils2.24-thumb1.config | 1496 +++ ...armv5-el-musl-gcc4.9.1-binutils2.24.config | 1522 +++ ...l-musl-gcc4.9.1-binutils2.24-thumb1.config | 1521 +++ ...l-musl-gcc4.9.1-binutils2.24-thumb2.config | 1505 +++ ...clibc0.9.33.2-gcc4.9.1-binutils2.24.config | 2081 +++++ ...9.33.2-gcc4.9.1-binutils2.24-thumb1.config | 2080 +++++ ...clibc0.9.33.2-gcc4.9.1-binutils2.24.config | 2110 +++++ ...9.33.2-gcc4.9.1-binutils2.24-thumb1.config | 2109 +++++ ...9.33.2-gcc4.9.1-binutils2.24-thumb2.config | 2110 +++++ ...16-eb-gcc4.9-glibc2.20-binutils2.24.config | 1407 +++ ...32-eb-gcc4.9-glibc2.20-binutils2.24.config | 1407 +++ ...r2-eb-gcc4.9-glibc2.20-binutils2.24.config | 1407 +++ .../mips32-eb-gcc4.9-musl-binutils2.24.config | 1417 +++ ...ips32r2-eb-gcc4.9-musl-binutils2.24.config | 1417 +++ ...-gcc4.9-uclibc0.9.33.2-binutils2.24.config | 2004 ++++ ...-gcc4.9-uclibc0.9.33.2-binutils2.24.config | 2003 ++++ ...-gcc4.9-uclibc0.9.33.2-binutils2.24.config | 2003 ++++ ...16-el-gcc4.9-glibc2.20-binutils2.24.config | 1411 +++ ...32-el-gcc4.9-glibc2.20-binutils2.24.config | 1411 +++ ...r2-el-gcc4.9-glibc2.20-binutils2.24.config | 1411 +++ ...-gcc4.9-uclibc0.9.33.2-binutils2.24.config | 1421 +++ ...-gcc4.9-uclibc0.9.33.2-binutils2.24.config | 1421 +++ ...-gcc4.9-uclibc0.9.33.2-binutils2.24.config | 2010 ++++ ...-gcc4.9-uclibc0.9.33.2-binutils2.24.config | 2010 ++++ ...-gcc4.9-uclibc0.9.33.2-binutils2.24.config | 2010 ++++ ...-gcc4.9-uclibc0.9.33.2-binutils2.24.config | 2038 ++++ config.h | 583 ++ crypto.c | 328 + crypto.h | 59 + crypto_internal.c | 212 + crypto_internal.h | 38 + crypto_openssl.c | 269 + crypto_openssl.h | 53 + crypto_polarssl.h | 39 + crypto_windows.c | 170 + crypto_windows.h | 31 + dns_srv.c | 330 + dns_srv.h | 103 + endian.c | 171 + endian.h | 296 + floppy144.vfd | Bin 0 -> 1474560 bytes helpers.c | 369 + helpers.h | 34 + kms.c | 1118 +++ kms.h | 287 + libkms-test.c | 35 + libkms.c | 117 + libkms.h | 33 + make_dragonfly | 31 + make_freebsd | 46 + make_linux | 3511 +++++++ make_minix | 25 + make_netbsd | 35 + make_openbsd | 33 + make_osx | 97 + make_solaris | 57 + make_windows | 79 + make_windows_native | 17 + msrpc-client.c | 191 + msrpc-client.h | 22 + msrpc-server.c | 219 + msrpc-server.h | 10 + nameser.h | 569 ++ nameser_compat.h | 236 + network.c | 675 ++ network.h | 34 + ns_name.c | 355 + ns_name.h | 9 + ns_parse.c | 206 + ns_parse.h | 73 + ntservice.c | 346 + ntservice.h | 28 + output.c | 240 + output.h | 27 + resolv.h | 499 + resolv_static.h | 32 + rpc.c | 1113 +++ rpc.h | 178 + shared_globals.c | 98 + shared_globals.h | 156 + types.h | 266 + vlmcs.1 | 255 + vlmcs.1.dos.txt | 305 + vlmcs.1.html | 515 + vlmcs.1.pdf | Bin 0 -> 25436 bytes vlmcs.1.unix.txt | 305 + vlmcs.c | 1310 +++ vlmcs.h | 21 + vlmcs_all.c | 6525 +++++++++++++ vlmcsd.7 | 137 + vlmcsd.7.dos.txt | 222 + vlmcsd.7.html | 413 + vlmcsd.7.pdf | Bin 0 -> 17147 bytes vlmcsd.7.unix.txt | 222 + vlmcsd.8 | 256 + vlmcsd.8.dos.txt | 523 ++ vlmcsd.8.html | 855 ++ vlmcsd.8.pdf | Bin 0 -> 34658 bytes vlmcsd.8.unix.txt | 523 ++ vlmcsd.c | 1685 ++++ vlmcsd.h | 61 + vlmcsd.ini | 92 + vlmcsd.ini.5 | 130 + vlmcsd.ini.5.dos.txt | 268 + vlmcsd.ini.5.html | 460 + vlmcsd.ini.5.pdf | Bin 0 -> 19037 bytes vlmcsd.ini.5.unix.txt | 268 + vlmcsd_all.c | 6009 ++++++++++++ vlmcsdmulti.1 | 53 + vlmcsdmulti.1.dos.txt | 76 + vlmcsdmulti.1.html | 158 + vlmcsdmulti.1.pdf | Bin 0 -> 10040 bytes vlmcsdmulti.1.unix.txt | 76 + vlmcsdmulti.c | 64 + vlmcsdmulti_all.c | 8274 +++++++++++++++++ 133 files changed, 102338 insertions(+) create mode 100644 GNUmakefile create mode 100644 KMSServer.idl create mode 100644 KMSServer_c_mingw_gcc.c create mode 100644 KMSServer_c_x64_mingw_gcc.c create mode 100644 KMSServer_h.h create mode 100644 KMSServer_s2_mingw_gcc.c create mode 100644 KMSServer_s2_x64_mingw_gcc.c create mode 100644 Makefile create mode 100644 README create mode 100644 README.compile-and-pre-built-binaries create mode 100644 README.openssl create mode 100644 buildroot-configs/arm/little-endian/glibc/armv4-el-glibc2.20-gcc4.9.1-binutils2.24.config create mode 100644 buildroot-configs/arm/little-endian/glibc/armv4t-el-glibc2.20-gcc4.9.1-binutils2.24-thumb1.config create mode 100644 buildroot-configs/arm/little-endian/glibc/armv5-el-glibc2.20-gcc4.9.1-binutils2.24.config create mode 100644 buildroot-configs/arm/little-endian/glibc/armv5t-el-glibc2.20-gcc4.9.2-binutils2.25-thumb1.config create mode 100644 buildroot-configs/arm/little-endian/glibc/armv6-el-hf-glibc2.20-gcc4.9.1-binutils2.24.config create mode 100644 buildroot-configs/arm/little-endian/glibc/armv7-el-glibc2.20-gcc4.9.1-binutils2.24-thumb2.config create mode 100644 buildroot-configs/arm/little-endian/musl/armv4-el-musl-gcc4.9.1-binutils2.24.config create mode 100644 buildroot-configs/arm/little-endian/musl/armv4t-el-musl-gcc4.9.1-binutils2.24-thumb1.config create mode 100644 buildroot-configs/arm/little-endian/musl/armv5-el-musl-gcc4.9.1-binutils2.24.config create mode 100644 buildroot-configs/arm/little-endian/musl/armv5t-el-musl-gcc4.9.1-binutils2.24-thumb1.config create mode 100644 buildroot-configs/arm/little-endian/musl/armv7-el-musl-gcc4.9.1-binutils2.24-thumb2.config create mode 100644 buildroot-configs/arm/little-endian/uclibc/armv4-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24.config create mode 100644 buildroot-configs/arm/little-endian/uclibc/armv4t-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24-thumb1.config create mode 100644 buildroot-configs/arm/little-endian/uclibc/armv5-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24.config create mode 100644 buildroot-configs/arm/little-endian/uclibc/armv5t-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24-thumb1.config create mode 100644 buildroot-configs/arm/little-endian/uclibc/armv7-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24-thumb2.config create mode 100644 buildroot-configs/mips/big-endian/glibc/mips16-eb-gcc4.9-glibc2.20-binutils2.24.config create mode 100644 buildroot-configs/mips/big-endian/glibc/mips32-eb-gcc4.9-glibc2.20-binutils2.24.config create mode 100644 buildroot-configs/mips/big-endian/glibc/mips32r2-eb-gcc4.9-glibc2.20-binutils2.24.config create mode 100644 buildroot-configs/mips/big-endian/musl/mips32-eb-gcc4.9-musl-binutils2.24.config create mode 100644 buildroot-configs/mips/big-endian/musl/mips32r2-eb-gcc4.9-musl-binutils2.24.config create mode 100644 buildroot-configs/mips/big-endian/uclibc/mips16-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config create mode 100644 buildroot-configs/mips/big-endian/uclibc/mips32-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config create mode 100644 buildroot-configs/mips/big-endian/uclibc/mips32r2-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config create mode 100644 buildroot-configs/mips/little-endian/glibc/mips16-el-gcc4.9-glibc2.20-binutils2.24.config create mode 100644 buildroot-configs/mips/little-endian/glibc/mips32-el-gcc4.9-glibc2.20-binutils2.24.config create mode 100644 buildroot-configs/mips/little-endian/glibc/mips32r2-el-gcc4.9-glibc2.20-binutils2.24.config create mode 100644 buildroot-configs/mips/little-endian/musl/mips32-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config create mode 100644 buildroot-configs/mips/little-endian/musl/mips32r2-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config create mode 100644 buildroot-configs/mips/little-endian/uclibc/mips16-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config create mode 100644 buildroot-configs/mips/little-endian/uclibc/mips32-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config create mode 100644 buildroot-configs/mips/little-endian/uclibc/mips32r2-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config create mode 100644 buildroot-configs/ppc/big-endian/uclibc/ppc-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config create mode 100644 config.h create mode 100644 crypto.c create mode 100644 crypto.h create mode 100644 crypto_internal.c create mode 100644 crypto_internal.h create mode 100644 crypto_openssl.c create mode 100644 crypto_openssl.h create mode 100644 crypto_polarssl.h create mode 100644 crypto_windows.c create mode 100644 crypto_windows.h create mode 100644 dns_srv.c create mode 100644 dns_srv.h create mode 100644 endian.c create mode 100644 endian.h create mode 100644 floppy144.vfd create mode 100644 helpers.c create mode 100644 helpers.h create mode 100644 kms.c create mode 100644 kms.h create mode 100644 libkms-test.c create mode 100644 libkms.c create mode 100644 libkms.h create mode 100644 make_dragonfly create mode 100644 make_freebsd create mode 100644 make_linux create mode 100644 make_minix create mode 100644 make_netbsd create mode 100644 make_openbsd create mode 100644 make_osx create mode 100644 make_solaris create mode 100644 make_windows create mode 100644 make_windows_native create mode 100644 msrpc-client.c create mode 100644 msrpc-client.h create mode 100644 msrpc-server.c create mode 100644 msrpc-server.h create mode 100644 nameser.h create mode 100644 nameser_compat.h create mode 100644 network.c create mode 100644 network.h create mode 100644 ns_name.c create mode 100644 ns_name.h create mode 100644 ns_parse.c create mode 100644 ns_parse.h create mode 100644 ntservice.c create mode 100644 ntservice.h create mode 100644 output.c create mode 100644 output.h create mode 100644 resolv.h create mode 100644 resolv_static.h create mode 100644 rpc.c create mode 100644 rpc.h create mode 100644 shared_globals.c create mode 100644 shared_globals.h create mode 100644 types.h create mode 100644 vlmcs.1 create mode 100644 vlmcs.1.dos.txt create mode 100644 vlmcs.1.html create mode 100644 vlmcs.1.pdf create mode 100644 vlmcs.1.unix.txt create mode 100644 vlmcs.c create mode 100644 vlmcs.h create mode 100644 vlmcs_all.c create mode 100644 vlmcsd.7 create mode 100644 vlmcsd.7.dos.txt create mode 100644 vlmcsd.7.html create mode 100644 vlmcsd.7.pdf create mode 100644 vlmcsd.7.unix.txt create mode 100644 vlmcsd.8 create mode 100644 vlmcsd.8.dos.txt create mode 100644 vlmcsd.8.html create mode 100644 vlmcsd.8.pdf create mode 100644 vlmcsd.8.unix.txt create mode 100644 vlmcsd.c create mode 100644 vlmcsd.h create mode 100644 vlmcsd.ini create mode 100644 vlmcsd.ini.5 create mode 100644 vlmcsd.ini.5.dos.txt create mode 100644 vlmcsd.ini.5.html create mode 100644 vlmcsd.ini.5.pdf create mode 100644 vlmcsd.ini.5.unix.txt create mode 100644 vlmcsd_all.c create mode 100644 vlmcsdmulti.1 create mode 100644 vlmcsdmulti.1.dos.txt create mode 100644 vlmcsdmulti.1.html create mode 100644 vlmcsdmulti.1.pdf create mode 100644 vlmcsdmulti.1.unix.txt create mode 100644 vlmcsdmulti.c create mode 100644 vlmcsdmulti_all.c diff --git a/GNUmakefile b/GNUmakefile new file mode 100644 index 0000000..d98cadf --- /dev/null +++ b/GNUmakefile @@ -0,0 +1,563 @@ +################################################################################ + +.PHONY: clean + +PROGRAM_NAME ?= vlmcsd +CLIENT_NAME ?= vlmcs +MULTI_NAME ?= vlmcsdmulti +CONFIG ?= config.h + +# crypto library to use for standard algos, could save ~1-2kb ;) +# can be either 'openssl', 'polarssl' or anything other for internal impl +CRYPTO ?= internal + +# use DNS_PARSER=internal if your OS doesn't supply the DNS parser routines +DNS_PARSER ?= OS + +# You should supply your own version string here + +VLMCSD_VERSION ?= $(shell test -d .svn && echo svn`svnversion`) + +FEATURES ?= full +VERBOSE ?= NO + +################################################################################ + +CC ?= gcc +TARGETPLATFORM := $(shell LANG=en_US.UTF-8 $(CC) -v 2>&1 | grep '^Target: ' | cut -f 2 -d ' ') + +ifneq (,$(findstring darwin,$(TARGETPLATFORM))) + DARWIN := 1 + UNIX := 1 +endif + +ifneq (,$(findstring androideabi,$(TARGETPLATFORM))) + ANDROID := 1 + UNIX := 1 +endif + +ifneq (,$(findstring minix,$(TARGETPLATFORM))) + MINIX := 1 + UNIX := 1 +endif + +ifneq (,$(findstring mingw,$(TARGETPLATFORM))) + MINGW := 1 + WIN := 1 +endif + +ifneq (,$(findstring cygwin,$(TARGETPLATFORM))) + CYGWIN := 1 + WIN := 1 +endif + +ifneq (,$(findstring freebsd,$(TARGETPLATFORM))) + FREEBSD := 1 + UNIX := 1 + BSD := 1 +endif + +ifneq (,$(findstring netbsd,$(TARGETPLATFORM))) + NETBSD := 1 + UNIX := 1 + BSD := 1 +endif + +ifneq (,$(findstring openbsd,$(TARGETPLATFORM))) + OPENBSD := 1 + UNIX := 1 + BSD := 1 +endif + +ifneq (,$(findstring solaris,$(TARGETPLATFORM))) + SOLARIS := 1 + UNIX := 1 +endif + +ifneq (,$(findstring linux,$(TARGETPLATFORM))) + LINUX := 1 + UNIX := 1 +endif + +ifeq ($(CYGWIN),1) + DLL_NAME ?= cygkms.dll +else ifeq ($(WIN),1) + DLL_NAME ?= libkms.dll +else ifeq ($(DARWIN),1) + DLL_NAME ?= libkms.dylib +else + DLL_NAME ?= libkms.so +endif + +BASECFLAGS = -DCONFIG=\"$(CONFIG)\" -DBUILD_TIME=$(shell date '+%s') -g -Os -fno-strict-aliasing -fomit-frame-pointer -ffunction-sections -fdata-sections +BASELDFLAGS = +STRIPFLAGS = +CLIENTLDFLAGS = +SERVERLDFLAGS = + +ifeq ($(NOLIBS),1) + NOLRESOLV=1 + NOLPTHREAD=1 +endif + +ifneq ($(NO_DNS),1) + ifneq ($(ANDROID),1) + ifneq ($(NOLRESOLV),1) + + ifeq ($(MINGW),1) + BASELDFLAGS += -ldnsapi + endif + + ifeq ($(LINUX),1) + BASELDFLAGS += -lresolv + endif + + ifeq ($(DARWIN),1) + BASELDFLAGS += -lresolv + endif + + ifeq ($(CYGWIN),1) + DNS_PARSER := internal + BASELDFLAGS += -lresolv + endif + + ifeq ($(OPENBSD),1) + DNS_PARSER := internal + endif + + ifeq ($(SOLARIS),1) + BASELDFLAGS += -lresolv + endif + + endif + endif +else + BASECFLAGS += -DNO_DNS +endif + +ifneq ($(CAT),2) + BASECFLAGS += "-Wall" +endif + +ifeq ($(DARWIN), 1) + STRIPFLAGS += -Wl,-S -Wl,-x + BASECFLAGS += -Wno-deprecated-declarations +else ifeq ($(shell uname), SunOS) + STRIPFLAGS += -s + ifeq ($(notdir $(LD_ALTEXEC)),gld) + BASELDFLAGS += -Wl,--gc-sections + endif + BASELDFLAGS += -lsocket +else + ifneq ($(CC),tcc) + BASELDFLAGS += -Wl,--gc-sections + endif + STRIPFLAGS += -s +endif + +ifeq ($(FEATURES), embedded) + BASECFLAGS += -DNO_HELP -DNO_USER_SWITCH -DNO_BASIC_PRODUCT_LIST -DNO_CUSTOM_INTERVALS -DNO_PID_FILE -DNO_VERBOSE_LOG +else ifeq ($(FEATURES), autostart) + BASECFLAGS += -DNO_HELP +else ifeq ($(FEATURES), minimum) + BASECFLAGS += -DNO_TIMEOUT -DNO_SIGHUP -DNO_CL_PIDS -DNO_EXTENDED_PRODUCT_LIST -DNO_BASIC_PRODUCT_LIST -DNO_LOG -DNO_RANDOM_EPID -DNO_INI_FILE -DNO_INI_FILE -DNO_HELP -DNO_CUSTOM_INTERVALS -DNO_PID_FILE -DNO_USER_SWITCH -DNO_VERBOSE_LOG -DNO_LIMIT +else ifeq ($(FEATURES), most) + BASECFLAGS += -DNO_SIGHUP -DNO_PID_FILE -DNO_LIMIT +else ifeq ($(FEATURES), inetd) + BASECFLAGS += -DNO_SIGHUP -DNO_SOCKETS -DNO_PID_FILE -DNO_LIMIT +else ifeq ($(FEATURES), fixedepids) + BASECFLAGS += -DNO_SIGHUP -DNO_CL_PIDS -DNO_RANDOM_EPID -DNO_INI_FILE +endif + +ifdef INI + BASECFLAGS += -DINI_FILE=\"$(INI)\" +endif + +ifeq ($(THREADS), 1) + BASECFLAGS += -DUSE_THREADS +endif + +ifeq ($(CHILD_HANDLER), 1) + BASECFLAGS += -DCHILD_HANDLER +endif + +ifeq ($(NO_TIMEOUT), 1) + BASECFLAGS += -DNO_TIMEOUT +endif + +ifdef WINDOWS + BASECFLAGS += -DEPID_WINDOWS=\"$(WINDOWS)\" +endif + +ifdef OFFICE2010 + BASECFLAGS += -DEPID_OFFICE2010=\"$(OFFICE2010)\" +endif + +ifdef OFFICE2013 + BASECFLAGS += -DEPID_OFFICE2013=\"$(OFFICE2013)\" +endif + +ifdef HWID + BASECFLAGS += -DHWID=$(HWID) +endif + +ifdef TERMINAL_WIDTH + BASECFLAGS += -DTERMINAL_FIXED_WIDTH=$(TERMINAL_WIDTH) +endif + +ifeq ($(NOPROCFS), 1) + BASECFLAGS += -DNO_PROCFS +endif + +ifeq ($(AUXV), 1) + BASECFLAGS += -DUSE_AUXV +endif + +ifneq ($(ANDROID), 1) +ifneq ($(MINIX), 1) +ifneq ($(NOLPTHREAD), 1) + ifeq ($(findstring NO_LIMIT,$(CFLAGS) $(BASECFLAGS)),) + BASELDFLAGS += -lpthread + endif + + ifneq ($(findstring USE_THREADS,$(BASECFLAGS)),) + BASELDFLAGS += -lpthread + endif +endif +endif +endif + +$(MULTI_NAME): BASECFLAGS += -DMULTI_CALL_BINARY=1 + +all: $(CLIENT_NAME) $(PROGRAM_NAME) + +ifdef CAT + allmulti: $(CLIENT_NAME) $(PROGRAM_NAME) $(MULTI_NAME) +endif + +ifneq ($(strip $(VLMCSD_VERSION)),) + BASECFLAGS += -DVERSION=\"$(VLMCSD_VERSION),\ built\ $(shell date -u '+%Y-%m-%d %H:%M:%S' | sed -e 's/ /\\ /g')\ UTC\" +endif + +ifdef CAT + BASECFLAGS += -DONE_FILE +endif + +SRCS = crypto.c kms.c endian.c output.c shared_globals.c helpers.c +HEADERS = $(CONFIG) types.h rpc.h vlmcsd.h endian.h crypto.h kms.h network.h output.h shared_globals.h vlmcs.h helpers.h +DEPS = $(MULTI_SRCS:.c=.d) + +VLMCSD_SRCS = vlmcsd.c $(SRCS) +VLMCSD_OBJS = $(VLMCSD_SRCS:.c=.o) + +VLMCS_SRCS = vlmcs.c $(SRCS) +VLMCS_OBJS = $(VLMCS_SRCS:.c=.o) + +MULTI_SRCS = vlmcsd.c vlmcs.c vlmcsdmulti.c $(SRCS) +MULTI_OBJS = $(MULTI_SRCS:.c=.o) + +DLL_SRCS = libkms.c $(SRCS) +DLL_OBJS = $(DLL_SRCS:.c=.o) + +PDFDOCS = vlmcs.1.pdf vlmcsd.7.pdf vlmcsd.8.pdf vlmcsdmulti.1.pdf vlmcsd.ini.5.pdf +HTMLDOCS = $(PDFDOCS:.pdf=.html) +UNIXDOCS = $(PDFDOCS:.pdf=.unix.txt) +DOSDOCS = $(PDFDOCS:.pdf=.dos.txt) + +ifneq ($(NO_DNS),1) + + VLMCS_SRCS += dns_srv.c + MULTI_SRCS += dns_srv.c + +ifeq ($(DNS_PARSER),internal) +ifneq ($(MINGW),1) + VLMCS_SRCS += ns_parse.c ns_name.c + MULTI_SRCS += ns_parse.c ns_name.c + BASECFLAGS += "-DDNS_PARSER_INTERNAL" +endif +endif + +endif + +ifeq ($(MSRPC),1) + VLMCSD_SRCS += msrpc-server.c + VLMCS_SRCS += msrpc-client.c + MULTI_SRCS += msrpc-server.c msrpc-client.c + BASECFLAGS += -DUSE_MSRPC -Wno-unknown-pragmas + BASELDFLAGS += -lrpcrt4 +else + SRCS += network.c rpc.c +endif + +ifeq "$(WIN)" "1" + VLMCSD_SRCS += ntservice.c + MULTI_SRCS += ntservice.c +endif + +ifeq ($(CRYPTO), openssl_with_aes) + BASECFLAGS += -D_CRYPTO_OPENSSL -D_USE_AES_FROM_OPENSSL + BASELDFLAGS += -lcrypto + SRCS += crypto_openssl.c +else ifeq ($(CRYPTO), openssl_with_aes_soft) + BASECFLAGS += -D_CRYPTO_OPENSSL -D_USE_AES_FROM_OPENSSL -D_OPENSSL_SOFTWARE + BASELDFLAGS += -lcrypto + SRCS += crypto_openssl.c +else ifeq ($(CRYPTO), openssl) + BASECFLAGS += -D_CRYPTO_OPENSSL + BASELDFLAGS += -lcrypto + SRCS += crypto_openssl.c +else ifeq ($(CRYPTO), polarssl) + BASECFLAGS += -D_CRYPTO_POLARSSL + BASELDFLAGS += -lpolarssl +else ifeq ($(CRYPTO), windows) + BASECFLAGS += -D_CRYPTO_WINDOWS + SRCS += crypto_windows.c + #BASELDFLAGS += -lpolarssl +else + BASECFLAGS += -D_CRYPTO_INTERNAL + SRCS += crypto_internal.c +endif + +ifneq ($(STRIP),0) + BASELDFLAGS += $(STRIPFLAGS) +endif + +ifeq ($(OPENSSL_HMAC),0) + BASECFLAGS += -D_OPENSSL_NO_HMAC +endif + +ifeq ($(DEPENDENCIES),2) + BASECFLAGS += -MMD +endif + +ifeq ($(VERBOSE),3) + COMPILER := $(shell printf "%-40s" $(notdir $(CC))) +endif + +ifeq ($(CAT),2) + LDCMD := CC/LD +else + LDCMD := LD +endif + +-include $(MULTI_SRCS:.c=.d) + +%.o: %.c + ifeq ($(VERBOSE),1) + $(CC) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -c $< + ifeq ($(DEPENDENCIES),1) + $(CC) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -MM -MF $*.d $< + endif + else + @echo "$(COMPILER) CC $@ <- $<" + @$(CC) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -c $< + ifeq ($(DEPENDENCIES),1) + @echo "$(COMPILER) DEP $*.d <- $<" + @$(CC) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -MM -MF $*.d $< + endif + endif + +vlmcsd_all.c: $(VLMCSD_SRCS) + ifeq ($(VERBOSE),1) + cat $^ > $@ + else + @echo "$(COMPILER) CAT $@ <- $^" + @cat $^ > $@ + endif + +vlmcs_all.c: $(VLMCS_SRCS) + ifeq ($(VERBOSE),1) + cat $^ > $@ + else + @echo "$(COMPILER) CAT $@ <- $^" + @cat $^ > $@ + endif + +vlmcsdmulti_all.c: $(MULTI_SRCS) + ifeq ($(VERBOSE),1) + cat $^ > $@ + else + @echo "$(COMPILER) CAT $@ <- $^" + @cat $^ > $@ + endif + +ifdef CAT +ifeq ($(CAT),2) +$(PROGRAM_NAME): vlmcsd_all.c +else +$(PROGRAM_NAME): vlmcsd_all.o +endif +else +$(PROGRAM_NAME): $(VLMCSD_OBJS) +endif + ifeq ($(VERBOSE),1) + +$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) + else + +@echo "$(COMPILER) $(LDCMD) $@ <- $^" + +@$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) + endif + +ifdef CAT +ifeq ($(CAT),2) +$(CLIENT_NAME): vlmcs_all.c +else +$(CLIENT_NAME): vlmcs_all.o +endif +else +$(CLIENT_NAME): $(VLMCS_OBJS) +endif + ifeq ($(VERBOSE),1) + +$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) + else + +@echo "$(COMPILER) $(LDCMD) $@ <- $^" + +@$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) + endif + +ifdef CAT +ifeq ($(CAT),2) +$(MULTI_NAME): vlmcsdmulti_all.c +else +$(MULTI_NAME): vlmcsdmulti_all.o +endif +else +$(MULTI_NAME): $(MULTI_OBJS) +endif + ifeq ($(VERBOSE),1) + +$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) + else + +@echo "$(COMPILER) $(LDCMD) $@ <- $^" + +@$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) + endif + +$(DLL_NAME): $(DLL_SRCS) + ifeq ($(VERBOSE),1) + +$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) -shared -DIS_LIBRARY=1 -UNO_SOCKETS -UUSE_MSRPC + else + +@echo "$(COMPILER) $(LDCMD) $@ <- $^" + +@$(CC) -o $@ $^ $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(BASELDFLAGS) $(LDFLAGS) -shared -DIS_LIBRARY=1 -UNO_SOCKETS -UUSE_MSRPC + endif + + +%.pdf : % + ifeq ($(shell uname), Darwin) + groff -Tps -mandoc -c $< | pstopdf -i -o $@ + else + groff -Tpdf -mandoc -c $< > $@ + endif + +%.html : % + groff -Thtml -mandoc -c $< > $@ + +%.unix.txt : % + groff -P -c -Tutf8 -mandoc -c $< | col -bx > $@ + +%.dos.txt : %.unix.txt +# unix2dos -n $< $@ +# sed -e 's/$$/\r/' $< > $@ + awk 'sub("$$", "\r")' $< > $@ + +pdfdocs : $(PDFDOCS) + +dosdocs : $(DOSDOCS) + +unixdocs : $(UNIXDOCS) + +htmldocs : $(HTMLDOCS) + +alldocs : $(UNIXDOCS) $(HTMLDOCS) $(PDFDOCS) $(DOSDOCS) + +clean: + rm -f *.o *.d *_all.c $(PROGRAM_NAME) $(MULTI_NAME) $(DLL_NAME) $(CLIENT_NAME) $(PDFDOCS) $(DOSDOCS) $(UNIXDOCS) $(HTMLDOCS) + +help: + @echo "Type:" + @echo " ${MAKE} - to build $(PROGRAM_NAME) and $(CLIENT_NAME)" + @echo " ${MAKE} clean - to remove $(PROGRAM_NAME) and $(CLIENT_NAME)" + @echo " ${MAKE} help - to see this help" + @echo " ${MAKE} pdfdocs - Create PDF versions of the documentation (Requires groff with PDF support)." + @echo " ${MAKE} htmldocs - Create HTML versions of the documentation." + @echo " ${MAKE} unixdocs - Create Unix TXT versions of the documentation." + @echo " ${MAKE} dosdocs - Create DOS/Windows TXT versions of the documentation." + @echo " ${MAKE} alldocs - Create all versions of the documentation." + @echo " ${MAKE} -j - Use parallel tasks (SMP support) when compiling $(PROGRAM_NAME) and $(CLIENT_NAME)" + @echo "" + @echo " ${MAKE} $(PROGRAM_NAME) - to build the server only." + @echo " ${MAKE} $(CLIENT_NAME) - to build the client only." + @echo " ${MAKE} $(MULTI_NAME) - to build $(PROGRAM_NAME) and $(CLIENT_NAME) in a single multi-call binary" + @echo " ${MAKE} $(DLL_NAME) - to build the shared library $(DLL_NAME)" + @echo "" + @echo "Options:" + @echo " CONFIG= Compile as instead of config.h." + @echo " INI= Compile $(PROGRAM_NAME) with default ini file " + @echo " PROGRAM_NAME= Use as output file name for the KMS server. Defaults to vlmcsd." + @echo " CLIENT_NAME= Use as output file name for the KMS client. Defaults to vlmcs." + @echo " MULTI_NAME= Use as output file name for the multi-call binary. Defaults to vlmcsdmulti." + @echo " DEPENDENCIES=1 Create dependency files." + @echo " CRYPTO=openssl Use openssl for SHA256/HMAC calculations." + @echo " CRYPTO=openssl_with_aes EXPERIMENTAL: Use openssl for SHA256/HMAC and AES calculations (hardware, e.g. AES-NI on x86)." + @echo " CRYPTO=openssl_with_aes_soft EXPERIMENTAL: Use openssl for SHA256/HMAC and AES calculations (software)." + @echo " CRYPTO=polarssl Use polarssl instead of internal crypto code for SHA256/HMAC calculations." + @echo " CRYPTO=windows Use Windows CryptoAPI instead of internal crypto code for SHA256/HMAC calculations." + @echo " CC= Use compiler . Supported compilers are gcc, icc, tcc and clang. Others may or may not work." + @echo " TERMINAL_WIDTH= Assume a fixed terminal width of columns. Use in case of problems only." + @echo " VLMCSD_VERSION= Sets as your version identifier. Defaults to \"private build\"." + @echo " CFLAGS= Pass as additional arguments to the compiler." + @echo " LDFLAGS= Pass as additional arguments to the linker." + @echo " PLATFORMFLAGS= Pass as additional arguments to the compiler and the linker." + @echo " BASECFLAGS= Pass only as arguments to the compiler (advanced users only)." + @echo " BASELDFLAGS= Pass only as arguments to the linker (advanced users only)." + @echo " STRIP=0 Don't strip debug information from $(PROGRAM_NAME) and $(CLIENT_NAME) (for developers)." + @echo " VERBOSE=1 Be verbose when making targets." + @echo " VERBOSE=3 Show name of compiler." + @echo " THREADS=1 Use threads instead of fork(). Automatically set for native Windows. Recommended for Cygwin." + @echo " WINDOWS= Use as the default ePID for Windows (when using $(PROGRAM_NAME) with -r 0)." + @echo " OFFICE2010= Use as the default ePID for Office2010 (when using $(PROGRAM_NAME) with -r 0)." + @echo " OFFICE2013= Use as the default ePID for Office2013 (when using $(PROGRAM_NAME) with -r 0)." + @echo " HWID= Use as the default HWID (when it can't be found in an ini file)." + @echo " FEATURES=full Compile $(PROGRAM_NAME) with all features (default)." + @echo " FEATURES=most Compile $(PROGRAM_NAME) without rarely used features." + @echo " FEATURES=embedded Compile $(PROGRAM_NAME) with typical features for embedded systems." + @echo " FEATURES=autostart Removes features typically not needed if you place $(PROGRAM_NAME) in an autostart script." + @echo " FEATURES=inetd Compile $(PROGRAM_NAME) for running through an internet superserver only." + @echo " FEATURES=minimum Compiles only basic features of $(PROGRAM_NAME)." + @echo " FEATURES=fixedepids $(PROGRAM_NAME) only uses bultin internal ePIDs." + @echo "" + @echo "Useful CFLAGS to save memory when running $(PROGRAM_NAME) on very small embedded devices (finer control than FEATURES=):" + @echo " -DNO_EXTENDED_PRODUCT_LIST Don't compile the detailed product list." + @echo " -DNO_BASIC_PRODUCT_LIST Don't compile the basic product list." + @echo " -DNO_VERBOSE_LOG Don't support verbose logging. Removes -v option." + @echo " -DNO_LOG Don't add support for logging. Implies -DNO_VERBOSE_LOG -DNO_EXTENDED_PRODUCT_LIST and -DNO_BASIC_PRODUCT_LIST." + @echo " -DNO_RANDOM_EPID Don't support random ePIDs." + @echo " -DNO_INI_FILE Don't support reading ePIDs/HWIDs from a file." + @echo " -DNO_PID_FILE Don't support writing a PID file. Removes -p option." + @echo " -DNO_USER_SWITCH Don't support changing uid/gid after program start. Removes -u and -g options." + @echo " -DNO_HELP Don't support command line help." + @echo " -DNO_CUSTOM_INTERVALS Don't support custom intervals for retry and refresh activation. Removes -A and -R options." + @echo " -DNO_SOCKETS Don't support standalone operation. Requires an internet superserver to start $(PROGRAM_NAME)." + @echo " -DNO_CL_PIDS Don't support specifying ePIDs and HwId from the command line in $(PROGRAM_NAME)." + @echo " -DNO_LIMIT Don't support limiting concurrent clients in $(PROGRAM_NAME)." + @echo " -DNO_SIGHUP Don't support SIGHUP handling in $(PROGRAM_NAME)." + @echo "" + @echo "Troubleshooting options" + @echo " CAT=1 Combine all sources in a single file." + @echo " CAT=2 Combine all sources in a single file and don't create a *.o file." + @echo " NOPROCFS=1 Don't rely on a properly mounted proc filesystem in /proc." + @echo " AUXV=1 Use /proc/self/auxv (requires Linux with glibc >= 2.16 or musl.)" + @echo " NOLPTHREAD=1 Disable detection if -lpthread is required (for use with Android NDK)." + @echo " NOLRESOLV=1 Disable detection if -lresolv is requires (for use with Android NDK)." + @echo " NOLIBS=1 Do not attempt to autodetect any library dependencies." + @echo " OPENSSL_HMAC=0 Compile for openssl versions that don't have HMAC support (required on some embedded devices)." + @echo " NO_TIMEOUT=1 Do not set timeouts for sockets (for systems that don't support it)." + @echo " CHILD_HANDLER=1 Install a handler for SIGCHLD (for systems that don't support SA_NOCLDWAIT)." + @echo " NO_DNS=1 Compile vlmcs without support for detecting KMS servers via DNS." + @echo " DNS_PARSER=internal Use $(CLIENT_NAME) internal DNS parsing routines. No effect on MingW (native Windows)." + @echo "" + @echo "Other useful CFLAGS:" + @echo " -DSUPPORT_WINE Add code that the Windows version of $(PROGRAM_NAME) runs on Wine if MSRPC=1" + @echo " -D_PEDANTIC Report rare error/warning conditions instead of silently ignoring them." + @echo " -DINCLUDE_BETAS Include SKU / activation IDs for obsolete beta/preview products." + @echo " -DFD_SETSIZE= Allow -L statements in $(PROGRAM_NAME) (default: 64 on Windows, 1024 on most Unixes)." + @echo " -flto Use link time optimization. Not supported by old compilers (gcc < 4.7). Use whenever supported." + @echo " -flto=jobserver Utilize all CPUs during link time optimization. Requires ${MAKE} -j " + @echo " -fno-stack-protector No stack checking. Smaller binaries." + @echo " -pipe Use pipes instead of temporary files (faster compilation, extends the life of your SSD)." diff --git a/KMSServer.idl b/KMSServer.idl new file mode 100644 index 0000000..361c5b9 --- /dev/null +++ b/KMSServer.idl @@ -0,0 +1,14 @@ +[ + uuid(51C82175-844E-4750-B0D8-EC255555BC06), + version(1.0), +] +interface KMSServer +{ + int RequestActivation + ( + [in] int requestSize, + [in, size_is(requestSize)] unsigned char* request, + [out] int* responseSize, + [out, size_is( , *responseSize)] unsigned char** response + ); +} \ No newline at end of file diff --git a/KMSServer_c_mingw_gcc.c b/KMSServer_c_mingw_gcc.c new file mode 100644 index 0000000..22b028d --- /dev/null +++ b/KMSServer_c_mingw_gcc.c @@ -0,0 +1,278 @@ + + +/* this ALWAYS GENERATED file contains the RPC client stubs */ + + + /* File created by MIDL compiler version 8.00.0595 */ +/* at Thu Oct 18 15:24:14 2012 + */ +/* Compiler settings for KMSServer.idl: + Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.00.0595 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#if !defined(_M_IA64) && !defined(_M_AMD64) && !defined(_ARM_) + + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif + +#pragma warning( disable: 4211 ) /* redefine extern to static */ +#pragma warning( disable: 4232 ) /* dllimport identity*/ +#pragma warning( disable: 4024 ) /* array to pointer mapping*/ +#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */ + +#pragma optimize("", off ) + +#include + +#include "KMSServer_h.h" + +#define TYPE_FORMAT_STRING_SIZE 43 +#define PROC_FORMAT_STRING_SIZE 59 +#define EXPR_FORMAT_STRING_SIZE 1 +#define TRANSMIT_AS_TABLE_SIZE 0 +#define WIRE_MARSHAL_TABLE_SIZE 0 + +typedef struct _KMSServer_MIDL_TYPE_FORMAT_STRING + { + short Pad; + unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; + } KMSServer_MIDL_TYPE_FORMAT_STRING; + +typedef struct _KMSServer_MIDL_PROC_FORMAT_STRING + { + short Pad; + unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; + } KMSServer_MIDL_PROC_FORMAT_STRING; + +typedef struct _KMSServer_MIDL_EXPR_FORMAT_STRING + { + long Pad; + unsigned char Format[ EXPR_FORMAT_STRING_SIZE ]; + } KMSServer_MIDL_EXPR_FORMAT_STRING; + + +static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax = +{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}; + + +extern const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString; +extern const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString; +extern const KMSServer_MIDL_EXPR_FORMAT_STRING KMSServer__MIDL_ExprFormatString; + +#define GENERIC_BINDING_TABLE_SIZE 0 + + +/* Standard interface: KMSServer, ver. 1.0, + GUID={0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}} */ + + + +static const RPC_CLIENT_INTERFACE KMSServer___RpcClientInterface = + { + sizeof(RPC_CLIENT_INTERFACE), + {{0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}},{1,0}}, + {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}, + 0, + 0, + 0, + 0, + 0, + 0x00000000 + }; +RPC_IF_HANDLE KMSServer_v1_0_c_ifspec = (RPC_IF_HANDLE)& KMSServer___RpcClientInterface; + +extern const MIDL_STUB_DESC KMSServer_StubDesc; + +static RPC_BINDING_HANDLE KMSServer__MIDL_AutoBindHandle; + + +int RequestActivation( + /* [in] */ handle_t IDL_handle, + /* [in] */ int requestSize, + /* [size_is][in] */ unsigned char *request, + /* [out] */ int *responseSize, + /* [size_is][size_is][out] */ unsigned char **response) +{ + + CLIENT_CALL_RETURN _RetVal; + + _RetVal = NdrClientCall2( + ( PMIDL_STUB_DESC )&KMSServer_StubDesc, + (PFORMAT_STRING) &KMSServer__MIDL_ProcFormatString.Format[0], + ( unsigned char * )&IDL_handle); + return ( int )_RetVal.Simple; + +} + + +#if !defined(__RPC_WIN32__) +#error Invalid build platform for this stub. +#endif + +#if !(TARGET_IS_NT50_OR_LATER) +#error You need Windows 2000 or later to run this stub because it uses these features: +#error /robust command line switch. +#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems. +#error This app will fail with the RPC_X_WRONG_STUB_VERSION error. +#endif + +#if !MULTI_CALL_BINARY +/*static*/ const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString = + { + 0, + { + + /* Procedure RequestActivation */ + + 0x0, /* 0 */ + 0x48, /* Old Flags: */ +/* 2 */ NdrFcLong( 0x0 ), /* 0 */ +/* 6 */ NdrFcShort( 0x0 ), /* 0 */ +/* 8 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 10 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x0, /* 0 */ +/* 12 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 14 */ NdrFcShort( 0x8 ), /* 8 */ +/* 16 */ NdrFcShort( 0x24 ), /* 36 */ +/* 18 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ + 0x5, /* 5 */ +/* 20 */ 0x8, /* 8 */ + 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */ +/* 22 */ NdrFcShort( 0x1 ), /* 1 */ +/* 24 */ NdrFcShort( 0x1 ), /* 1 */ +/* 26 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter IDL_handle */ + +/* 28 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 30 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 32 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter requestSize */ + +/* 34 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 36 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 38 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Parameter request */ + +/* 40 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 42 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 44 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter responseSize */ + +/* 46 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 48 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 50 */ NdrFcShort( 0x16 ), /* Type Offset=22 */ + + /* Parameter response */ + +/* 52 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 54 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 56 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + 0x0 + } + }; + +/*static*/ const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString = + { + 0, + { + NdrFcShort( 0x0 ), /* 0 */ +/* 2 */ + 0x11, 0x0, /* FC_RP */ +/* 4 */ NdrFcShort( 0x2 ), /* Offset= 2 (6) */ +/* 6 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 8 */ NdrFcShort( 0x1 ), /* 1 */ +/* 10 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x0, /* */ +/* 12 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 14 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 16 */ 0x2, /* FC_CHAR */ + 0x5b, /* FC_END */ +/* 18 */ + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 20 */ 0x8, /* FC_LONG */ + 0x5c, /* FC_PAD */ +/* 22 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 24 */ NdrFcShort( 0x2 ), /* Offset= 2 (26) */ +/* 26 */ + 0x12, 0x0, /* FC_UP */ +/* 28 */ NdrFcShort( 0x2 ), /* Offset= 2 (30) */ +/* 30 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 32 */ NdrFcShort( 0x1 ), /* 1 */ +/* 34 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 36 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 38 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 40 */ 0x2, /* FC_CHAR */ + 0x5b, /* FC_END */ + + 0x0 + } + }; + +#endif // !MULTI_CALL_BINARY + +static const unsigned short KMSServer_FormatStringOffsetTable[] = + { + 0 + }; + +//typedef void *(__RPC_API midl_user_allocate_t)(size_t); +typedef void *(__RPC_API *midl_allocate_t)(size_t); + +#if !MULTI_CALL_BINARY +/*static*/ const MIDL_STUB_DESC KMSServer_StubDesc = + { + (void *)& KMSServer___RpcClientInterface, + (midl_allocate_t)MIDL_user_allocate, + MIDL_user_free, + &KMSServer__MIDL_AutoBindHandle, + 0, + 0, + 0, + 0, + KMSServer__MIDL_TypeFormatString.Format, + 1, /* -error bounds_check flag */ + 0x50002, /* Ndr library version */ + 0, + 0x8000253, /* MIDL Version 8.0.595 */ + 0, + 0, + 0, /* notify & notify_flag routine table */ + 0x1, /* MIDL flag */ + 0, /* cs routines */ + 0, /* proxy/server info */ + 0 + }; + +#endif // !MULTI_CALL_BINARY + +#pragma optimize("", on ) +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + + +#endif /* !defined(_M_IA64) && !defined(_M_AMD64) && !defined(_ARM_) */ + diff --git a/KMSServer_c_x64_mingw_gcc.c b/KMSServer_c_x64_mingw_gcc.c new file mode 100644 index 0000000..b3d5fcd --- /dev/null +++ b/KMSServer_c_x64_mingw_gcc.c @@ -0,0 +1,731 @@ + + +/* this ALWAYS GENERATED file contains the RPC client stubs */ + + + /* File created by MIDL compiler version 8.00.0603 */ +/* at Fri Feb 20 04:17:07 2015 + * modified by Hotbird64 to work with MingW-w64 and gcc + */ +/* Compiler settings for KMSServer.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.00.0603 + protocol : all , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#if defined(_M_AMD64) + + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif + +#pragma warning( disable: 4211 ) /* redefine extern to static */ +#pragma warning( disable: 4232 ) /* dllimport identity*/ +#pragma warning( disable: 4024 ) /* array to pointer mapping*/ + +#include + +#include "KMSServer_h.h" + +#define TYPE_FORMAT_STRING_SIZE 43 +#define PROC_FORMAT_STRING_SIZE 61 +#define EXPR_FORMAT_STRING_SIZE 1 +#define TRANSMIT_AS_TABLE_SIZE 0 +#define WIRE_MARSHAL_TABLE_SIZE 0 + +typedef struct _KMSServer_MIDL_TYPE_FORMAT_STRING + { + short Pad; + unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; + } KMSServer_MIDL_TYPE_FORMAT_STRING; + +typedef struct _KMSServer_MIDL_PROC_FORMAT_STRING + { + short Pad; + unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; + } KMSServer_MIDL_PROC_FORMAT_STRING; + +typedef struct _KMSServer_MIDL_EXPR_FORMAT_STRING + { + long Pad; + unsigned char Format[ EXPR_FORMAT_STRING_SIZE ]; + } KMSServer_MIDL_EXPR_FORMAT_STRING; + + +static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax = +{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}; + +static const RPC_SYNTAX_IDENTIFIER _NDR64_RpcTransferSyntax = +{{0x71710533,0xbeba,0x4937,{0x83,0x19,0xb5,0xdb,0xef,0x9c,0xcc,0x36}},{1,0}}; + + + +extern const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString; +extern const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString; +extern const KMSServer_MIDL_EXPR_FORMAT_STRING KMSServer__MIDL_ExprFormatString; + +#define GENERIC_BINDING_TABLE_SIZE 0 + + +/* Standard interface: KMSServer, ver. 1.0, + GUID={0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}} */ + + extern const MIDL_STUBLESS_PROXY_INFO KMSServer_ProxyInfo; + + +static const RPC_CLIENT_INTERFACE KMSServer___RpcClientInterface = + { + sizeof(RPC_CLIENT_INTERFACE), + {{0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}},{1,0}}, + {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}, + 0, + 0, + 0, + 0, + &KMSServer_ProxyInfo, + 0x02000000 + }; +RPC_IF_HANDLE KMSServer_v1_0_c_ifspec = (RPC_IF_HANDLE)& KMSServer___RpcClientInterface; + +extern const MIDL_STUB_DESC KMSServer_StubDesc; + +static RPC_BINDING_HANDLE KMSServer__MIDL_AutoBindHandle; + + +int RequestActivation( + /* [in] */ handle_t IDL_handle, + /* [in] */ int requestSize, + /* [size_is][in] */ unsigned char *request, + /* [out] */ int *responseSize, + /* [size_is][size_is][out] */ unsigned char **response) +{ + + CLIENT_CALL_RETURN _RetVal; + + _RetVal = NdrClientCall3( + ( PMIDL_STUBLESS_PROXY_INFO )&KMSServer_ProxyInfo, + 0, + 0, + IDL_handle, + requestSize, + request, + responseSize, + response); + return ( int )_RetVal.Simple; + +} + + +#if !defined(__RPC_WIN64__) +#error Invalid build platform for this stub. +#endif + +#if !MULTI_CALL_BINARY +/*static*/ const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString = + { + 0, + { + + /* Procedure RequestActivation */ + + 0x0, /* 0 */ + 0x48, /* Old Flags: */ +/* 2 */ NdrFcLong( 0x0 ), /* 0 */ +/* 6 */ NdrFcShort( 0x0 ), /* 0 */ +/* 8 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 10 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x0, /* 0 */ +/* 12 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */ +/* 14 */ NdrFcShort( 0x8 ), /* 8 */ +/* 16 */ NdrFcShort( 0x24 ), /* 36 */ +/* 18 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ + 0x5, /* 5 */ +/* 20 */ 0xa, /* 10 */ + 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */ +/* 22 */ NdrFcShort( 0x1 ), /* 1 */ +/* 24 */ NdrFcShort( 0x1 ), /* 1 */ +/* 26 */ NdrFcShort( 0x0 ), /* 0 */ +/* 28 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter IDL_handle */ + +/* 30 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 32 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 34 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter requestSize */ + +/* 36 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 38 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 40 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Parameter request */ + +/* 42 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 44 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 46 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter responseSize */ + +/* 48 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 50 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 52 */ NdrFcShort( 0x16 ), /* Type Offset=22 */ + + /* Parameter response */ + +/* 54 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 56 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 58 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + 0x0 + } + }; + +/*static*/ const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString = + { + 0, + { + NdrFcShort( 0x0 ), /* 0 */ +/* 2 */ + 0x11, 0x0, /* FC_RP */ +/* 4 */ NdrFcShort( 0x2 ), /* Offset= 2 (6) */ +/* 6 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 8 */ NdrFcShort( 0x1 ), /* 1 */ +/* 10 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x0, /* */ +/* 12 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 14 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 16 */ 0x2, /* FC_CHAR */ + 0x5b, /* FC_END */ +/* 18 */ + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 20 */ 0x8, /* FC_LONG */ + 0x5c, /* FC_PAD */ +/* 22 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 24 */ NdrFcShort( 0x2 ), /* Offset= 2 (26) */ +/* 26 */ + 0x12, 0x0, /* FC_UP */ +/* 28 */ NdrFcShort( 0x2 ), /* Offset= 2 (30) */ +/* 30 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 32 */ NdrFcShort( 0x1 ), /* 1 */ +/* 34 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 36 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 38 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 40 */ 0x2, /* FC_CHAR */ + 0x5b, /* FC_END */ + + 0x0 + } + }; + +#endif //!MULTI_CALL_BINARY + +static const unsigned short KMSServer_FormatStringOffsetTable[] = + { + 0 + }; + + + +#endif /* defined(_M_AMD64)*/ + + + +/* this ALWAYS GENERATED file contains the RPC client stubs */ + + + /* File created by MIDL compiler version 8.00.0603 */ +/* at Fri Feb 20 04:17:07 2015 + */ +/* Compiler settings for KMSServer.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.00.0603 + protocol : all , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#if defined(_M_AMD64) + + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +#if !defined(__RPC_WIN64__) +#error Invalid build platform for this stub. +#endif + + +#include "ndr64types.h" +#include "pshpack8.h" + +typedef +struct +{ + NDR64_FORMAT_UINT32 frag1; + struct _NDR64_EXPR_OPERATOR frag2; + struct _NDR64_EXPR_VAR frag3; +} +__midl_frag13_t; + +extern const __midl_frag13_t __midl_frag13; + +typedef +struct +{ + struct _NDR64_CONF_ARRAY_HEADER_FORMAT frag1; + struct _NDR64_ARRAY_ELEMENT_INFO frag2; +} +__midl_frag12_t; +extern const __midl_frag12_t __midl_frag12; + +typedef +struct _NDR64_POINTER_FORMAT +__midl_frag11_t; +extern const __midl_frag11_t __midl_frag11; + +typedef +struct _NDR64_POINTER_FORMAT +__midl_frag10_t; +extern const __midl_frag10_t __midl_frag10; + +typedef +struct _NDR64_POINTER_FORMAT +__midl_frag8_t; +extern const __midl_frag8_t __midl_frag8; + +typedef +NDR64_FORMAT_CHAR +__midl_frag7_t; +extern const __midl_frag7_t __midl_frag7; + +typedef +struct +{ + NDR64_FORMAT_UINT32 frag1; + struct _NDR64_EXPR_VAR frag2; +} +__midl_frag6_t; +extern const __midl_frag6_t __midl_frag6; + +typedef +struct +{ + struct _NDR64_CONF_ARRAY_HEADER_FORMAT frag1; + struct _NDR64_ARRAY_ELEMENT_INFO frag2; +} +__midl_frag5_t; +extern const __midl_frag5_t __midl_frag5; + +typedef +struct _NDR64_POINTER_FORMAT +__midl_frag4_t; +extern const __midl_frag4_t __midl_frag4; + +typedef +NDR64_FORMAT_CHAR +__midl_frag3_t; +extern const __midl_frag3_t __midl_frag3; + +typedef +struct +{ + struct _NDR64_PROC_FORMAT frag1; + struct _NDR64_BIND_AND_NOTIFY_EXTENSION frag2; + struct _NDR64_PARAM_FORMAT frag3; + struct _NDR64_PARAM_FORMAT frag4; + struct _NDR64_PARAM_FORMAT frag5; + struct _NDR64_PARAM_FORMAT frag6; + struct _NDR64_PARAM_FORMAT frag7; +} +__midl_frag2_t; +extern const __midl_frag2_t __midl_frag2; + +typedef +NDR64_FORMAT_UINT32 +__midl_frag1_t; +extern const __midl_frag1_t __midl_frag1; + +#if !MULTI_CALL_BINARY +/*static*/ const __midl_frag13_t __midl_frag13 = +{ +/* */ + (NDR64_UINT32) 1 /* 0x1 */, + { + /* struct _NDR64_EXPR_OPERATOR */ + 0x4, /* FC_EXPR_OPER */ + 0x5, /* OP_UNARY_INDIRECTION */ + 0x5, /* FC64_INT32 */ + (NDR64_UINT8) 0 /* 0x0 */ + }, + { + /* struct _NDR64_EXPR_VAR */ + 0x3, /* FC_EXPR_VAR */ + 0x7, /* FC64_INT64 */ + (NDR64_UINT16) 0 /* 0x0 */, + (NDR64_UINT32) 24 /* 0x18 */ /* Offset */ + } +}; + +/*static*/ const __midl_frag12_t __midl_frag12 = +{ +/* *char */ + { + /* *char */ + 0x41, /* FC64_CONF_ARRAY */ + (NDR64_UINT8) 0 /* 0x0 */, + { + /* *char */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + }, + (NDR64_UINT8) 0 /* 0x0 */, + (NDR64_UINT32) 1 /* 0x1 */, + &__midl_frag13 + }, + { + /* struct _NDR64_ARRAY_ELEMENT_INFO */ + (NDR64_UINT32) 1 /* 0x1 */, + &__midl_frag7 + } +}; + +/*static*/ const __midl_frag11_t __midl_frag11 = +{ +/* *char */ + 0x21, /* FC64_UP */ + (NDR64_UINT8) 0 /* 0x0 */, + (NDR64_UINT16) 0 /* 0x0 */, + &__midl_frag12 +}; + +/*static*/ const __midl_frag10_t __midl_frag10 = +{ +/* **char */ + 0x20, /* FC64_RP */ + (NDR64_UINT8) 20 /* 0x14 */, + (NDR64_UINT16) 0 /* 0x0 */, + &__midl_frag11 +}; + +/*static*/ const __midl_frag8_t __midl_frag8 = +{ +/* *int */ + 0x20, /* FC64_RP */ + (NDR64_UINT8) 12 /* 0xc */, + (NDR64_UINT16) 0 /* 0x0 */, + &__midl_frag3 +}; + +/*static*/ const __midl_frag7_t __midl_frag7 = +0x10 /* FC64_CHAR */; + +/*static*/ const __midl_frag6_t __midl_frag6 = +{ +/* */ + (NDR64_UINT32) 1 /* 0x1 */, + { + /* struct _NDR64_EXPR_VAR */ + 0x3, /* FC_EXPR_VAR */ + 0x5, /* FC64_INT32 */ + (NDR64_UINT16) 0 /* 0x0 */, + (NDR64_UINT32) 8 /* 0x8 */ /* Offset */ + } +}; + +/*static*/ const __midl_frag5_t __midl_frag5 = +{ +/* *char */ + { + /* *char */ + 0x41, /* FC64_CONF_ARRAY */ + (NDR64_UINT8) 0 /* 0x0 */, + { + /* *char */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + }, + (NDR64_UINT8) 0 /* 0x0 */, + (NDR64_UINT32) 1 /* 0x1 */, + &__midl_frag6 + }, + { + /* struct _NDR64_ARRAY_ELEMENT_INFO */ + (NDR64_UINT32) 1 /* 0x1 */, + &__midl_frag7 + } +}; + +/*static*/ const __midl_frag4_t __midl_frag4 = +{ +/* *char */ + 0x20, /* FC64_RP */ + (NDR64_UINT8) 0 /* 0x0 */, + (NDR64_UINT16) 0 /* 0x0 */, + &__midl_frag5 +}; + +/*static*/ const __midl_frag3_t __midl_frag3 = +0x5 /* FC64_INT32 */; + +/*static*/ const __midl_frag2_t __midl_frag2 = +{ +/* RequestActivation */ + { + /* RequestActivation */ /* procedure RequestActivation */ + (NDR64_UINT32) 23986240 /* 0x16e0040 */, /* explicit handle */ /* IsIntrepreted, ServerMustSize, ClientMustSize, HasReturn, ServerCorrelation, ClientCorrelation, HasExtensions */ + (NDR64_UINT32) 48 /* 0x30 */ , /* Stack size */ + (NDR64_UINT32) 8 /* 0x8 */, + (NDR64_UINT32) 40 /* 0x28 */, + (NDR64_UINT16) 0 /* 0x0 */, + (NDR64_UINT16) 0 /* 0x0 */, + (NDR64_UINT16) 5 /* 0x5 */, + (NDR64_UINT16) 8 /* 0x8 */ + }, + { + /* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */ + { + /* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */ + 0x72, /* FC64_BIND_PRIMITIVE */ + (NDR64_UINT8) 0 /* 0x0 */, + 0 /* 0x0 */, /* Stack offset */ + (NDR64_UINT8) 0 /* 0x0 */, + (NDR64_UINT8) 0 /* 0x0 */ + }, + (NDR64_UINT16) 0 /* 0x0 */ /* Notify index */ + }, + { + /* requestSize */ /* parameter requestSize */ + &__midl_frag3, + { + /* requestSize */ + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + (NDR64_UINT16) 0 /* 0x0 */, + 0 + }, /* [in], Basetype, ByValue */ + (NDR64_UINT16) 0 /* 0x0 */, + 8 /* 0x8 */, /* Stack offset */ + }, + { + /* request */ /* parameter request */ + &__midl_frag5, + { + /* request */ + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + (NDR64_UINT16) 0 /* 0x0 */, + 0 + }, /* MustSize, MustFree, [in], SimpleRef */ + (NDR64_UINT16) 0 /* 0x0 */, + 16 /* 0x10 */, /* Stack offset */ + }, + { + /* responseSize */ /* parameter responseSize */ + &__midl_frag3, + { + /* responseSize */ + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + (NDR64_UINT16) 0 /* 0x0 */, + 1 + }, /* [out], Basetype, SimpleRef, UseCache */ + (NDR64_UINT16) 0 /* 0x0 */, + 24 /* 0x18 */, /* Stack offset */ + }, + { + /* response */ /* parameter response */ + &__midl_frag10, + { + /* response */ + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + (NDR64_UINT16) 0 /* 0x0 */, + 1 + }, /* MustSize, MustFree, [out], UseCache */ + (NDR64_UINT16) 0 /* 0x0 */, + 32 /* 0x20 */, /* Stack offset */ + }, + { + /* int */ /* parameter int */ + &__midl_frag3, + { + /* int */ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + (NDR64_UINT16) 0 /* 0x0 */, + 0 + }, /* [out], IsReturn, Basetype, ByValue */ + (NDR64_UINT16) 0 /* 0x0 */, + 40 /* 0x28 */, /* Stack offset */ + } +}; + +/*static*/ const __midl_frag1_t __midl_frag1 = +(NDR64_UINT32) 0 /* 0x0 */; + +#endif // !MULTI_CALL_BINARY + +#include "poppack.h" + + +static const FormatInfoRef KMSServer_Ndr64ProcTable[] = + { + &__midl_frag2 + }; + +//typedef void *__RPC_USER MIDL_user_allocate_t(SIZE_T) +typedef void *(__RPC_API *midl_allocate_t)(size_t); + +#if !MULTI_CALL_BINARY +/*static*/ const MIDL_STUB_DESC KMSServer_StubDesc = + { + (void *)& KMSServer___RpcClientInterface, + (midl_allocate_t)MIDL_user_allocate, + MIDL_user_free, + &KMSServer__MIDL_AutoBindHandle, + 0, + 0, + 0, + 0, + KMSServer__MIDL_TypeFormatString.Format, + 1, /* -error bounds_check flag */ + 0x60000, /* Ndr library version */ + 0, + 0x800025b, /* MIDL Version 8.0.603 */ + 0, + 0, + 0, /* notify & notify_flag routine table */ + 0x2000001, /* MIDL flag */ + 0, /* cs routines */ + (void *)& KMSServer_ProxyInfo, /* proxy/server info */ + 0 + }; +#endif // !MULTI_CALL_BINARY + +static const MIDL_SYNTAX_INFO KMSServer_SyntaxInfo [ 2 ] = + { + { + {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}, + 0, + KMSServer__MIDL_ProcFormatString.Format, + KMSServer_FormatStringOffsetTable, + KMSServer__MIDL_TypeFormatString.Format, + 0, + 0, + 0 + } + ,{ + {{0x71710533,0xbeba,0x4937,{0x83,0x19,0xb5,0xdb,0xef,0x9c,0xcc,0x36}},{1,0}}, + 0, + 0 , + (unsigned short *) KMSServer_Ndr64ProcTable, + 0, + 0, + 0, + 0 + } + }; + +/*static*/ const MIDL_STUBLESS_PROXY_INFO KMSServer_ProxyInfo = + { + &KMSServer_StubDesc, + KMSServer__MIDL_ProcFormatString.Format, + KMSServer_FormatStringOffsetTable, + (RPC_SYNTAX_IDENTIFIER*)&_RpcTransferSyntax, + 2, + (MIDL_SYNTAX_INFO*)KMSServer_SyntaxInfo + + }; + +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + + +#endif /* defined(_M_AMD64)*/ + diff --git a/KMSServer_h.h b/KMSServer_h.h new file mode 100644 index 0000000..946619d --- /dev/null +++ b/KMSServer_h.h @@ -0,0 +1,80 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + +/* Modified by Hotbird64 for use with MingW and gcc */ + + + /* File created by MIDL compiler version 8.00.0595 */ +/* at Thu Oct 18 15:24:14 2012 + */ +/* Compiler settings for KMSServer.idl: + Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.00.0595 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 475 +#endif + +//#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif // __RPCNDR_H_VERSION__ + + +#ifndef __KMSServer_h_h__ +#define __KMSServer_h_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifdef __cplusplus +extern "C"{ +#endif + + +#ifndef __KMSServer_INTERFACE_DEFINED__ +#define __KMSServer_INTERFACE_DEFINED__ + +/* interface KMSServer */ +/* [version][uuid] */ + +int RequestActivation( + /* [in] */ handle_t IDL_handle, + /* [in] */ int requestSize, + /* [size_is][in] */ unsigned char *request, + /* [out] */ int *responseSize, + /* [size_is][size_is][out] */ unsigned char **response); + + + +extern RPC_IF_HANDLE KMSServer_v1_0_c_ifspec; +extern RPC_IF_HANDLE KMSServer_v1_0_s_ifspec; +#endif /* __KMSServer_INTERFACE_DEFINED__ */ + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/KMSServer_s2_mingw_gcc.c b/KMSServer_s2_mingw_gcc.c new file mode 100644 index 0000000..492c6ba --- /dev/null +++ b/KMSServer_s2_mingw_gcc.c @@ -0,0 +1,282 @@ + + +/* this ALWAYS GENERATED file contains the RPC server stubs */ + +/* WARNING! manually edited by Hotbird64 to work with MingW */ + + /* File created by MIDL compiler version 8.00.0595 */ +/* at Thu Oct 18 15:24:14 2012 + */ +/* Compiler settings for KMSServer.idl: + Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.00.0595 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#if !defined(_M_IA64) && !defined(_M_AMD64) && !defined(_ARM_) + + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif + +#pragma warning( disable: 4211 ) /* redefine extern to static */ +#pragma warning( disable: 4232 ) /* dllimport identity*/ +#pragma warning( disable: 4024 ) /* array to pointer mapping*/ +#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */ + +#pragma optimize("", off ) + +#include +#include "KMSServer_h.h" + +#define TYPE_FORMAT_STRING_SIZE 43 +#define PROC_FORMAT_STRING_SIZE 59 +#define EXPR_FORMAT_STRING_SIZE 1 +#define TRANSMIT_AS_TABLE_SIZE 0 +#define WIRE_MARSHAL_TABLE_SIZE 0 + +typedef struct _KMSServer_MIDL_TYPE_FORMAT_STRING + { + short Pad; + unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; + } KMSServer_MIDL_TYPE_FORMAT_STRING; + +typedef struct _KMSServer_MIDL_PROC_FORMAT_STRING + { + short Pad; + unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; + } KMSServer_MIDL_PROC_FORMAT_STRING; + +typedef struct _KMSServer_MIDL_EXPR_FORMAT_STRING + { + long Pad; + unsigned char Format[ EXPR_FORMAT_STRING_SIZE ]; + } KMSServer_MIDL_EXPR_FORMAT_STRING; + + +static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax = +{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}; + +extern const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString; +extern const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString; +extern const KMSServer_MIDL_EXPR_FORMAT_STRING KMSServer__MIDL_ExprFormatString; + +/* Standard interface: KMSServer, ver. 1.0, + GUID={0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}} */ + + +extern const MIDL_SERVER_INFO KMSServer_ServerInfo; + +extern const RPC_DISPATCH_TABLE KMSServer_v1_0_DispatchTable; + + int ProcessActivationRequest( + /* [in] */ handle_t IDL_handle, + /* [in] */ int requestSize, + /* [size_is][in] */ unsigned char *request, + /* [out] */ int *responseSize, + /* [size_is][size_is][out] */ unsigned char **response); + + static const RPC_SERVER_INTERFACE KMSServer___RpcServerInterface = + { + sizeof(RPC_SERVER_INTERFACE), + {{0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}},{1,0}}, + {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}, + (RPC_DISPATCH_TABLE*)&KMSServer_v1_0_DispatchTable, + 0, + 0, + 0, + &KMSServer_ServerInfo, + 0x04000000 + }; +RPC_IF_HANDLE KMSServer_v1_0_s_ifspec = (RPC_IF_HANDLE)& KMSServer___RpcServerInterface; + +extern const MIDL_STUB_DESC KMSServer_StubDesc; + + +#if !defined(__RPC_WIN32__) +#error Invalid build platform for this stub. +#endif + +#if !(TARGET_IS_NT50_OR_LATER) +#error You need Windows 2000 or later to run this stub because it uses these features: +#error /robust command line switch. +#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems. +#error This app will fail with the RPC_X_WRONG_STUB_VERSION error. +#endif + +const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString = + { + 0, + { + + /* Procedure RequestActivation */ + + 0x0, /* 0 */ + 0x48, /* Old Flags: */ +/* 2 */ NdrFcLong( 0x0 ), /* 0 */ +/* 6 */ NdrFcShort( 0x0 ), /* 0 */ +/* 8 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 10 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x0, /* 0 */ +/* 12 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 14 */ NdrFcShort( 0x8 ), /* 8 */ +/* 16 */ NdrFcShort( 0x24 ), /* 36 */ +/* 18 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ + 0x5, /* 5 */ +/* 20 */ 0x8, /* 8 */ + 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */ +/* 22 */ NdrFcShort( 0x1 ), /* 1 */ +/* 24 */ NdrFcShort( 0x1 ), /* 1 */ +/* 26 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter IDL_handle */ + +/* 28 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 30 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 32 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter requestSize */ + +/* 34 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 36 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 38 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Parameter request */ + +/* 40 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 42 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 44 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter responseSize */ + +/* 46 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 48 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 50 */ NdrFcShort( 0x16 ), /* Type Offset=22 */ + + /* Parameter response */ + +/* 52 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 54 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 56 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + 0x0 + } + }; + +const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString = + { + 0, + { + NdrFcShort( 0x0 ), /* 0 */ +/* 2 */ + 0x11, 0x0, /* FC_RP */ +/* 4 */ NdrFcShort( 0x2 ), /* Offset= 2 (6) */ +/* 6 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 8 */ NdrFcShort( 0x1 ), /* 1 */ +/* 10 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x0, /* */ +/* 12 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 14 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 16 */ 0x2, /* FC_CHAR */ + 0x5b, /* FC_END */ +/* 18 */ + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 20 */ 0x8, /* FC_LONG */ + 0x5c, /* FC_PAD */ +/* 22 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 24 */ NdrFcShort( 0x2 ), /* Offset= 2 (26) */ +/* 26 */ + 0x12, 0x0, /* FC_UP */ +/* 28 */ NdrFcShort( 0x2 ), /* Offset= 2 (30) */ +/* 30 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 32 */ NdrFcShort( 0x1 ), /* 1 */ +/* 34 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 36 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 38 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 40 */ 0x2, /* FC_CHAR */ + 0x5b, /* FC_END */ + + 0x0 + } + }; + +static const unsigned short KMSServer_FormatStringOffsetTable[] = + { + 0 + }; + +typedef void *(__RPC_API *midl_allocate_t)(size_t); + +const MIDL_STUB_DESC KMSServer_StubDesc = + { + (void *)& KMSServer___RpcServerInterface, + (midl_allocate_t)MIDL_user_allocate, + MIDL_user_free, + 0, + 0, + 0, + 0, + 0, + KMSServer__MIDL_TypeFormatString.Format, + 1, /* -error bounds_check flag */ + 0x50002, /* Ndr library version */ + 0, + 0x8000253, /* MIDL Version 8.0.595 */ + 0, + 0, + 0, /* notify & notify_flag routine table */ + 0x1, /* MIDL flag */ + 0, /* cs routines */ + 0, /* proxy/server info */ + 0 + }; + +static const RPC_DISPATCH_FUNCTION KMSServer_table[] = + { + NdrServerCall2, + 0 + }; +const RPC_DISPATCH_TABLE KMSServer_v1_0_DispatchTable = + { + 1, + (RPC_DISPATCH_FUNCTION*)KMSServer_table + }; + +static const SERVER_ROUTINE KMSServer_ServerRoutineTable[] = + { + (SERVER_ROUTINE)ProcessActivationRequest + }; + +const MIDL_SERVER_INFO KMSServer_ServerInfo = + { + &KMSServer_StubDesc, + KMSServer_ServerRoutineTable, + KMSServer__MIDL_ProcFormatString.Format, + KMSServer_FormatStringOffsetTable, + 0, + 0, + 0, + 0}; +#pragma optimize("", on ) +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + + +#endif /* !defined(_M_IA64) && !defined(_M_AMD64) && !defined(_ARM_) */ + diff --git a/KMSServer_s2_x64_mingw_gcc.c b/KMSServer_s2_x64_mingw_gcc.c new file mode 100644 index 0000000..9cf4bae --- /dev/null +++ b/KMSServer_s2_x64_mingw_gcc.c @@ -0,0 +1,730 @@ + + +/* this ALWAYS GENERATED file contains the RPC server stubs */ + + + /* File created by MIDL compiler version 8.00.0603 */ +/* at Fri Feb 20 04:17:07 2015 + * Modified by Hotbird64 to work with gcc and MingW-w64 + */ +/* Compiler settings for KMSServer.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.00.0603 + protocol : all , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#if defined(_M_AMD64) + +int ProcessActivationRequest( + /* [in] */ handle_t IDL_handle, + /* [in] */ int requestSize, + /* [size_is][in] */ unsigned char *request, + /* [out] */ int *responseSize, + /* [size_is][size_is][out] */ unsigned char **response); + + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif + +#pragma warning( disable: 4211 ) /* redefine extern to static */ +#pragma warning( disable: 4232 ) /* dllimport identity*/ +#pragma warning( disable: 4024 ) /* array to pointer mapping*/ + +#include +#include "KMSServer_h.h" + +#define TYPE_FORMAT_STRING_SIZE 43 +#define PROC_FORMAT_STRING_SIZE 61 +#define EXPR_FORMAT_STRING_SIZE 1 +#define TRANSMIT_AS_TABLE_SIZE 0 +#define WIRE_MARSHAL_TABLE_SIZE 0 + +typedef struct _KMSServer_MIDL_TYPE_FORMAT_STRING + { + short Pad; + unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; + } KMSServer_MIDL_TYPE_FORMAT_STRING; + +typedef struct _KMSServer_MIDL_PROC_FORMAT_STRING + { + short Pad; + unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; + } KMSServer_MIDL_PROC_FORMAT_STRING; + +typedef struct _KMSServer_MIDL_EXPR_FORMAT_STRING + { + long Pad; + unsigned char Format[ EXPR_FORMAT_STRING_SIZE ]; + } KMSServer_MIDL_EXPR_FORMAT_STRING; + + +static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax = +{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}; + +static const RPC_SYNTAX_IDENTIFIER _NDR64_RpcTransferSyntax = +{{0x71710533,0xbeba,0x4937,{0x83,0x19,0xb5,0xdb,0xef,0x9c,0xcc,0x36}},{1,0}}; + + +extern const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString; +extern const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString; +extern const KMSServer_MIDL_EXPR_FORMAT_STRING KMSServer__MIDL_ExprFormatString; + +/* Standard interface: KMSServer, ver. 1.0, + GUID={0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}} */ + + +extern const MIDL_SERVER_INFO KMSServer_ServerInfo; + +extern const RPC_DISPATCH_TABLE KMSServer_v1_0_DispatchTable; + +static const RPC_SERVER_INTERFACE KMSServer___RpcServerInterface = + { + sizeof(RPC_SERVER_INTERFACE), + {{0x51C82175,0x844E,0x4750,{0xB0,0xD8,0xEC,0x25,0x55,0x55,0xBC,0x06}},{1,0}}, + {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}, + (RPC_DISPATCH_TABLE*)&KMSServer_v1_0_DispatchTable, + 0, + 0, + 0, + &KMSServer_ServerInfo, + 0x06000000 + }; +RPC_IF_HANDLE KMSServer_v1_0_s_ifspec = (RPC_IF_HANDLE)& KMSServer___RpcServerInterface; + +extern const MIDL_STUB_DESC KMSServer_StubDesc; + + +#if !defined(__RPC_WIN64__) +#error Invalid build platform for this stub. +#endif + +/*static*/ const KMSServer_MIDL_PROC_FORMAT_STRING KMSServer__MIDL_ProcFormatString = + { + 0, + { + + /* Procedure RequestActivation */ + + 0x0, /* 0 */ + 0x48, /* Old Flags: */ +/* 2 */ NdrFcLong( 0x0 ), /* 0 */ +/* 6 */ NdrFcShort( 0x0 ), /* 0 */ +/* 8 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 10 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x0, /* 0 */ +/* 12 */ NdrFcShort( 0x0 ), /* X64 Stack size/offset = 0 */ +/* 14 */ NdrFcShort( 0x8 ), /* 8 */ +/* 16 */ NdrFcShort( 0x24 ), /* 36 */ +/* 18 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ + 0x5, /* 5 */ +/* 20 */ 0xa, /* 10 */ + 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */ +/* 22 */ NdrFcShort( 0x1 ), /* 1 */ +/* 24 */ NdrFcShort( 0x1 ), /* 1 */ +/* 26 */ NdrFcShort( 0x0 ), /* 0 */ +/* 28 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter IDL_handle */ + +/* 30 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 32 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 34 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter requestSize */ + +/* 36 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 38 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 40 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Parameter request */ + +/* 42 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 44 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 46 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter responseSize */ + +/* 48 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 50 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 52 */ NdrFcShort( 0x16 ), /* Type Offset=22 */ + + /* Parameter response */ + +/* 54 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 56 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 58 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + 0x0 + } + }; + +/*static*/ const KMSServer_MIDL_TYPE_FORMAT_STRING KMSServer__MIDL_TypeFormatString = + { + 0, + { + NdrFcShort( 0x0 ), /* 0 */ +/* 2 */ + 0x11, 0x0, /* FC_RP */ +/* 4 */ NdrFcShort( 0x2 ), /* Offset= 2 (6) */ +/* 6 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 8 */ NdrFcShort( 0x1 ), /* 1 */ +/* 10 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x0, /* */ +/* 12 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 14 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 16 */ 0x2, /* FC_CHAR */ + 0x5b, /* FC_END */ +/* 18 */ + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 20 */ 0x8, /* FC_LONG */ + 0x5c, /* FC_PAD */ +/* 22 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 24 */ NdrFcShort( 0x2 ), /* Offset= 2 (26) */ +/* 26 */ + 0x12, 0x0, /* FC_UP */ +/* 28 */ NdrFcShort( 0x2 ), /* Offset= 2 (30) */ +/* 30 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 32 */ NdrFcShort( 0x1 ), /* 1 */ +/* 34 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 36 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 38 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 40 */ 0x2, /* FC_CHAR */ + 0x5b, /* FC_END */ + + 0x0 + } + }; + +static const unsigned short KMSServer_FormatStringOffsetTable[] = + { + 0 + }; + + +static const RPC_DISPATCH_FUNCTION KMSServer_table[] = + { + NdrServerCall2, + 0 + }; +/*static*/ const RPC_DISPATCH_TABLE KMSServer_v1_0_DispatchTable = + { + 1, + (RPC_DISPATCH_FUNCTION*)KMSServer_table + }; + + +#endif /* defined(_M_AMD64)*/ + + + +/* this ALWAYS GENERATED file contains the RPC server stubs */ + + + /* File created by MIDL compiler version 8.00.0603 */ +/* at Fri Feb 20 04:17:07 2015 + */ +/* Compiler settings for KMSServer.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.00.0603 + protocol : all , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#if defined(_M_AMD64) + + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +#if !defined(__RPC_WIN64__) +#error Invalid build platform for this stub. +#endif + + +#include "ndr64types.h" +#include "pshpack8.h" + + +typedef +struct +{ + NDR64_FORMAT_UINT32 frag1; + struct _NDR64_EXPR_OPERATOR frag2; + struct _NDR64_EXPR_VAR frag3; +} +__midl_frag13_t; +extern const __midl_frag13_t __midl_frag13; + +typedef +struct +{ + struct _NDR64_CONF_ARRAY_HEADER_FORMAT frag1; + struct _NDR64_ARRAY_ELEMENT_INFO frag2; +} +__midl_frag12_t; +extern const __midl_frag12_t __midl_frag12; + +typedef +struct _NDR64_POINTER_FORMAT +__midl_frag11_t; +extern const __midl_frag11_t __midl_frag11; + +typedef +struct _NDR64_POINTER_FORMAT +__midl_frag10_t; +extern const __midl_frag10_t __midl_frag10; + +typedef +struct _NDR64_POINTER_FORMAT +__midl_frag8_t; +extern const __midl_frag8_t __midl_frag8; + +typedef +NDR64_FORMAT_CHAR +__midl_frag7_t; +extern const __midl_frag7_t __midl_frag7; + +typedef +struct +{ + NDR64_FORMAT_UINT32 frag1; + struct _NDR64_EXPR_VAR frag2; +} +__midl_frag6_t; +extern const __midl_frag6_t __midl_frag6; + +typedef +struct +{ + struct _NDR64_CONF_ARRAY_HEADER_FORMAT frag1; + struct _NDR64_ARRAY_ELEMENT_INFO frag2; +} +__midl_frag5_t; +extern const __midl_frag5_t __midl_frag5; + +typedef +struct _NDR64_POINTER_FORMAT +__midl_frag4_t; +extern const __midl_frag4_t __midl_frag4; + +typedef +NDR64_FORMAT_CHAR +__midl_frag3_t; +extern const __midl_frag3_t __midl_frag3; + +typedef +struct +{ + struct _NDR64_PROC_FORMAT frag1; + struct _NDR64_BIND_AND_NOTIFY_EXTENSION frag2; + struct _NDR64_PARAM_FORMAT frag3; + struct _NDR64_PARAM_FORMAT frag4; + struct _NDR64_PARAM_FORMAT frag5; + struct _NDR64_PARAM_FORMAT frag6; + struct _NDR64_PARAM_FORMAT frag7; +} +__midl_frag2_t; +extern const __midl_frag2_t __midl_frag2; + +typedef +NDR64_FORMAT_UINT32 +__midl_frag1_t; +extern const __midl_frag1_t __midl_frag1; + +/*static*/ const __midl_frag13_t __midl_frag13 = +{ +/* */ + (NDR64_UINT32) 1 /* 0x1 */, + { + /* struct _NDR64_EXPR_OPERATOR */ + 0x4, /* FC_EXPR_OPER */ + 0x5, /* OP_UNARY_INDIRECTION */ + 0x5, /* FC64_INT32 */ + (NDR64_UINT8) 0 /* 0x0 */ + }, + { + /* struct _NDR64_EXPR_VAR */ + 0x3, /* FC_EXPR_VAR */ + 0x7, /* FC64_INT64 */ + (NDR64_UINT16) 0 /* 0x0 */, + (NDR64_UINT32) 24 /* 0x18 */ /* Offset */ + } +}; + +/*static*/ const __midl_frag12_t __midl_frag12 = +{ +/* *char */ + { + /* *char */ + 0x41, /* FC64_CONF_ARRAY */ + (NDR64_UINT8) 0 /* 0x0 */, + { + /* *char */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + }, + (NDR64_UINT8) 0 /* 0x0 */, + (NDR64_UINT32) 1 /* 0x1 */, + &__midl_frag13 + }, + { + /* struct _NDR64_ARRAY_ELEMENT_INFO */ + (NDR64_UINT32) 1 /* 0x1 */, + &__midl_frag7 + } +}; + +/*static*/ const __midl_frag11_t __midl_frag11 = +{ +/* *char */ + 0x21, /* FC64_UP */ + (NDR64_UINT8) 0 /* 0x0 */, + (NDR64_UINT16) 0 /* 0x0 */, + &__midl_frag12 +}; + +/*static*/ const __midl_frag10_t __midl_frag10 = +{ +/* **char */ + 0x20, /* FC64_RP */ + (NDR64_UINT8) 20 /* 0x14 */, + (NDR64_UINT16) 0 /* 0x0 */, + &__midl_frag11 +}; + +/*static*/ const __midl_frag8_t __midl_frag8 = +{ +/* *int */ + 0x20, /* FC64_RP */ + (NDR64_UINT8) 12 /* 0xc */, + (NDR64_UINT16) 0 /* 0x0 */, + &__midl_frag3 +}; + +/*static*/ const __midl_frag7_t __midl_frag7 = +0x10 /* FC64_CHAR */; + +/*static*/ const __midl_frag6_t __midl_frag6 = +{ +/* */ + (NDR64_UINT32) 1 /* 0x1 */, + { + /* struct _NDR64_EXPR_VAR */ + 0x3, /* FC_EXPR_VAR */ + 0x5, /* FC64_INT32 */ + (NDR64_UINT16) 0 /* 0x0 */, + (NDR64_UINT32) 8 /* 0x8 */ /* Offset */ + } +}; + +/*static*/ const __midl_frag5_t __midl_frag5 = +{ +/* *char */ + { + /* *char */ + 0x41, /* FC64_CONF_ARRAY */ + (NDR64_UINT8) 0 /* 0x0 */, + { + /* *char */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + }, + (NDR64_UINT8) 0 /* 0x0 */, + (NDR64_UINT32) 1 /* 0x1 */, + &__midl_frag6 + }, + { + /* struct _NDR64_ARRAY_ELEMENT_INFO */ + (NDR64_UINT32) 1 /* 0x1 */, + &__midl_frag7 + } +}; + +/*static*/ const __midl_frag4_t __midl_frag4 = +{ +/* *char */ + 0x20, /* FC64_RP */ + (NDR64_UINT8) 0 /* 0x0 */, + (NDR64_UINT16) 0 /* 0x0 */, + &__midl_frag5 +}; + +/*static*/ const __midl_frag3_t __midl_frag3 = +0x5 /* FC64_INT32 */; + +/*static*/ const __midl_frag2_t __midl_frag2 = +{ +/* RequestActivation */ + { + /* RequestActivation */ /* procedure RequestActivation */ + (NDR64_UINT32) 23986240 /* 0x16e0040 */, /* explicit handle */ /* IsIntrepreted, ServerMustSize, ClientMustSize, HasReturn, ServerCorrelation, ClientCorrelation, HasExtensions */ + (NDR64_UINT32) 48 /* 0x30 */ , /* Stack size */ + (NDR64_UINT32) 8 /* 0x8 */, + (NDR64_UINT32) 40 /* 0x28 */, + (NDR64_UINT16) 0 /* 0x0 */, + (NDR64_UINT16) 0 /* 0x0 */, + (NDR64_UINT16) 5 /* 0x5 */, + (NDR64_UINT16) 8 /* 0x8 */ + }, + { + /* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */ + { + /* struct _NDR64_BIND_AND_NOTIFY_EXTENSION */ + 0x72, /* FC64_BIND_PRIMITIVE */ + (NDR64_UINT8) 0 /* 0x0 */, + 0 /* 0x0 */, /* Stack offset */ + (NDR64_UINT8) 0 /* 0x0 */, + (NDR64_UINT8) 0 /* 0x0 */ + }, + (NDR64_UINT16) 0 /* 0x0 */ /* Notify index */ + }, + { + /* requestSize */ /* parameter requestSize */ + &__midl_frag3, + { + /* requestSize */ + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + (NDR64_UINT16) 0 /* 0x0 */, + 0 + }, /* [in], Basetype, ByValue */ + (NDR64_UINT16) 0 /* 0x0 */, + 8 /* 0x8 */, /* Stack offset */ + }, + { + /* request */ /* parameter request */ + &__midl_frag5, + { + /* request */ + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + (NDR64_UINT16) 0 /* 0x0 */, + 0 + }, /* MustSize, MustFree, [in], SimpleRef */ + (NDR64_UINT16) 0 /* 0x0 */, + 16 /* 0x10 */, /* Stack offset */ + }, + { + /* responseSize */ /* parameter responseSize */ + &__midl_frag3, + { + /* responseSize */ + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + (NDR64_UINT16) 0 /* 0x0 */, + 1 + }, /* [out], Basetype, SimpleRef, UseCache */ + (NDR64_UINT16) 0 /* 0x0 */, + 24 /* 0x18 */, /* Stack offset */ + }, + { + /* response */ /* parameter response */ + &__midl_frag10, + { + /* response */ + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + (NDR64_UINT16) 0 /* 0x0 */, + 1 + }, /* MustSize, MustFree, [out], UseCache */ + (NDR64_UINT16) 0 /* 0x0 */, + 32 /* 0x20 */, /* Stack offset */ + }, + { + /* int */ /* parameter int */ + &__midl_frag3, + { + /* int */ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + (NDR64_UINT16) 0 /* 0x0 */, + 0 + }, /* [out], IsReturn, Basetype, ByValue */ + (NDR64_UINT16) 0 /* 0x0 */, + 40 /* 0x28 */, /* Stack offset */ + } +}; + +/*static*/ const __midl_frag1_t __midl_frag1 = +(NDR64_UINT32) 0 /* 0x0 */; + + +#include "poppack.h" + + +static const FormatInfoRef KMSServer_Ndr64ProcTable[] = + { + &__midl_frag2 + }; + +//typedef void *__RPC_USER MIDL_user_allocate_t(SIZE_T); +typedef void *(__RPC_API *midl_allocate_t)(size_t); + +/*static*/ const MIDL_STUB_DESC KMSServer_StubDesc = + { + (void *)& KMSServer___RpcServerInterface, + (midl_allocate_t)MIDL_user_allocate, + MIDL_user_free, + 0, + 0, + 0, + 0, + 0, + KMSServer__MIDL_TypeFormatString.Format, + 1, /* -error bounds_check flag */ + 0x60000, /* Ndr library version */ + 0, + 0x800025b, /* MIDL Version 8.0.603 */ + 0, + 0, + 0, /* notify & notify_flag routine table */ + 0x2000001, /* MIDL flag */ + 0, /* cs routines */ + (void *)& KMSServer_ServerInfo, /* proxy/server info */ + 0 + }; + +static const RPC_DISPATCH_FUNCTION KMSServer_NDR64__table[] = + { + NdrServerCallAll, + 0 + }; +static const RPC_DISPATCH_TABLE KMSServer_NDR64__v1_0_DispatchTable = + { + 1, + (RPC_DISPATCH_FUNCTION*)KMSServer_NDR64__table + }; + +static const MIDL_SYNTAX_INFO KMSServer_SyntaxInfo [ 2 ] = + { + { + {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}, + (RPC_DISPATCH_TABLE*)&KMSServer_v1_0_DispatchTable, + KMSServer__MIDL_ProcFormatString.Format, + KMSServer_FormatStringOffsetTable, + KMSServer__MIDL_TypeFormatString.Format, + 0, + 0, + 0 + } + ,{ + {{0x71710533,0xbeba,0x4937,{0x83,0x19,0xb5,0xdb,0xef,0x9c,0xcc,0x36}},{1,0}}, + (RPC_DISPATCH_TABLE*)&KMSServer_NDR64__v1_0_DispatchTable, + 0 , + (unsigned short *) KMSServer_Ndr64ProcTable, + 0, + 0, + 0, + 0 + } + }; + + +static const SERVER_ROUTINE KMSServer_ServerRoutineTable[] = + { + (SERVER_ROUTINE)ProcessActivationRequest + }; + +/*static*/ const MIDL_SERVER_INFO KMSServer_ServerInfo = + { + &KMSServer_StubDesc, + KMSServer_ServerRoutineTable, + KMSServer__MIDL_ProcFormatString.Format, + (unsigned short *) KMSServer_FormatStringOffsetTable, + 0, + (RPC_SYNTAX_IDENTIFIER*)&_NDR64_RpcTransferSyntax, + 2, + (MIDL_SYNTAX_INFO*)KMSServer_SyntaxInfo + }; +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + + +#endif /* defined(_M_AMD64)*/ + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..682542e --- /dev/null +++ b/Makefile @@ -0,0 +1,7 @@ +# Let BSD make switch to GNU make +all ${.TARGETS}: + @echo "================================================================" + @echo " PLEASE USE THE GNU VERSION OF MAKE (gmake) INSTEAD OF ${MAKE} " + @echo "================================================================" + @echo "" + @gmake $@ diff --git a/README b/README new file mode 100644 index 0000000..c1f64b2 --- /dev/null +++ b/README @@ -0,0 +1,13 @@ +To view the documentation cd to the directory containing the distribution +files and type + +man ./vlmcsd.8 + to see documentation for vlmcsd + +man ./vlmcs.1 + to see documentation for vlmcs + +man ./vlmcsd.7 + to see general documentation for kms + +If you don't have man, you may also use the .txt, .html and .pdf files diff --git a/README.compile-and-pre-built-binaries b/README.compile-and-pre-built-binaries new file mode 100644 index 0000000..1f658bd --- /dev/null +++ b/README.compile-and-pre-built-binaries @@ -0,0 +1,110 @@ +Compilation and pre-built binaries FAQ +====================================== + +What is the best pre-built binary for my system or device? +---------------------------------------------------------- + +None. The best binary is compiled by yourself using a toolchain that is +optimized for your system or device in every respect. + + +How do I compile my own binary? +------------------------------- + +On a full blown desktop system this is relativly easy. If not already done so, +install a C compiler (e.g. gcc or clang) through your packet manager, e.g. +"sudo apt-get install gcc" (Debian/Ubuntu) or "sudo yum install gcc" +(RedHat/Fedora). + +Then cd to your vlmcsd directory and type "make". vlmcs and vlmcsd will +be built right away for your local system. + +If you installed gcc and it is not the default compiler for your OS or +distribution, you may need to type "make CC=gcc" to explicitly select a +specific C compiller. + + +How do I compile a binary for my embedded device? +------------------------------------------------- + +What you need is cross-compiling toolchain for your device. It consists of a +C compiler, libraries, header files and some tools (called binutils). The +toolchain must match the device in processor architecture, endianess, ABI, +library and header files version, library configuration, ... + +If the endianess or ABI differs or the version of some library between +toolchain and device differs too much, the resulting binary does not run +on your device. + +Once you have a proper toolchain (probably found on the Internet for download), +unpack it to any directory and type + + "make CC=/path/to/toolchain/bindir/c-compiler-binary" + +Building vlmcsd for using a cross-compiling toolchain is as easy as building +vlmcsd for your local machine. The only question is, whether this you have +a toolchain that actually matches your device. + +Whenever you change any parameter of the make command line, you must "clean" +the source directory from intermediate files and output from previous runs +of make. You can do so by typeing "make clean" or force make to behave as if +the directory were clean by adding -B to the command line, e.g. + + "make -B CC=/path/to/toolchain/bindir/c-compiler-binary" + + +I have downloaded several promising toolchains for my device but they all +don't work. Can I create my own toolchain? +------------------------------------------------------------------------- + +You can use tools like buildroot or OpenWRT. Both are able to create toolchains +for many embedded devices. But this is out of the scope of this document. +If you are unable to walk through thousands of configuration options and make +the right choice, you may probably want to try the pre-built binaries. + + +How to choose a pre-built binary? +--------------------------------- + +The directory structure for the binaries is + +binaries ++ ++-- + + + +-- + + + +-- (omitted if CPU or OS does not allow multi-endianess) + + + +-- + + can also be "static". That means no special library is required. +Static binaries are much bigger and need more RAM than dynamic binaries but +are more likely to run on your system. Use a static binary only, if none of +the dynmic binaries run. + +Don't get confused when a binary is named after an OS or a specific device, +e.g. the name contains "openwrt", "tomato" or "Fritzbox". This does not mean +that the binary will run only on that OS or on that device. It is a hint only +where I got or built the toolchain from. + + +How to determine the endianess of my system? +-------------------------------------------- + +- All Intel CPUs (x86, x32, x64) are little-endian only +- Windows is little-endian only even if the CPU support big-endian +- big-endian ARM is extremely uncommon. You can safely assume little-endian +- little-endian PowerPC virtually does not exist since only newer POWER7 + and POWER8 CPUs support it. Always assume big-endian. +- For MIPS both little-endian and big-endian are common. Most Broadcomm and + TI chips run little-endian. Most Atheros and Ikanos CPUs run big-endian. + +Try typing + echo -n I | od -o | awk 'FNR==1{ print substr($2,6,1)}' + +This returns 1 for little-endian systems and 0 for big-endian systems. However +some devices do not have the od command and thus this method won't work. + + + diff --git a/README.openssl b/README.openssl new file mode 100644 index 0000000..2399824 --- /dev/null +++ b/README.openssl @@ -0,0 +1,55 @@ +IMPORTANT +========= + +1. Do not use any of the OpenSSL binaries +2. Do not compile OpenSSL binaries yourself + +(except for doing some research into the deep internals of OpenSSL) + +REASONS +======= + +All OpenSSL binaries included are highly experimental and are likely to fail +in many cases. To get some real benefit from OpenSSL (or PolarSSL) it should +handle all crypting/hashing. + +However this is not possible because Microsoft has slightly altered AES +encryption in KMSv6 and uses a non-AES variant of the Rijndael CMAC in +KMSv4. OpenSSL is not able to handle this if you use it correctly. + +This means OpenSSL can be used safely only for SHA256 and HMAC SHA256 +calculations used in KMSv5 and KMSv6 but the code size benefit is only +100 to 300 bytes (depending on the architecture). + +To benefit more from OpenSSL (getting it performing the AES stuff) I do +the first phase of AES encryption/decryption (called key expansion) with my +own code. I then poke the expanded key into internal OpenSSL structs to make +it behave in a way not intended by the OpenSSL developers but in a way to +perform non-standard AES crypting as required by KMSv4 and KMSv6. KMSv5 is +the only protocol that could use OpenSSL without hacking the OpenSSL internals. + +That means vlmcsd still needs about 40% of the internal AES code plus some +OpenSSL hacking code to poke the expanded key into OpenSSL. + +The entire OpenSSL hacking does not work in every case because the internal +OpenSSL structs differ depending on the OpenSSL version, OpenSSL configuration +at compile time (whether it is configured to use compiled C code or assembler +code), CPU architecture and CPU features (whether it can perform AES in +hardware). + +SUMMARY +======= + +If you use OpenSSL in a safe way (compile with CRYPTO=openssl), there is not +much benefit from it. The binary may become bigger or smaller and you +definitely need more RAM when you run vlmcsd or vlmcs. + +If you use hacked OpenSSL (compile with CRYPTO=openssl_with_aes or +CRYPTO=openssl_with_aes_soft) you risk malfunction of vlmcs/vlmcsd even if it +performed correctly several times before. + +Both vlmcs and vlmcsd do not have more features when compiled with OpenSSL +support. It may be faster (especially on CPUs with hardware assisted AES) but +uses more memory and may fail or perform unreliably. + + diff --git a/buildroot-configs/arm/little-endian/glibc/armv4-el-glibc2.20-gcc4.9.1-binutils2.24.config b/buildroot-configs/arm/little-endian/glibc/armv4-el-glibc2.20-gcc4.9.1-binutils2.24.config new file mode 100644 index 0000000..1767da2 --- /dev/null +++ b/buildroot-configs/arm/little-endian/glibc/armv4-el-glibc2.20-gcc4.9.1-binutils2.24.config @@ -0,0 +1,1458 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00245-gb7fcf3b Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="armv4t" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="arm920t" +BR2_GCC_TARGET_FLOAT_ABI="soft" +BR2_GCC_TARGET_MODE="arm" +BR2_ARCH_HAS_ATOMICS=y +BR2_ARM_CPU_HAS_THUMB=y +BR2_arm920t=y +# BR2_arm922t is not set +# BR2_arm926t is not set +# BR2_arm1136jf_s_r0 is not set +# BR2_arm1136jf_s_r1 is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +# BR2_cortex_a8 is not set +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +# BR2_arm1136jf_s is not set +BR2_ARM_EABI=y +BR2_ARM_SOFT_FLOAT=y +BR2_ARM_INSTRUCTIONS_ARM_CHOICE=y +# BR2_ARM_INSTRUCTIONS_THUMB is not set +BR2_ARM_INSTRUCTIONS_ARM=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y +# BR2_GOOGLE_BREAKPAD_ENABLE is not set +# BR2_ENABLE_SSP is not set +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc" +BR2_PACKAGE_GLIBC=y +# BR2_GLIBC_VERSION_2_19 is not set +BR2_GLIBC_VERSION_2_20=y +BR2_GLIBC_VERSION_STRING="2.20" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_TOOLCHAIN_HAS_NATIVE_RPC=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_SYSTEMD is not set +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set +# BR2_PACKAGE_VLC is not set +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +BR2_PACKAGE_XBMC_ARCH_SUPPORTS=y + +# +# xbmc requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_GOOGLE_BREAKPAD is not set +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set +# BR2_PACKAGE_LTP_TESTSUITE is not set +# BR2_PACKAGE_LTRACE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_LTTNG_TOOLS is not set +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_SUNXI_TOOLS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# +# BR2_PACKAGE_AVRDUDE is not set +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_PIFMRDS is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_RPI_USERLAND is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SUNXI_CEDARX is not set +# BR2_PACKAGE_SUNXI_MALI is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +BR2_PACKAGE_ZLIB=y + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +BR2_PACKAGE_OPENSSL=y +# BR2_PACKAGE_OPENSSL_BIN is not set +# BR2_PACKAGE_OPENSSL_ENGINES is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set +# BR2_PACKAGE_POSTGRESQL is not set +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBFSLCODEC is not set +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_ARMADILLO is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CLAPACK is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set +# BR2_PACKAGE_LIBCGROUP is not set +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUNWIND is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_LTTNG_LIBUST is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/arm/little-endian/glibc/armv4t-el-glibc2.20-gcc4.9.1-binutils2.24-thumb1.config b/buildroot-configs/arm/little-endian/glibc/armv4t-el-glibc2.20-gcc4.9.1-binutils2.24-thumb1.config new file mode 100644 index 0000000..c1e0a72 --- /dev/null +++ b/buildroot-configs/arm/little-endian/glibc/armv4t-el-glibc2.20-gcc4.9.1-binutils2.24-thumb1.config @@ -0,0 +1,1457 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00245-gb7fcf3b Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="armv4t" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="arm920t" +BR2_GCC_TARGET_FLOAT_ABI="soft" +BR2_GCC_TARGET_MODE="thumb" +BR2_ARCH_HAS_ATOMICS=y +BR2_ARM_CPU_HAS_THUMB=y +BR2_arm920t=y +# BR2_arm922t is not set +# BR2_arm926t is not set +# BR2_arm1136jf_s_r0 is not set +# BR2_arm1136jf_s_r1 is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +# BR2_cortex_a8 is not set +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +# BR2_arm1136jf_s is not set +BR2_ARM_EABI=y +BR2_ARM_SOFT_FLOAT=y +# BR2_ARM_INSTRUCTIONS_ARM_CHOICE is not set +BR2_ARM_INSTRUCTIONS_THUMB=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y +# BR2_GOOGLE_BREAKPAD_ENABLE is not set +# BR2_ENABLE_SSP is not set +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc" +BR2_PACKAGE_GLIBC=y +# BR2_GLIBC_VERSION_2_19 is not set +BR2_GLIBC_VERSION_2_20=y +BR2_GLIBC_VERSION_STRING="2.20" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_TOOLCHAIN_HAS_NATIVE_RPC=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_SYSTEMD is not set +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set +# BR2_PACKAGE_VLC is not set +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +BR2_PACKAGE_XBMC_ARCH_SUPPORTS=y + +# +# xbmc requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_GOOGLE_BREAKPAD is not set +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set +# BR2_PACKAGE_LTP_TESTSUITE is not set +# BR2_PACKAGE_LTRACE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_LTTNG_TOOLS is not set +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_SUNXI_TOOLS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# +# BR2_PACKAGE_AVRDUDE is not set +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_PIFMRDS is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_RPI_USERLAND is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SUNXI_CEDARX is not set +# BR2_PACKAGE_SUNXI_MALI is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +BR2_PACKAGE_ZLIB=y + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +BR2_PACKAGE_OPENSSL=y +# BR2_PACKAGE_OPENSSL_BIN is not set +# BR2_PACKAGE_OPENSSL_ENGINES is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set +# BR2_PACKAGE_POSTGRESQL is not set +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBFSLCODEC is not set +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_ARMADILLO is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CLAPACK is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set +# BR2_PACKAGE_LIBCGROUP is not set +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUNWIND is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_LTTNG_LIBUST is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/arm/little-endian/glibc/armv5-el-glibc2.20-gcc4.9.1-binutils2.24.config b/buildroot-configs/arm/little-endian/glibc/armv5-el-glibc2.20-gcc4.9.1-binutils2.24.config new file mode 100644 index 0000000..24ec5a8 --- /dev/null +++ b/buildroot-configs/arm/little-endian/glibc/armv5-el-glibc2.20-gcc4.9.1-binutils2.24.config @@ -0,0 +1,1485 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00245-gb7fcf3b Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="armv5te" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="arm926ej-s" +BR2_GCC_TARGET_FLOAT_ABI="soft" +BR2_GCC_TARGET_MODE="arm" +BR2_ARCH_HAS_ATOMICS=y +BR2_ARM_CPU_MAYBE_HAS_VFPV2=y +BR2_ARM_CPU_HAS_THUMB=y +# BR2_arm920t is not set +# BR2_arm922t is not set +BR2_arm926t=y +# BR2_arm1136jf_s_r0 is not set +# BR2_arm1136jf_s_r1 is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +# BR2_cortex_a8 is not set +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +# BR2_arm1136jf_s is not set +BR2_ARM_EABI=y +# BR2_ARM_EABIHF is not set +BR2_ARM_SOFT_FLOAT=y +# BR2_ARM_FPU_VFPV2 is not set +BR2_ARM_INSTRUCTIONS_ARM_CHOICE=y +# BR2_ARM_INSTRUCTIONS_THUMB is not set +BR2_ARM_INSTRUCTIONS_ARM=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y +# BR2_GOOGLE_BREAKPAD_ENABLE is not set +# BR2_ENABLE_SSP is not set +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc" +BR2_PACKAGE_GLIBC=y +# BR2_GLIBC_VERSION_2_19 is not set +BR2_GLIBC_VERSION_2_20=y +BR2_GLIBC_VERSION_STRING="2.20" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_TOOLCHAIN_HAS_NATIVE_RPC=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_SYSTEMD is not set +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set + +# +# on2-8170-libs needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set +# BR2_PACKAGE_VLC is not set +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +BR2_PACKAGE_XBMC_ARCH_SUPPORTS=y + +# +# xbmc requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_GOOGLE_BREAKPAD is not set +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set +# BR2_PACKAGE_LTP_TESTSUITE is not set +# BR2_PACKAGE_LTRACE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_LTTNG_TOOLS is not set +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_SUNXI_TOOLS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# +# BR2_PACKAGE_AVRDUDE is not set +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set + +# +# on2-8170-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_PIFMRDS is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_RPI_USERLAND is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SUNXI_CEDARX is not set +# BR2_PACKAGE_SUNXI_MALI is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_NODEJS is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +BR2_PACKAGE_ZLIB=y + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +BR2_PACKAGE_OPENSSL=y +# BR2_PACKAGE_OPENSSL_BIN is not set +# BR2_PACKAGE_OPENSSL_ENGINES is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set +# BR2_PACKAGE_POSTGRESQL is not set +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBFSLCODEC is not set +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_ARMADILLO is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CLAPACK is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set +# BR2_PACKAGE_LIBCGROUP is not set +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUNWIND is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_LTTNG_LIBUST is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_AT91BOOTSTRAP is not set +# BR2_TARGET_AT91BOOTSTRAP3 is not set +# BR2_TARGET_AT91DATAFLASHBOOT is not set +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_LPC32XXCDL is not set +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/arm/little-endian/glibc/armv5t-el-glibc2.20-gcc4.9.2-binutils2.25-thumb1.config b/buildroot-configs/arm/little-endian/glibc/armv5t-el-glibc2.20-gcc4.9.2-binutils2.25-thumb1.config new file mode 100644 index 0000000..8f6382a --- /dev/null +++ b/buildroot-configs/arm/little-endian/glibc/armv5t-el-glibc2.20-gcc4.9.2-binutils2.25-thumb1.config @@ -0,0 +1,1630 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2015.02-git-00870-g3ac6390 Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="arm926ej-s" +BR2_GCC_TARGET_FLOAT_ABI="soft" +BR2_GCC_TARGET_MODE="thumb" +BR2_ARCH_HAS_ATOMICS=y +BR2_BINFMT_SUPPORTS_SHARED=y +BR2_BINFMT_ELF=y +BR2_ARM_CPU_MAYBE_HAS_VFPV2=y +BR2_ARM_CPU_HAS_THUMB=y +BR2_ARM_CPU_ARMV5=y +# BR2_arm920t is not set +# BR2_arm922t is not set +BR2_arm926t=y +# BR2_arm1136jf_s is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +# BR2_cortex_a8 is not set +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +BR2_ARM_EABI=y +# BR2_ARM_EABIHF is not set +BR2_ARM_SOFT_FLOAT=y +# BR2_ARM_FPU_VFPV2 is not set +# BR2_ARM_INSTRUCTIONS_ARM_CHOICE is not set +BR2_ARM_INSTRUCTIONS_THUMB=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y +# BR2_GOOGLE_BREAKPAD_ENABLE is not set +# BR2_ENABLE_SSP is not set +# BR2_STATIC_LIBS is not set +BR2_SHARED_LIBS=y +# BR2_SHARED_STATIC_LIBS is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Advanced +# +# BR2_COMPILER_PARANOID_UNSAFE_PATH is not set + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +# BR2_KERNEL_HEADERS_3_17 is not set +BR2_KERNEL_HEADERS_3_18=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.18.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc" +BR2_PACKAGE_GLIBC=y +# BR2_GLIBC_VERSION_2_19 is not set +BR2_GLIBC_VERSION_2_20=y +BR2_GLIBC_VERSION_STRING="2.20" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +# BR2_BINUTILS_VERSION_2_24 is not set +BR2_BINUTILS_VERSION_2_25=y +BR2_BINUTILS_VERSION="2.25" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.2" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_TOOLCHAIN_HAS_NATIVE_RPC=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.18" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_SYSTEMD is not set +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_SYSTEM_BIN_SH_BUSYBOX=y + +# +# bash, dash, zsh need BR2_PACKAGE_BUSYBOX_SHOW_OTHERS +# +# BR2_SYSTEM_BIN_SH_NONE is not set +BR2_SYSTEM_BIN_SH="/bin/busybox" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_DVDAUTHOR is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +BR2_PACKAGE_KODI_ARCH_SUPPORTS=y + +# +# kodi requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MODPLUGTOOLS is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPD_MPC is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set + +# +# on2-8170-libs needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set +# BR2_PACKAGE_VLC is not set +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set +# BR2_PACKAGE_YMPD is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BLKTRACE is not set +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_GOOGLE_BREAKPAD is not set +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set +# BR2_PACKAGE_LTP_TESTSUITE is not set +# BR2_PACKAGE_LTRACE is not set +# BR2_PACKAGE_LTTNG_BABELTRACE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_LTTNG_TOOLS is not set +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_SPIDEV_TEST is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_TRINITY is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CPPUNIT is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_SUNXI_TOOLS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set + +# +# glmark2 needs an OpenGL or an openGL ES and EGL backend provided by mesa3d +# + +# +# glmark2 needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, dynamic library, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# +# BR2_PACKAGE_AM335X_PRU_PACKAGE is not set +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set + +# +# on2-8170-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_PIFMRDS is not set +# BR2_PACKAGE_PPS_TOOLS is not set +# BR2_PACKAGE_READ_EDID is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_RPI_USERLAND is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SUNXI_CEDARX is not set +# BR2_PACKAGE_SUNXI_MALI is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on Python +# + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_TRIGGERHAPPY is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# + +# +# usbutils needs udev /dev management and toolchain w/ threads +# +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set +# BR2_PACKAGE_XORRISO is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_GUILE is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +BR2_PACKAGE_MONO_ARCH_SUPPORTS=y +# BR2_PACKAGE_MONO is not set +# BR2_PACKAGE_NODEJS is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_MP4V2 is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TINYALSA is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_SZIP is not set +BR2_PACKAGE_ZLIB=y + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +BR2_PACKAGE_BOTAN_ARCH_SUPPORTS=y +# BR2_PACKAGE_BOTAN is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +BR2_PACKAGE_OPENSSL=y +# BR2_PACKAGE_OPENSSL_BIN is not set +# BR2_PACKAGE_OPENSSL_ENGINES is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set +# BR2_PACKAGE_POSTGRESQL is not set +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_EXIV2 is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_HICOLOR_ICON_THEME is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBGTK3 is not set +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set +# BR2_PACKAGE_LIBIIO is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPCIACCESS is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_BOOTSTRAP is not set +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set +# BR2_PACKAGE_YAML_CPP is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBCSA is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBFSLCODEC is not set +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set +# BR2_PACKAGE_X264 is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +BR2_PACKAGE_CANFESTIVAL_ARCH_SUPPORTS=y +# BR2_PACKAGE_CANFESTIVAL is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNICE is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSHOUT is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSRTP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBUPNPP is not set +# BR2_PACKAGE_LIBURIPARSER is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCK is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_SOFIA_SIP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_ARMADILLO is not set +BR2_PACKAGE_BDWGC_ARCH_SUPPORTS=y +# BR2_PACKAGE_BDWGC is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CLAPACK is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_DING_LIBS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GLM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBBSD is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set +# BR2_PACKAGE_LIBCGROUP is not set +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +# BR2_PACKAGE_LIBLINEAR is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUNWIND is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LIGHTNING is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_LTTNG_LIBUST is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_QLIBC is not set + +# +# Security +# +# BR2_PACKAGE_LIBSELINUX is not set +# BR2_PACKAGE_LIBSEMANAGE is not set +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBCLI is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBUNISTRING is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set +# BR2_PACKAGE_USTR is not set + +# +# Mail +# +# BR2_PACKAGE_DOVECOT is not set +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_CLAMAV is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPERF3 is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_JANUS_GATEWAY is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LEAFNODE2 is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGINX is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_PURE_FTPD is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SHAIRPORT_SYNC is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINC is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VNSTAT is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set + +# +# xtables-addons needs a Linux kernel to be built +# +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_GETENT is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_IRQBALANCE is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_AT91BOOTSTRAP is not set +# BR2_TARGET_AT91BOOTSTRAP3 is not set +# BR2_TARGET_AT91DATAFLASHBOOT is not set +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_LPC32XXCDL is not set +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_CHECKPOLICY is not set +# BR2_PACKAGE_HOST_CRAMFS is not set +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MKE2IMG is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_QEMU is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2015.02 +# +# BR2_PACKAGE_STRONGSWAN_TOOLS is not set +# BR2_PACKAGE_XBMC_ADDON_XVDR is not set +# BR2_PACKAGE_XBMC_PVR_ADDONS is not set +# BR2_PACKAGE_XBMC is not set +# BR2_PACKAGE_XBMC_ALSA_LIB is not set +# BR2_PACKAGE_XBMC_AVAHI is not set +# BR2_PACKAGE_XBMC_DBUS is not set +# BR2_PACKAGE_XBMC_LIBBLURAY is not set +# BR2_PACKAGE_XBMC_GOOM is not set +# BR2_PACKAGE_XBMC_RSXS is not set +# BR2_PACKAGE_XBMC_LIBCEC is not set +# BR2_PACKAGE_XBMC_LIBMICROHTTPD is not set +# BR2_PACKAGE_XBMC_LIBNFS is not set +# BR2_PACKAGE_XBMC_RTMPDUMP is not set +# BR2_PACKAGE_XBMC_LIBSHAIRPLAY is not set +# BR2_PACKAGE_XBMC_LIBSMBCLIENT is not set +# BR2_PACKAGE_XBMC_LIBTHEORA is not set +# BR2_PACKAGE_XBMC_LIBUSB is not set +# BR2_PACKAGE_XBMC_LIBVA is not set +# BR2_PACKAGE_XBMC_WAVPACK is not set +# BR2_PREFER_STATIC_LIB is not set + +# +# Legacy options removed in 2014.11 +# +# BR2_x86_generic is not set +# BR2_GCC_VERSION_4_4_X is not set +# BR2_sparc_sparchfleon is not set +# BR2_sparc_sparchfleonv8 is not set +# BR2_sparc_sparcsfleon is not set +# BR2_sparc_sparcsfleonv8 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/arm/little-endian/glibc/armv6-el-hf-glibc2.20-gcc4.9.1-binutils2.24.config b/buildroot-configs/arm/little-endian/glibc/armv6-el-hf-glibc2.20-gcc4.9.1-binutils2.24.config new file mode 100644 index 0000000..90a9a78 --- /dev/null +++ b/buildroot-configs/arm/little-endian/glibc/armv6-el-hf-glibc2.20-gcc4.9.1-binutils2.24.config @@ -0,0 +1,1474 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00245-gb7fcf3b Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="armv6zk" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="arm1176jzf-s" +BR2_GCC_TARGET_FPU="vfp" +BR2_GCC_TARGET_FLOAT_ABI="hard" +BR2_GCC_TARGET_MODE="arm" +BR2_ARCH_HAS_ATOMICS=y +BR2_ARM_CPU_HAS_VFPV2=y +BR2_ARM_CPU_HAS_THUMB=y +# BR2_arm920t is not set +# BR2_arm922t is not set +# BR2_arm926t is not set +# BR2_arm1136jf_s_r0 is not set +# BR2_arm1136jf_s_r1 is not set +# BR2_arm1176jz_s is not set +BR2_arm1176jzf_s=y +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +# BR2_cortex_a8 is not set +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +# BR2_arm1136jf_s is not set +# BR2_ARM_EABI is not set +BR2_ARM_EABIHF=y +BR2_ARM_FPU_VFPV2=y +BR2_ARM_INSTRUCTIONS_ARM_CHOICE=y +# BR2_ARM_INSTRUCTIONS_THUMB is not set +BR2_ARM_INSTRUCTIONS_ARM=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y +# BR2_GOOGLE_BREAKPAD_ENABLE is not set +# BR2_ENABLE_SSP is not set +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc" +BR2_PACKAGE_GLIBC=y +# BR2_GLIBC_VERSION_2_19 is not set +BR2_GLIBC_VERSION_2_20=y +BR2_GLIBC_VERSION_STRING="2.20" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_TOOLCHAIN_HAS_NATIVE_RPC=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_SYSTEMD is not set +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set +# BR2_PACKAGE_VLC is not set +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +BR2_PACKAGE_XBMC_ARCH_SUPPORTS=y + +# +# xbmc requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_GOOGLE_BREAKPAD is not set +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set +# BR2_PACKAGE_LTP_TESTSUITE is not set +# BR2_PACKAGE_LTRACE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_LTTNG_TOOLS is not set +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_SUNXI_TOOLS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# +# BR2_PACKAGE_AVRDUDE is not set +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# + +# +# owl-linux is only supported on ARM9 architecture +# +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_PIFMRDS is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_RPI_USERLAND is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SUNXI_CEDARX is not set +# BR2_PACKAGE_SUNXI_MALI is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_NODEJS is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +BR2_PACKAGE_ZLIB=y + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +BR2_PACKAGE_OPENSSL=y +# BR2_PACKAGE_OPENSSL_BIN is not set +# BR2_PACKAGE_OPENSSL_ENGINES is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set +# BR2_PACKAGE_POSTGRESQL is not set +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBFSLCODEC is not set +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_ARMADILLO is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CLAPACK is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set +# BR2_PACKAGE_LIBCGROUP is not set +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUNWIND is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_LTTNG_LIBUST is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/arm/little-endian/glibc/armv7-el-glibc2.20-gcc4.9.1-binutils2.24-thumb2.config b/buildroot-configs/arm/little-endian/glibc/armv7-el-glibc2.20-gcc4.9.1-binutils2.24-thumb2.config new file mode 100644 index 0000000..481430e --- /dev/null +++ b/buildroot-configs/arm/little-endian/glibc/armv7-el-glibc2.20-gcc4.9.1-binutils2.24-thumb2.config @@ -0,0 +1,1485 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00245-gb7fcf3b Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="armv7-a" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="cortex-a8" +BR2_GCC_TARGET_FLOAT_ABI="soft" +BR2_GCC_TARGET_MODE="thumb" +BR2_ARCH_HAS_ATOMICS=y +BR2_ARM_CPU_HAS_NEON=y +BR2_ARM_CPU_HAS_VFPV2=y +BR2_ARM_CPU_HAS_VFPV3=y +BR2_ARM_CPU_HAS_THUMB2=y +# BR2_arm920t is not set +# BR2_arm922t is not set +# BR2_arm926t is not set +# BR2_arm1136jf_s_r0 is not set +# BR2_arm1136jf_s_r1 is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +BR2_cortex_a8=y +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +# BR2_arm1136jf_s is not set +BR2_ARM_EABI=y +# BR2_ARM_EABIHF is not set +BR2_ARM_SOFT_FLOAT=y +# BR2_ARM_FPU_VFPV2 is not set +# BR2_ARM_FPU_VFPV3 is not set +# BR2_ARM_FPU_VFPV3D16 is not set +# BR2_ARM_FPU_NEON is not set +# BR2_ARM_INSTRUCTIONS_ARM_CHOICE is not set +BR2_ARM_INSTRUCTIONS_THUMB2=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y +# BR2_GOOGLE_BREAKPAD_ENABLE is not set +# BR2_ENABLE_SSP is not set +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc" +BR2_PACKAGE_GLIBC=y +# BR2_GLIBC_VERSION_2_19 is not set +BR2_GLIBC_VERSION_2_20=y +BR2_GLIBC_VERSION_STRING="2.20" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_TOOLCHAIN_HAS_NATIVE_RPC=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_SYSTEMD is not set +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TIDSP_BINARIES is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set +# BR2_PACKAGE_VLC is not set +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +BR2_PACKAGE_XBMC_ARCH_SUPPORTS=y + +# +# xbmc requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_GOOGLE_BREAKPAD is not set +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set +# BR2_PACKAGE_LTP_TESTSUITE is not set +# BR2_PACKAGE_LTRACE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_LTTNG_TOOLS is not set +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_SUNXI_TOOLS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# +# BR2_PACKAGE_AVRDUDE is not set +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# + +# +# owl-linux is only supported on ARM9 architecture +# +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_PIFMRDS is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_RPI_USERLAND is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SUNXI_CEDARX is not set +# BR2_PACKAGE_SUNXI_MALI is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_NODEJS is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +BR2_PACKAGE_ZLIB=y + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +BR2_PACKAGE_OPENSSL=y +# BR2_PACKAGE_OPENSSL_BIN is not set +# BR2_PACKAGE_OPENSSL_ENGINES is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set +# BR2_PACKAGE_POSTGRESQL is not set +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBFSLCODEC is not set +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_ARMADILLO is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CLAPACK is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set +# BR2_PACKAGE_LIBCGROUP is not set +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUNWIND is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_LTTNG_LIBUST is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_DSP_TOOLS is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set +# BR2_TARGET_XLOADER is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/arm/little-endian/musl/armv4-el-musl-gcc4.9.1-binutils2.24.config b/buildroot-configs/arm/little-endian/musl/armv4-el-musl-gcc4.9.1-binutils2.24.config new file mode 100644 index 0000000..65f44f6 --- /dev/null +++ b/buildroot-configs/arm/little-endian/musl/armv4-el-musl-gcc4.9.1-binutils2.24.config @@ -0,0 +1,1495 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="armv4t" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="arm920t" +BR2_GCC_TARGET_FLOAT_ABI="soft" +BR2_GCC_TARGET_MODE="arm" +BR2_ARCH_HAS_ATOMICS=y +BR2_ARM_CPU_HAS_THUMB=y +BR2_arm920t=y +# BR2_arm922t is not set +# BR2_arm926t is not set +# BR2_arm1136jf_s_r0 is not set +# BR2_arm1136jf_s_r1 is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +# BR2_cortex_a8 is not set +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +# BR2_arm1136jf_s is not set +BR2_ARM_EABI=y +BR2_ARM_SOFT_FLOAT=y +BR2_ARM_INSTRUCTIONS_ARM_CHOICE=y +# BR2_ARM_INSTRUCTIONS_THUMB is not set +BR2_ARM_INSTRUCTIONS_ARM=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_MUSL=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_LIBC="musl" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +BR2_PACKAGE_XBMC_ARCH_SUPPORTS=y + +# +# xbmc requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# +# BR2_PACKAGE_LTRACE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_LTTNG_TOOLS is not set +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_SUNXI_TOOLS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_PIFMRDS is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_RPI_USERLAND is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set + +# +# sunxi-cedarx needs an (e)glibc toolchain +# + +# +# sunxi-mali needs an (e)glibc toolchain +# +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set + +# +# libfslcodec needs an (e)glibc toolchain +# +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_ARMADILLO is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CLAPACK is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_LTTNG_LIBUST is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/arm/little-endian/musl/armv4t-el-musl-gcc4.9.1-binutils2.24-thumb1.config b/buildroot-configs/arm/little-endian/musl/armv4t-el-musl-gcc4.9.1-binutils2.24-thumb1.config new file mode 100644 index 0000000..ea7c73c --- /dev/null +++ b/buildroot-configs/arm/little-endian/musl/armv4t-el-musl-gcc4.9.1-binutils2.24-thumb1.config @@ -0,0 +1,1496 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="armv4t" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="arm920t" +BR2_GCC_TARGET_FLOAT_ABI="soft" +BR2_GCC_TARGET_MODE="thumb" +BR2_ARCH_HAS_ATOMICS=y +BR2_ARM_CPU_HAS_THUMB=y +BR2_arm920t=y +# BR2_arm922t is not set +# BR2_arm926t is not set +# BR2_arm1136jf_s_r0 is not set +# BR2_arm1136jf_s_r1 is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +# BR2_cortex_a8 is not set +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +# BR2_arm1136jf_s is not set +BR2_ARM_EABI=y +# BR2_ARM_EABIHF is not set +BR2_ARM_SOFT_FLOAT=y +# BR2_ARM_FPU_VFPV2 is not set +# BR2_ARM_INSTRUCTIONS_ARM_CHOICE is not set +BR2_ARM_INSTRUCTIONS_THUMB=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_MUSL=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_LIBC="musl" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +BR2_PACKAGE_XBMC_ARCH_SUPPORTS=y + +# +# xbmc requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# +# BR2_PACKAGE_LTRACE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_LTTNG_TOOLS is not set +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_SUNXI_TOOLS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_PIFMRDS is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_RPI_USERLAND is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set + +# +# sunxi-cedarx needs an (e)glibc toolchain +# + +# +# sunxi-mali needs an (e)glibc toolchain +# +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set + +# +# libfslcodec needs an (e)glibc toolchain +# +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_ARMADILLO is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CLAPACK is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_LTTNG_LIBUST is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/arm/little-endian/musl/armv5-el-musl-gcc4.9.1-binutils2.24.config b/buildroot-configs/arm/little-endian/musl/armv5-el-musl-gcc4.9.1-binutils2.24.config new file mode 100644 index 0000000..04e5574 --- /dev/null +++ b/buildroot-configs/arm/little-endian/musl/armv5-el-musl-gcc4.9.1-binutils2.24.config @@ -0,0 +1,1522 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="armv5te" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="arm926ej-s" +BR2_GCC_TARGET_FLOAT_ABI="soft" +BR2_GCC_TARGET_MODE="arm" +BR2_ARCH_HAS_ATOMICS=y +BR2_ARM_CPU_MAYBE_HAS_VFPV2=y +BR2_ARM_CPU_HAS_THUMB=y +# BR2_arm920t is not set +# BR2_arm922t is not set +BR2_arm926t=y +# BR2_arm1136jf_s_r0 is not set +# BR2_arm1136jf_s_r1 is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +# BR2_cortex_a8 is not set +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +# BR2_arm1136jf_s is not set +BR2_ARM_EABI=y +# BR2_ARM_EABIHF is not set +BR2_ARM_SOFT_FLOAT=y +# BR2_ARM_FPU_VFPV2 is not set +BR2_ARM_INSTRUCTIONS_ARM_CHOICE=y +# BR2_ARM_INSTRUCTIONS_THUMB is not set +BR2_ARM_INSTRUCTIONS_ARM=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_MUSL=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_LIBC="musl" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set + +# +# on2-8170-libs needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +BR2_PACKAGE_XBMC_ARCH_SUPPORTS=y + +# +# xbmc requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# +# BR2_PACKAGE_LTRACE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_LTTNG_TOOLS is not set +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_SUNXI_TOOLS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set + +# +# on2-8170-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_PIFMRDS is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_RPI_USERLAND is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set + +# +# sunxi-cedarx needs an (e)glibc toolchain +# + +# +# sunxi-mali needs an (e)glibc toolchain +# +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_NODEJS is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set + +# +# libfslcodec needs an (e)glibc toolchain +# +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_ARMADILLO is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CLAPACK is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_LTTNG_LIBUST is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_AT91BOOTSTRAP is not set +# BR2_TARGET_AT91BOOTSTRAP3 is not set +# BR2_TARGET_AT91DATAFLASHBOOT is not set +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_LPC32XXCDL is not set +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/arm/little-endian/musl/armv5t-el-musl-gcc4.9.1-binutils2.24-thumb1.config b/buildroot-configs/arm/little-endian/musl/armv5t-el-musl-gcc4.9.1-binutils2.24-thumb1.config new file mode 100644 index 0000000..193521c --- /dev/null +++ b/buildroot-configs/arm/little-endian/musl/armv5t-el-musl-gcc4.9.1-binutils2.24-thumb1.config @@ -0,0 +1,1521 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="armv5te" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="arm926ej-s" +BR2_GCC_TARGET_FLOAT_ABI="soft" +BR2_GCC_TARGET_MODE="thumb" +BR2_ARCH_HAS_ATOMICS=y +BR2_ARM_CPU_MAYBE_HAS_VFPV2=y +BR2_ARM_CPU_HAS_THUMB=y +# BR2_arm920t is not set +# BR2_arm922t is not set +BR2_arm926t=y +# BR2_arm1136jf_s_r0 is not set +# BR2_arm1136jf_s_r1 is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +# BR2_cortex_a8 is not set +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +# BR2_arm1136jf_s is not set +BR2_ARM_EABI=y +# BR2_ARM_EABIHF is not set +BR2_ARM_SOFT_FLOAT=y +# BR2_ARM_FPU_VFPV2 is not set +# BR2_ARM_INSTRUCTIONS_ARM_CHOICE is not set +BR2_ARM_INSTRUCTIONS_THUMB=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_MUSL=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_LIBC="musl" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set + +# +# on2-8170-libs needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +BR2_PACKAGE_XBMC_ARCH_SUPPORTS=y + +# +# xbmc requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# +# BR2_PACKAGE_LTRACE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_LTTNG_TOOLS is not set +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_SUNXI_TOOLS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set + +# +# on2-8170-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_PIFMRDS is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_RPI_USERLAND is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set + +# +# sunxi-cedarx needs an (e)glibc toolchain +# + +# +# sunxi-mali needs an (e)glibc toolchain +# +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_NODEJS is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set + +# +# libfslcodec needs an (e)glibc toolchain +# +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_ARMADILLO is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CLAPACK is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_LTTNG_LIBUST is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_AT91BOOTSTRAP is not set +# BR2_TARGET_AT91BOOTSTRAP3 is not set +# BR2_TARGET_AT91DATAFLASHBOOT is not set +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_LPC32XXCDL is not set +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/arm/little-endian/musl/armv7-el-musl-gcc4.9.1-binutils2.24-thumb2.config b/buildroot-configs/arm/little-endian/musl/armv7-el-musl-gcc4.9.1-binutils2.24-thumb2.config new file mode 100644 index 0000000..f66438f --- /dev/null +++ b/buildroot-configs/arm/little-endian/musl/armv7-el-musl-gcc4.9.1-binutils2.24-thumb2.config @@ -0,0 +1,1505 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00245-gb7fcf3b Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="armv7-a" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="cortex-a8" +BR2_GCC_TARGET_FLOAT_ABI="soft" +BR2_GCC_TARGET_MODE="thumb" +BR2_ARCH_HAS_ATOMICS=y +BR2_ARM_CPU_HAS_NEON=y +BR2_ARM_CPU_HAS_VFPV2=y +BR2_ARM_CPU_HAS_VFPV3=y +BR2_ARM_CPU_HAS_THUMB2=y +# BR2_arm920t is not set +# BR2_arm922t is not set +# BR2_arm926t is not set +# BR2_arm1136jf_s_r0 is not set +# BR2_arm1136jf_s_r1 is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +BR2_cortex_a8=y +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +# BR2_arm1136jf_s is not set +BR2_ARM_EABI=y +# BR2_ARM_EABIHF is not set +BR2_ARM_SOFT_FLOAT=y +# BR2_ARM_FPU_VFPV2 is not set +# BR2_ARM_FPU_VFPV3 is not set +# BR2_ARM_FPU_VFPV3D16 is not set +# BR2_ARM_FPU_NEON is not set +# BR2_ARM_INSTRUCTIONS_ARM_CHOICE is not set +BR2_ARM_INSTRUCTIONS_THUMB2=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_MUSL=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_LIBC="musl" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TIDSP_BINARIES is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +BR2_PACKAGE_XBMC_ARCH_SUPPORTS=y + +# +# xbmc requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# +# BR2_PACKAGE_LTRACE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_LTTNG_TOOLS is not set +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_SUNXI_TOOLS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# +# BR2_PACKAGE_AVRDUDE is not set +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# + +# +# owl-linux is only supported on ARM9 architecture +# +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_PIFMRDS is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_RPI_USERLAND is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set + +# +# sunxi-cedarx needs an (e)glibc toolchain +# + +# +# sunxi-mali needs an (e)glibc toolchain +# +# BR2_PACKAGE_SYSSTAT is not set + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_NODEJS is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set + +# +# libfslcodec needs an (e)glibc toolchain +# +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_ARMADILLO is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CLAPACK is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_LTTNG_LIBUST is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_DSP_TOOLS is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set +# BR2_TARGET_XLOADER is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/arm/little-endian/uclibc/armv4-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24.config b/buildroot-configs/arm/little-endian/uclibc/armv4-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24.config new file mode 100644 index 0000000..fa6d903 --- /dev/null +++ b/buildroot-configs/arm/little-endian/uclibc/armv4-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24.config @@ -0,0 +1,2081 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00245-gb7fcf3b Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="armv4t" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="arm920t" +BR2_GCC_TARGET_FLOAT_ABI="soft" +BR2_GCC_TARGET_MODE="arm" +BR2_ARCH_HAS_ATOMICS=y +BR2_ARM_CPU_HAS_THUMB=y +BR2_arm920t=y +# BR2_arm922t is not set +# BR2_arm926t is not set +# BR2_arm1136jf_s_r0 is not set +# BR2_arm1136jf_s_r1 is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +# BR2_cortex_a8 is not set +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +# BR2_arm1136jf_s is not set +BR2_ARM_EABI=y +BR2_ARM_SOFT_FLOAT=y +BR2_ARM_INSTRUCTIONS_ARM_CHOICE=y +# BR2_ARM_INSTRUCTIONS_THUMB is not set +BR2_ARM_INSTRUCTIONS_ARM=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_UCLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_PACKAGE_UCLIBC=y + +# +# uClibc Options +# +BR2_UCLIBC_VERSION_0_9_33=y +# BR2_UCLIBC_VERSION_SNAPSHOT is not set +BR2_UCLIBC_VERSION_STRING="0.9.33.2" +BR2_UCLIBC_CONFIG="package/uclibc/uClibc-0.9.33.config" +# BR2_TOOLCHAIN_BUILDROOT_LARGEFILE is not set +BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +# BR2_TOOLCHAIN_BUILDROOT_WCHAR is not set +# BR2_TOOLCHAIN_BUILDROOT_LOCALE is not set +# BR2_PTHREADS_NONE is not set +# BR2_PTHREADS is not set +# BR2_PTHREADS_OLD is not set +BR2_PTHREADS_NATIVE=y +# BR2_PTHREAD_DEBUG is not set +# BR2_TOOLCHAIN_BUILDROOT_USE_SSP is not set +# BR2_UCLIBC_INSTALL_UTILS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +BR2_UCLIBC_TARGET_ARCH="arm" +BR2_UCLIBC_ARM_BX=y + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_INET_IPV6=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_NEEDS_GETTEXT=y +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# + +# +# alsa-utils needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set + +# +# espeak needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_FAAD2 is not set + +# +# ffmpeg needs a toolchain w/ largefile, IPv6 +# + +# +# flac needs a toolchain w/ wchar +# + +# +# flite needs a toolchain w/ wchar +# + +# +# gstreamer 0.10 needs a toolchain w/ wchar, threads +# + +# +# gstreamer 1.x needs a toolchain w/ wchar, threads +# + +# +# jack2 needs a toolchain w/ largefile, threads, C++ +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set + +# +# mpd needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_MPG123 is not set + +# +# mplayer needs a toolchain w/ largefile +# +# BR2_PACKAGE_MUSEPACK is not set + +# +# ncmpc needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_OPUS_TOOLS is not set + +# +# pulseaudio needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_SOX is not set + +# +# tstools needs a toolchain w/ largefile +# + +# +# twolame needs a toolchain w/ largefile +# + +# +# upmpdcli needs a toolchain w/ C++, largefile, threads +# + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +BR2_PACKAGE_XBMC_ARCH_SUPPORTS=y + +# +# xbmc needs a toolchain w/ C++, IPv6, largefile, threads, wchar +# + +# +# xbmc requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set + +# +# lz4 needs a toolchain w/ largefile +# + +# +# lzip needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set + +# +# dstat needs a toolchain w/ wchar +# +# BR2_PACKAGE_DUMA is not set + +# +# fio needs a toolchain w/ largefile, threads +# + +# +# gdb/gdbserver needs a toolchain w/ threads, threads debug +# +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# + +# +# latencytop needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# ltrace needs toolchain w/ largefile, wchar +# + +# +# lttng-modules needs a Linux kernel to be built +# + +# +# lttng-tools needs a toolchain w/ largefile, threads, wchar +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set + +# +# pax-utils needs a toolchain w/ largefile +# + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set + +# +# strace needs a toolchain w/ largefile +# +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set + +# +# trace-cmd needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set + +# +# cvs needs a toolchain w/ wchar +# +# BR2_PACKAGE_FLEX is not set + +# +# gettext needs a toolchain w/ wchar +# + +# +# git needs a toolchain w/ largefile +# +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set + +# +# tree needs a toolchain w/ wchar +# + +# +# Filesystem and flash utilities +# + +# +# btrfs-progs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set + +# +# curlftpfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# dosfstools needs a toolchain w/ largefile, wchar +# + +# +# e2fsprogs needs a toolchain w/ largefile, wchar +# + +# +# e2tools needs a toolchain w/ threads, largefile and wchar +# + +# +# ecryptfs-utils needs a toolchain w/ largefile, threads, wchar +# + +# +# exfat needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# exfat-utils needs a toolchain w/ largefile, wchar +# + +# +# f2fs-tools needs a toolchain w/ largefile, wchar +# + +# +# flashbench needs a toolchain w/ largefile +# + +# +# genext2fs needs a toolchain w/ largefile +# +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set + +# +# mmc-utils needs a toolchain w/ largefile, headers >= 3.0 +# +# BR2_PACKAGE_MTD is not set + +# +# mtools needs a toolchain w/ wchar +# + +# +# nfs-utils needs a toolchain w/ largefile, threads +# + +# +# ntfs-3g needs a toolchain w/ largefile, wchar, threads +# + +# +# simicsfs needs a Linux kernel to be built +# + +# +# squashfs needs a toolchain w/ largefile, threads +# + +# +# sshfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_SUNXI_TOOLS is not set + +# +# unionfs needs a toolchain w/ largefile, threads, dynamic library +# + +# +# xfsprogs needs a toolchain w/ largefile, wchar +# + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set + +# +# jhead needs a toolchain w/ wchar +# + +# +# rrdtool needs a toolchain w/ wchar +# + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set + +# +# fbterm needs a toolchain w/ C++, wchar, locale +# +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set + +# +# psplash needs a toolchain w/ wchar +# +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# + +# +# EFL needs a toolchain w/ wchar +# +# BR2_PACKAGE_QT is not set + +# +# Qt5 needs a toolchain w/ wchar, IPv6, NPTL, C++ +# + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# + +# +# X.org needs a toolchain w/ wchar, threads, dynamic library +# + +# +# X applications +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# + +# +# avrdude needs a toolchain w/ threads, largefile, wchar +# + +# +# cdrkit needs a toolchain w/ largefile +# + +# +# cryptsetup needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_DBUS is not set + +# +# dmraid needs a toolchain w/ largefile, threads, dynamic library +# + +# +# dvb-apps utils needs a toolchain w/ largefile, threads, headers >= 3.3 +# + +# +# dvbsnoop needs a toolchain w/ largefile +# +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set + +# +# gptfdisk needs a toolchain w/ largefile, wchar, C++ +# + +# +# gvfs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set + +# +# lshw needs a toolchain w/ C++, largefile, wchar +# +# BR2_PACKAGE_LSUIO is not set + +# +# lvm2 needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set + +# +# memtester needs a toolchain w/ largefile +# + +# +# minicom needs a toolchain w/ wchar +# +# BR2_PACKAGE_NANOCOM is not set + +# +# neard needs a toolchain w/ wchar, threads +# + +# +# ofono needs a toolchain w/ wchar, threads +# + +# +# ola needs a toolchain w/ C++, threads, largefile, wchar +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# + +# +# parted needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set + +# +# pifmrds needs a toolchain w/ largefile +# +# BR2_PACKAGE_RNG_TOOLS is not set + +# +# rpi-userland needs a toolchain w/ C++, largefile, threads +# +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set + +# +# sg3-utils needs a toolchain w/ largefile, threads +# + +# +# sispmctl needs a toolchain w/ threads, wchar +# +# BR2_PACKAGE_SMARTMONTOOLS is not set + +# +# smstools3 needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set + +# +# sunxi-cedarx needs an (e)glibc toolchain +# + +# +# sunxi-mali needs an (e)glibc toolchain +# +# BR2_PACKAGE_SYSSTAT is not set + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# + +# +# udisks needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set + +# +# python needs a toolchain w/ wchar, threads +# + +# +# python3 needs a toolchain w/ wchar, threads +# + +# +# ruby needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set + +# +# libmpd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set + +# +# libsndfile needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set + +# +# taglib needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# + +# +# libarchive needs a toolchain w/ wchar +# +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# + +# +# gnutls needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set + +# +# libnss needs a toolchain w/ largefile, threads +# + +# +# libsecret needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# + +# +# redis needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# + +# +# gamin needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set + +# +# libfuse needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# + +# +# atk needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set + +# +# gdk-pixbuf needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set + +# +# libdrm needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set + +# +# librsvg needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set + +# +# libva needs a toolchain w/ largefile, threads, dynamic library +# + +# +# opencv needs a toolchain w/ C++, NPTL, wchar +# + +# +# pango needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# + +# +# libcec needs a toolchain w/ C++, wchar, threads, dynamic library +# +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set + +# +# libqmi needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set + +# +# libv4l needs a toolchain w/ largefile, threads and C++ +# +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# + +# +# neardal needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set + +# +# json-glib needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set + +# +# libxml++ needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set + +# +# xerces-c++ needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set + +# +# log4cplus needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LOG4CXX is not set + +# +# zlog needs a toolchain w/ threads, largefile, dynamic library +# + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set + +# +# libdvbsi++ needs a toolchain w/ C++, wchar, threads +# + +# +# libdvdnav needs a toolchain w/ dynamic library, largefile, threads +# + +# +# libdvdread needs a toolchain w/ dynamic library, largefile +# +# BR2_PACKAGE_LIBEBML is not set + +# +# libfslcodec needs an (e)glibc toolchain +# +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set + +# +# libmms needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set + +# +# libplayer needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set + +# +# cppzmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# czmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# filemq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set + +# +# glib-networking needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set + +# +# libmnl needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set + +# +# libnetfilter_acct needs a toolchain w/ largefile +# + +# +# libnetfilter_conntrack needs a toolchain w/ largefile +# + +# +# libnetfilter_cthelper needs a toolchain w/ largefile +# + +# +# libnetfilter_cttimout needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNFNETLINK is not set + +# +# libnftnl needs a toolchain w/ threads, IPv6, largefile +# +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set + +# +# libsoup needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set + +# +# libupnp needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set + +# +# openpgm needs a toolchain w/ wchar, threads, IPv6 +# +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set + +# +# thrift needs a toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_USBREDIR is not set + +# +# wvstreams needs a toolchain w/ C++, largefile +# + +# +# zeromq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zmqpp needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zyre needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set + +# +# armadillo needs a toolchain w/ C++, largefile +# + +# +# boost needs a toolchain w/ C++, largefile, threads +# + +# +# cblas/clapack needs a toolchain w/ largefile +# + +# +# cppcms needs a toolchain w/ C++, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EIGEN is not set + +# +# elfutils needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set + +# +# glibmm needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set + +# +# gtest needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set + +# +# libglib2 needs a toolchain w/ wchar, threads +# + +# +# libical needs a toolchain w/ wchar +# +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y + +# +# libnspr needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set + +# +# linux-pam needs a toolchain w/ wchar, locale, dynamic library +# + +# +# lttng-libust needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set + +# +# poco needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# + +# +# enchant needs a toolchain w/ C++, threads, wchar +# + +# +# icu needs a toolchain w/ C++, wchar, threads +# + +# +# libedit needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBICONV is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set + +# +# newt needs a toolchain w/ wchar +# +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set + +# +# shared-mime-info needs a toolchain w/ wchar, threads +# + +# +# snowball-init needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set + +# +# mutt needs a toolchain w/ wchar +# + +# +# Networking applications +# + +# +# aiccu needs a toolchain w/ IPv6, wchar, threads +# + +# +# aircrack-ng needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set + +# +# bluez-utils needs a toolchain w/ wchar, threads, dynamic library +# + +# +# bluez5-utils needs a toolchain w/ wchar, threads, IPv6, headers >= 3.4 +# +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set + +# +# connman needs a toolchain w/ IPv6, wchar, threads, resolver +# + +# +# conntrack-tools needs a toolchain w/ IPv6, largefile, threads +# +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set + +# +# gesftpserver needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set + +# +# httping needs a toolchain w/ wchar +# +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# + +# +# igmpproxy needs a toolchain w/ wchar +# +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# ipset needs a toolchain w/ largefile +# +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set + +# +# lftp requires a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set + +# +# minidlna needs a toolchain w/ largefile, IPv6, threads, wchar +# + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# + +# +# mongoose needs a toolchain w/ threads, largefile +# + +# +# mongrel2 needs a toolchain w/ C++, IPv6, threads, largefile, wchar +# +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set + +# +# nbd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# + +# +# nfacct needs a toolchain w/ largefile +# + +# +# nftables needs a toolchain w/ IPv6, largefile, threads, wchar, headers >= 3.4 +# +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set + +# +# rtorrent needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set + +# +# samba4 needs a toolchain w/ IPv6, wchar, largfile, threads +# +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set + +# +# spice server needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set + +# +# tvheadend needs a toolchain w/ largefile, IPv6, NPTL, headers >= 3.2 +# + +# +# udpcast needs a toolchain w/ largefile, threads +# + +# +# ulogd needs a toolchain w/ IPv6, largefile, dynamic library +# + +# +# ushare needs a toolchain w/ largefile, threads +# + +# +# ussp-push needs a toolchain w/ wchar, IPv6, threads, dynamic library +# +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set + +# +# wireshark needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_WPA_SUPPLICANT is not set + +# +# wvdial needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set + +# +# inotify-tools needs a toolchain w/ largefile +# +# BR2_PACKAGE_LOCKFILE_PROGS is not set + +# +# logrotate needs a toolchain w/ wchar +# +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# + +# +# acl needs a toolchain w/ largefile +# + +# +# attr needs a toolchain w/ largefile +# +# BR2_PACKAGE_CPULOAD is not set + +# +# ftop needs a toolchain w/ largefile +# +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set + +# +# lxc needs a toolchain w/ IPv6, threads, largefile +# +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set + +# +# polkit needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PWGEN is not set + +# +# quota needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y + +# +# util-linux needs a toolchain w/ largefile, wchar +# + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set + +# +# nano needs a toolchain w/ wchar +# +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set + +# +# gummiboot needs a toolchain w/ largefile, wchar +# +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/arm/little-endian/uclibc/armv4t-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24-thumb1.config b/buildroot-configs/arm/little-endian/uclibc/armv4t-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24-thumb1.config new file mode 100644 index 0000000..b386dd0 --- /dev/null +++ b/buildroot-configs/arm/little-endian/uclibc/armv4t-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24-thumb1.config @@ -0,0 +1,2080 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00245-gb7fcf3b Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="armv4t" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="arm920t" +BR2_GCC_TARGET_FLOAT_ABI="soft" +BR2_GCC_TARGET_MODE="thumb" +BR2_ARCH_HAS_ATOMICS=y +BR2_ARM_CPU_HAS_THUMB=y +BR2_arm920t=y +# BR2_arm922t is not set +# BR2_arm926t is not set +# BR2_arm1136jf_s_r0 is not set +# BR2_arm1136jf_s_r1 is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +# BR2_cortex_a8 is not set +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +# BR2_arm1136jf_s is not set +BR2_ARM_EABI=y +BR2_ARM_SOFT_FLOAT=y +# BR2_ARM_INSTRUCTIONS_ARM_CHOICE is not set +BR2_ARM_INSTRUCTIONS_THUMB=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_UCLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_PACKAGE_UCLIBC=y + +# +# uClibc Options +# +BR2_UCLIBC_VERSION_0_9_33=y +# BR2_UCLIBC_VERSION_SNAPSHOT is not set +BR2_UCLIBC_VERSION_STRING="0.9.33.2" +BR2_UCLIBC_CONFIG="package/uclibc/uClibc-0.9.33.config" +# BR2_TOOLCHAIN_BUILDROOT_LARGEFILE is not set +BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +# BR2_TOOLCHAIN_BUILDROOT_WCHAR is not set +# BR2_TOOLCHAIN_BUILDROOT_LOCALE is not set +# BR2_PTHREADS_NONE is not set +# BR2_PTHREADS is not set +# BR2_PTHREADS_OLD is not set +BR2_PTHREADS_NATIVE=y +# BR2_PTHREAD_DEBUG is not set +# BR2_TOOLCHAIN_BUILDROOT_USE_SSP is not set +# BR2_UCLIBC_INSTALL_UTILS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +BR2_UCLIBC_TARGET_ARCH="arm" +BR2_UCLIBC_ARM_BX=y + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_INET_IPV6=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_NEEDS_GETTEXT=y +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# + +# +# alsa-utils needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set + +# +# espeak needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_FAAD2 is not set + +# +# ffmpeg needs a toolchain w/ largefile, IPv6 +# + +# +# flac needs a toolchain w/ wchar +# + +# +# flite needs a toolchain w/ wchar +# + +# +# gstreamer 0.10 needs a toolchain w/ wchar, threads +# + +# +# gstreamer 1.x needs a toolchain w/ wchar, threads +# + +# +# jack2 needs a toolchain w/ largefile, threads, C++ +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set + +# +# mpd needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_MPG123 is not set + +# +# mplayer needs a toolchain w/ largefile +# +# BR2_PACKAGE_MUSEPACK is not set + +# +# ncmpc needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_OPUS_TOOLS is not set + +# +# pulseaudio needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_SOX is not set + +# +# tstools needs a toolchain w/ largefile +# + +# +# twolame needs a toolchain w/ largefile +# + +# +# upmpdcli needs a toolchain w/ C++, largefile, threads +# + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +BR2_PACKAGE_XBMC_ARCH_SUPPORTS=y + +# +# xbmc needs a toolchain w/ C++, IPv6, largefile, threads, wchar +# + +# +# xbmc requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set + +# +# lz4 needs a toolchain w/ largefile +# + +# +# lzip needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set + +# +# dstat needs a toolchain w/ wchar +# +# BR2_PACKAGE_DUMA is not set + +# +# fio needs a toolchain w/ largefile, threads +# + +# +# gdb/gdbserver needs a toolchain w/ threads, threads debug +# +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# + +# +# latencytop needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# ltrace needs toolchain w/ largefile, wchar +# + +# +# lttng-modules needs a Linux kernel to be built +# + +# +# lttng-tools needs a toolchain w/ largefile, threads, wchar +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set + +# +# pax-utils needs a toolchain w/ largefile +# + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set + +# +# strace needs a toolchain w/ largefile +# +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set + +# +# trace-cmd needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set + +# +# cvs needs a toolchain w/ wchar +# +# BR2_PACKAGE_FLEX is not set + +# +# gettext needs a toolchain w/ wchar +# + +# +# git needs a toolchain w/ largefile +# +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set + +# +# tree needs a toolchain w/ wchar +# + +# +# Filesystem and flash utilities +# + +# +# btrfs-progs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set + +# +# curlftpfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# dosfstools needs a toolchain w/ largefile, wchar +# + +# +# e2fsprogs needs a toolchain w/ largefile, wchar +# + +# +# e2tools needs a toolchain w/ threads, largefile and wchar +# + +# +# ecryptfs-utils needs a toolchain w/ largefile, threads, wchar +# + +# +# exfat needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# exfat-utils needs a toolchain w/ largefile, wchar +# + +# +# f2fs-tools needs a toolchain w/ largefile, wchar +# + +# +# flashbench needs a toolchain w/ largefile +# + +# +# genext2fs needs a toolchain w/ largefile +# +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set + +# +# mmc-utils needs a toolchain w/ largefile, headers >= 3.0 +# +# BR2_PACKAGE_MTD is not set + +# +# mtools needs a toolchain w/ wchar +# + +# +# nfs-utils needs a toolchain w/ largefile, threads +# + +# +# ntfs-3g needs a toolchain w/ largefile, wchar, threads +# + +# +# simicsfs needs a Linux kernel to be built +# + +# +# squashfs needs a toolchain w/ largefile, threads +# + +# +# sshfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_SUNXI_TOOLS is not set + +# +# unionfs needs a toolchain w/ largefile, threads, dynamic library +# + +# +# xfsprogs needs a toolchain w/ largefile, wchar +# + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set + +# +# jhead needs a toolchain w/ wchar +# + +# +# rrdtool needs a toolchain w/ wchar +# + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set + +# +# fbterm needs a toolchain w/ C++, wchar, locale +# +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set + +# +# psplash needs a toolchain w/ wchar +# +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# + +# +# EFL needs a toolchain w/ wchar +# +# BR2_PACKAGE_QT is not set + +# +# Qt5 needs a toolchain w/ wchar, IPv6, NPTL, C++ +# + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# + +# +# X.org needs a toolchain w/ wchar, threads, dynamic library +# + +# +# X applications +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# + +# +# avrdude needs a toolchain w/ threads, largefile, wchar +# + +# +# cdrkit needs a toolchain w/ largefile +# + +# +# cryptsetup needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_DBUS is not set + +# +# dmraid needs a toolchain w/ largefile, threads, dynamic library +# + +# +# dvb-apps utils needs a toolchain w/ largefile, threads, headers >= 3.3 +# + +# +# dvbsnoop needs a toolchain w/ largefile +# +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set + +# +# gptfdisk needs a toolchain w/ largefile, wchar, C++ +# + +# +# gvfs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set + +# +# lshw needs a toolchain w/ C++, largefile, wchar +# +# BR2_PACKAGE_LSUIO is not set + +# +# lvm2 needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set + +# +# memtester needs a toolchain w/ largefile +# + +# +# minicom needs a toolchain w/ wchar +# +# BR2_PACKAGE_NANOCOM is not set + +# +# neard needs a toolchain w/ wchar, threads +# + +# +# ofono needs a toolchain w/ wchar, threads +# + +# +# ola needs a toolchain w/ C++, threads, largefile, wchar +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# + +# +# parted needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set + +# +# pifmrds needs a toolchain w/ largefile +# +# BR2_PACKAGE_RNG_TOOLS is not set + +# +# rpi-userland needs a toolchain w/ C++, largefile, threads +# +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set + +# +# sg3-utils needs a toolchain w/ largefile, threads +# + +# +# sispmctl needs a toolchain w/ threads, wchar +# +# BR2_PACKAGE_SMARTMONTOOLS is not set + +# +# smstools3 needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set + +# +# sunxi-cedarx needs an (e)glibc toolchain +# + +# +# sunxi-mali needs an (e)glibc toolchain +# +# BR2_PACKAGE_SYSSTAT is not set + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# + +# +# udisks needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set + +# +# python needs a toolchain w/ wchar, threads +# + +# +# python3 needs a toolchain w/ wchar, threads +# + +# +# ruby needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set + +# +# libmpd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set + +# +# libsndfile needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set + +# +# taglib needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# + +# +# libarchive needs a toolchain w/ wchar +# +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# + +# +# gnutls needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set + +# +# libnss needs a toolchain w/ largefile, threads +# + +# +# libsecret needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# + +# +# redis needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# + +# +# gamin needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set + +# +# libfuse needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# + +# +# atk needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set + +# +# gdk-pixbuf needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set + +# +# libdrm needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set + +# +# librsvg needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set + +# +# libva needs a toolchain w/ largefile, threads, dynamic library +# + +# +# opencv needs a toolchain w/ C++, NPTL, wchar +# + +# +# pango needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# + +# +# libcec needs a toolchain w/ C++, wchar, threads, dynamic library +# +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set + +# +# libqmi needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set + +# +# libv4l needs a toolchain w/ largefile, threads and C++ +# +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# + +# +# neardal needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set + +# +# json-glib needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set + +# +# libxml++ needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set + +# +# xerces-c++ needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set + +# +# log4cplus needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LOG4CXX is not set + +# +# zlog needs a toolchain w/ threads, largefile, dynamic library +# + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set + +# +# libdvbsi++ needs a toolchain w/ C++, wchar, threads +# + +# +# libdvdnav needs a toolchain w/ dynamic library, largefile, threads +# + +# +# libdvdread needs a toolchain w/ dynamic library, largefile +# +# BR2_PACKAGE_LIBEBML is not set + +# +# libfslcodec needs an (e)glibc toolchain +# +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set + +# +# libmms needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set + +# +# libplayer needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set + +# +# cppzmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# czmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# filemq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set + +# +# glib-networking needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set + +# +# libmnl needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set + +# +# libnetfilter_acct needs a toolchain w/ largefile +# + +# +# libnetfilter_conntrack needs a toolchain w/ largefile +# + +# +# libnetfilter_cthelper needs a toolchain w/ largefile +# + +# +# libnetfilter_cttimout needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNFNETLINK is not set + +# +# libnftnl needs a toolchain w/ threads, IPv6, largefile +# +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set + +# +# libsoup needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set + +# +# libupnp needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set + +# +# openpgm needs a toolchain w/ wchar, threads, IPv6 +# +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set + +# +# thrift needs a toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_USBREDIR is not set + +# +# wvstreams needs a toolchain w/ C++, largefile +# + +# +# zeromq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zmqpp needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zyre needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set + +# +# armadillo needs a toolchain w/ C++, largefile +# + +# +# boost needs a toolchain w/ C++, largefile, threads +# + +# +# cblas/clapack needs a toolchain w/ largefile +# + +# +# cppcms needs a toolchain w/ C++, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EIGEN is not set + +# +# elfutils needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set + +# +# glibmm needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set + +# +# gtest needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set + +# +# libglib2 needs a toolchain w/ wchar, threads +# + +# +# libical needs a toolchain w/ wchar +# +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y + +# +# libnspr needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set + +# +# linux-pam needs a toolchain w/ wchar, locale, dynamic library +# + +# +# lttng-libust needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set + +# +# poco needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# + +# +# enchant needs a toolchain w/ C++, threads, wchar +# + +# +# icu needs a toolchain w/ C++, wchar, threads +# + +# +# libedit needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBICONV is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set + +# +# newt needs a toolchain w/ wchar +# +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set + +# +# shared-mime-info needs a toolchain w/ wchar, threads +# + +# +# snowball-init needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set + +# +# mutt needs a toolchain w/ wchar +# + +# +# Networking applications +# + +# +# aiccu needs a toolchain w/ IPv6, wchar, threads +# + +# +# aircrack-ng needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set + +# +# bluez-utils needs a toolchain w/ wchar, threads, dynamic library +# + +# +# bluez5-utils needs a toolchain w/ wchar, threads, IPv6, headers >= 3.4 +# +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set + +# +# connman needs a toolchain w/ IPv6, wchar, threads, resolver +# + +# +# conntrack-tools needs a toolchain w/ IPv6, largefile, threads +# +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set + +# +# gesftpserver needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set + +# +# httping needs a toolchain w/ wchar +# +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# + +# +# igmpproxy needs a toolchain w/ wchar +# +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# ipset needs a toolchain w/ largefile +# +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set + +# +# lftp requires a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set + +# +# minidlna needs a toolchain w/ largefile, IPv6, threads, wchar +# + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# + +# +# mongoose needs a toolchain w/ threads, largefile +# + +# +# mongrel2 needs a toolchain w/ C++, IPv6, threads, largefile, wchar +# +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set + +# +# nbd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# + +# +# nfacct needs a toolchain w/ largefile +# + +# +# nftables needs a toolchain w/ IPv6, largefile, threads, wchar, headers >= 3.4 +# +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set + +# +# rtorrent needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set + +# +# samba4 needs a toolchain w/ IPv6, wchar, largfile, threads +# +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set + +# +# spice server needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set + +# +# tvheadend needs a toolchain w/ largefile, IPv6, NPTL, headers >= 3.2 +# + +# +# udpcast needs a toolchain w/ largefile, threads +# + +# +# ulogd needs a toolchain w/ IPv6, largefile, dynamic library +# + +# +# ushare needs a toolchain w/ largefile, threads +# + +# +# ussp-push needs a toolchain w/ wchar, IPv6, threads, dynamic library +# +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set + +# +# wireshark needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_WPA_SUPPLICANT is not set + +# +# wvdial needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set + +# +# inotify-tools needs a toolchain w/ largefile +# +# BR2_PACKAGE_LOCKFILE_PROGS is not set + +# +# logrotate needs a toolchain w/ wchar +# +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# + +# +# acl needs a toolchain w/ largefile +# + +# +# attr needs a toolchain w/ largefile +# +# BR2_PACKAGE_CPULOAD is not set + +# +# ftop needs a toolchain w/ largefile +# +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set + +# +# lxc needs a toolchain w/ IPv6, threads, largefile +# +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set + +# +# polkit needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PWGEN is not set + +# +# quota needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y + +# +# util-linux needs a toolchain w/ largefile, wchar +# + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set + +# +# nano needs a toolchain w/ wchar +# +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set + +# +# gummiboot needs a toolchain w/ largefile, wchar +# +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/arm/little-endian/uclibc/armv5-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24.config b/buildroot-configs/arm/little-endian/uclibc/armv5-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24.config new file mode 100644 index 0000000..4076aad --- /dev/null +++ b/buildroot-configs/arm/little-endian/uclibc/armv5-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24.config @@ -0,0 +1,2110 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00245-gb7fcf3b Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="armv5te" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="arm926ej-s" +BR2_GCC_TARGET_FLOAT_ABI="soft" +BR2_GCC_TARGET_MODE="arm" +BR2_ARCH_HAS_ATOMICS=y +BR2_ARM_CPU_MAYBE_HAS_VFPV2=y +BR2_ARM_CPU_HAS_THUMB=y +# BR2_arm920t is not set +# BR2_arm922t is not set +BR2_arm926t=y +# BR2_arm1136jf_s_r0 is not set +# BR2_arm1136jf_s_r1 is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +# BR2_cortex_a8 is not set +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +# BR2_arm1136jf_s is not set +BR2_ARM_EABI=y +# BR2_ARM_EABIHF is not set +BR2_ARM_SOFT_FLOAT=y +# BR2_ARM_FPU_VFPV2 is not set +BR2_ARM_INSTRUCTIONS_ARM_CHOICE=y +# BR2_ARM_INSTRUCTIONS_THUMB is not set +BR2_ARM_INSTRUCTIONS_ARM=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_UCLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_PACKAGE_UCLIBC=y + +# +# uClibc Options +# +BR2_UCLIBC_VERSION_0_9_33=y +# BR2_UCLIBC_VERSION_SNAPSHOT is not set +BR2_UCLIBC_VERSION_STRING="0.9.33.2" +BR2_UCLIBC_CONFIG="package/uclibc/uClibc-0.9.33.config" +# BR2_TOOLCHAIN_BUILDROOT_LARGEFILE is not set +BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +# BR2_TOOLCHAIN_BUILDROOT_WCHAR is not set +# BR2_TOOLCHAIN_BUILDROOT_LOCALE is not set +# BR2_PTHREADS_NONE is not set +# BR2_PTHREADS is not set +# BR2_PTHREADS_OLD is not set +BR2_PTHREADS_NATIVE=y +# BR2_PTHREAD_DEBUG is not set +# BR2_TOOLCHAIN_BUILDROOT_USE_SSP is not set +# BR2_UCLIBC_INSTALL_UTILS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +BR2_UCLIBC_TARGET_ARCH="arm" +BR2_UCLIBC_ARM_BX=y + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_INET_IPV6=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_NEEDS_GETTEXT=y +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# + +# +# alsa-utils needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set + +# +# espeak needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_FAAD2 is not set + +# +# ffmpeg needs a toolchain w/ largefile, IPv6 +# + +# +# flac needs a toolchain w/ wchar +# + +# +# flite needs a toolchain w/ wchar +# + +# +# gstreamer 0.10 needs a toolchain w/ wchar, threads +# + +# +# gstreamer 1.x needs a toolchain w/ wchar, threads +# + +# +# jack2 needs a toolchain w/ largefile, threads, C++ +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set + +# +# mpd needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_MPG123 is not set + +# +# mplayer needs a toolchain w/ largefile +# +# BR2_PACKAGE_MUSEPACK is not set + +# +# ncmpc needs a toolchain w/ wchar, threads +# + +# +# on2-8170-libs needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_OPUS_TOOLS is not set + +# +# pulseaudio needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_SOX is not set + +# +# tstools needs a toolchain w/ largefile +# + +# +# twolame needs a toolchain w/ largefile +# + +# +# upmpdcli needs a toolchain w/ C++, largefile, threads +# + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +BR2_PACKAGE_XBMC_ARCH_SUPPORTS=y + +# +# xbmc needs a toolchain w/ C++, IPv6, largefile, threads, wchar +# + +# +# xbmc requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set + +# +# lz4 needs a toolchain w/ largefile +# + +# +# lzip needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set + +# +# dstat needs a toolchain w/ wchar +# +# BR2_PACKAGE_DUMA is not set + +# +# fio needs a toolchain w/ largefile, threads +# + +# +# gdb/gdbserver needs a toolchain w/ threads, threads debug +# +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# + +# +# latencytop needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# ltrace needs toolchain w/ largefile, wchar +# + +# +# lttng-modules needs a Linux kernel to be built +# + +# +# lttng-tools needs a toolchain w/ largefile, threads, wchar +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set + +# +# pax-utils needs a toolchain w/ largefile +# + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set + +# +# strace needs a toolchain w/ largefile +# +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set + +# +# trace-cmd needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set + +# +# cvs needs a toolchain w/ wchar +# +# BR2_PACKAGE_FLEX is not set + +# +# gettext needs a toolchain w/ wchar +# + +# +# git needs a toolchain w/ largefile +# +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set + +# +# tree needs a toolchain w/ wchar +# + +# +# Filesystem and flash utilities +# + +# +# btrfs-progs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set + +# +# curlftpfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# dosfstools needs a toolchain w/ largefile, wchar +# + +# +# e2fsprogs needs a toolchain w/ largefile, wchar +# + +# +# e2tools needs a toolchain w/ threads, largefile and wchar +# + +# +# ecryptfs-utils needs a toolchain w/ largefile, threads, wchar +# + +# +# exfat needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# exfat-utils needs a toolchain w/ largefile, wchar +# + +# +# f2fs-tools needs a toolchain w/ largefile, wchar +# + +# +# flashbench needs a toolchain w/ largefile +# + +# +# genext2fs needs a toolchain w/ largefile +# +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set + +# +# mmc-utils needs a toolchain w/ largefile, headers >= 3.0 +# +# BR2_PACKAGE_MTD is not set + +# +# mtools needs a toolchain w/ wchar +# + +# +# nfs-utils needs a toolchain w/ largefile, threads +# + +# +# ntfs-3g needs a toolchain w/ largefile, wchar, threads +# + +# +# simicsfs needs a Linux kernel to be built +# + +# +# squashfs needs a toolchain w/ largefile, threads +# + +# +# sshfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_SUNXI_TOOLS is not set + +# +# unionfs needs a toolchain w/ largefile, threads, dynamic library +# + +# +# xfsprogs needs a toolchain w/ largefile, wchar +# + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set + +# +# jhead needs a toolchain w/ wchar +# + +# +# rrdtool needs a toolchain w/ wchar +# + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set + +# +# fbterm needs a toolchain w/ C++, wchar, locale +# +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set + +# +# psplash needs a toolchain w/ wchar +# +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# + +# +# EFL needs a toolchain w/ wchar +# +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y + +# +# Qt5 needs a toolchain w/ wchar, IPv6, NPTL, C++ +# + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# + +# +# X.org needs a toolchain w/ wchar, threads, dynamic library +# + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# + +# +# avrdude needs a toolchain w/ threads, largefile, wchar +# + +# +# cdrkit needs a toolchain w/ largefile +# + +# +# cryptsetup needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_DBUS is not set + +# +# dmraid needs a toolchain w/ largefile, threads, dynamic library +# + +# +# dvb-apps utils needs a toolchain w/ largefile, threads, headers >= 3.3 +# + +# +# dvbsnoop needs a toolchain w/ largefile +# +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set + +# +# gptfdisk needs a toolchain w/ largefile, wchar, C++ +# + +# +# gvfs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set + +# +# lshw needs a toolchain w/ C++, largefile, wchar +# +# BR2_PACKAGE_LSUIO is not set + +# +# lvm2 needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set + +# +# memtester needs a toolchain w/ largefile +# + +# +# minicom needs a toolchain w/ wchar +# +# BR2_PACKAGE_NANOCOM is not set + +# +# neard needs a toolchain w/ wchar, threads +# + +# +# ofono needs a toolchain w/ wchar, threads +# + +# +# ola needs a toolchain w/ C++, threads, largefile, wchar +# + +# +# on2-8170-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# + +# +# parted needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set + +# +# pifmrds needs a toolchain w/ largefile +# +# BR2_PACKAGE_RNG_TOOLS is not set + +# +# rpi-userland needs a toolchain w/ C++, largefile, threads +# +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set + +# +# sg3-utils needs a toolchain w/ largefile, threads +# + +# +# sispmctl needs a toolchain w/ threads, wchar +# +# BR2_PACKAGE_SMARTMONTOOLS is not set + +# +# smstools3 needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set + +# +# sunxi-cedarx needs an (e)glibc toolchain +# + +# +# sunxi-mali needs an (e)glibc toolchain +# +# BR2_PACKAGE_SYSSTAT is not set + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# + +# +# udisks needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set + +# +# nodejs needs a toolchain w/ C++, IPv6, largefile, threads +# +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set + +# +# python needs a toolchain w/ wchar, threads +# + +# +# python3 needs a toolchain w/ wchar, threads +# + +# +# ruby needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set + +# +# libmpd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set + +# +# libsndfile needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set + +# +# taglib needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# + +# +# libarchive needs a toolchain w/ wchar +# +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# + +# +# gnutls needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set + +# +# libnss needs a toolchain w/ largefile, threads +# + +# +# libsecret needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# + +# +# redis needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# + +# +# gamin needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set + +# +# libfuse needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# + +# +# atk needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set + +# +# gdk-pixbuf needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set + +# +# libdrm needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set + +# +# librsvg needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set + +# +# libva needs a toolchain w/ largefile, threads, dynamic library +# + +# +# opencv needs a toolchain w/ C++, NPTL, wchar +# + +# +# pango needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# + +# +# libcec needs a toolchain w/ C++, wchar, threads, dynamic library +# +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set + +# +# libqmi needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set + +# +# libv4l needs a toolchain w/ largefile, threads and C++ +# +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# + +# +# neardal needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set + +# +# json-glib needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set + +# +# libxml++ needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set + +# +# xerces-c++ needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set + +# +# log4cplus needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LOG4CXX is not set + +# +# zlog needs a toolchain w/ threads, largefile, dynamic library +# + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set + +# +# libdvbsi++ needs a toolchain w/ C++, wchar, threads +# + +# +# libdvdnav needs a toolchain w/ dynamic library, largefile, threads +# + +# +# libdvdread needs a toolchain w/ dynamic library, largefile +# +# BR2_PACKAGE_LIBEBML is not set + +# +# libfslcodec needs an (e)glibc toolchain +# +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set + +# +# libmms needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set + +# +# libplayer needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set + +# +# cppzmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# czmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# filemq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set + +# +# glib-networking needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set + +# +# libmnl needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set + +# +# libnetfilter_acct needs a toolchain w/ largefile +# + +# +# libnetfilter_conntrack needs a toolchain w/ largefile +# + +# +# libnetfilter_cthelper needs a toolchain w/ largefile +# + +# +# libnetfilter_cttimout needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNFNETLINK is not set + +# +# libnftnl needs a toolchain w/ threads, IPv6, largefile +# +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set + +# +# libsoup needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set + +# +# libupnp needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set + +# +# openpgm needs a toolchain w/ wchar, threads, IPv6 +# +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set + +# +# thrift needs a toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_USBREDIR is not set + +# +# wvstreams needs a toolchain w/ C++, largefile +# + +# +# zeromq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zmqpp needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zyre needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set + +# +# armadillo needs a toolchain w/ C++, largefile +# + +# +# boost needs a toolchain w/ C++, largefile, threads +# + +# +# cblas/clapack needs a toolchain w/ largefile +# + +# +# cppcms needs a toolchain w/ C++, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EIGEN is not set + +# +# elfutils needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set + +# +# glibmm needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set + +# +# gtest needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set + +# +# libglib2 needs a toolchain w/ wchar, threads +# + +# +# libical needs a toolchain w/ wchar +# +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y + +# +# libnspr needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set + +# +# linux-pam needs a toolchain w/ wchar, locale, dynamic library +# + +# +# lttng-libust needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set + +# +# poco needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# + +# +# enchant needs a toolchain w/ C++, threads, wchar +# + +# +# icu needs a toolchain w/ C++, wchar, threads +# + +# +# libedit needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBICONV is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set + +# +# newt needs a toolchain w/ wchar +# +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set + +# +# shared-mime-info needs a toolchain w/ wchar, threads +# + +# +# snowball-init needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set + +# +# mutt needs a toolchain w/ wchar +# + +# +# Networking applications +# + +# +# aiccu needs a toolchain w/ IPv6, wchar, threads +# + +# +# aircrack-ng needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set + +# +# bluez-utils needs a toolchain w/ wchar, threads, dynamic library +# + +# +# bluez5-utils needs a toolchain w/ wchar, threads, IPv6, headers >= 3.4 +# +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set + +# +# connman needs a toolchain w/ IPv6, wchar, threads, resolver +# + +# +# conntrack-tools needs a toolchain w/ IPv6, largefile, threads +# +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set + +# +# gesftpserver needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set + +# +# httping needs a toolchain w/ wchar +# +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# + +# +# igmpproxy needs a toolchain w/ wchar +# +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# ipset needs a toolchain w/ largefile +# +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set + +# +# lftp requires a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set + +# +# minidlna needs a toolchain w/ largefile, IPv6, threads, wchar +# + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# + +# +# mongoose needs a toolchain w/ threads, largefile +# + +# +# mongrel2 needs a toolchain w/ C++, IPv6, threads, largefile, wchar +# +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set + +# +# nbd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# + +# +# nfacct needs a toolchain w/ largefile +# + +# +# nftables needs a toolchain w/ IPv6, largefile, threads, wchar, headers >= 3.4 +# +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set + +# +# rtorrent needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set + +# +# samba4 needs a toolchain w/ IPv6, wchar, largfile, threads +# +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set + +# +# spice server needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set + +# +# tvheadend needs a toolchain w/ largefile, IPv6, NPTL, headers >= 3.2 +# + +# +# udpcast needs a toolchain w/ largefile, threads +# + +# +# ulogd needs a toolchain w/ IPv6, largefile, dynamic library +# + +# +# ushare needs a toolchain w/ largefile, threads +# + +# +# ussp-push needs a toolchain w/ wchar, IPv6, threads, dynamic library +# +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set + +# +# wireshark needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_WPA_SUPPLICANT is not set + +# +# wvdial needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set + +# +# inotify-tools needs a toolchain w/ largefile +# +# BR2_PACKAGE_LOCKFILE_PROGS is not set + +# +# logrotate needs a toolchain w/ wchar +# +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# + +# +# acl needs a toolchain w/ largefile +# + +# +# attr needs a toolchain w/ largefile +# +# BR2_PACKAGE_CPULOAD is not set + +# +# ftop needs a toolchain w/ largefile +# +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set + +# +# lxc needs a toolchain w/ IPv6, threads, largefile +# +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set + +# +# polkit needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PWGEN is not set + +# +# quota needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y + +# +# util-linux needs a toolchain w/ largefile, wchar +# + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set + +# +# nano needs a toolchain w/ wchar +# +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_AT91BOOTSTRAP is not set +# BR2_TARGET_AT91BOOTSTRAP3 is not set +# BR2_TARGET_AT91DATAFLASHBOOT is not set +# BR2_TARGET_BAREBOX is not set + +# +# gummiboot needs a toolchain w/ largefile, wchar +# +# BR2_TARGET_LPC32XXCDL is not set +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/arm/little-endian/uclibc/armv5t-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24-thumb1.config b/buildroot-configs/arm/little-endian/uclibc/armv5t-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24-thumb1.config new file mode 100644 index 0000000..c7d7130 --- /dev/null +++ b/buildroot-configs/arm/little-endian/uclibc/armv5t-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24-thumb1.config @@ -0,0 +1,2109 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00245-gb7fcf3b Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="armv5te" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="arm926ej-s" +BR2_GCC_TARGET_FLOAT_ABI="soft" +BR2_GCC_TARGET_MODE="thumb" +BR2_ARCH_HAS_ATOMICS=y +BR2_ARM_CPU_MAYBE_HAS_VFPV2=y +BR2_ARM_CPU_HAS_THUMB=y +# BR2_arm920t is not set +# BR2_arm922t is not set +BR2_arm926t=y +# BR2_arm1136jf_s_r0 is not set +# BR2_arm1136jf_s_r1 is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +# BR2_cortex_a8 is not set +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +# BR2_arm1136jf_s is not set +BR2_ARM_EABI=y +# BR2_ARM_EABIHF is not set +BR2_ARM_SOFT_FLOAT=y +# BR2_ARM_FPU_VFPV2 is not set +# BR2_ARM_INSTRUCTIONS_ARM_CHOICE is not set +BR2_ARM_INSTRUCTIONS_THUMB=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_UCLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_PACKAGE_UCLIBC=y + +# +# uClibc Options +# +BR2_UCLIBC_VERSION_0_9_33=y +# BR2_UCLIBC_VERSION_SNAPSHOT is not set +BR2_UCLIBC_VERSION_STRING="0.9.33.2" +BR2_UCLIBC_CONFIG="package/uclibc/uClibc-0.9.33.config" +# BR2_TOOLCHAIN_BUILDROOT_LARGEFILE is not set +BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +# BR2_TOOLCHAIN_BUILDROOT_WCHAR is not set +# BR2_TOOLCHAIN_BUILDROOT_LOCALE is not set +# BR2_PTHREADS_NONE is not set +# BR2_PTHREADS is not set +# BR2_PTHREADS_OLD is not set +BR2_PTHREADS_NATIVE=y +# BR2_PTHREAD_DEBUG is not set +# BR2_TOOLCHAIN_BUILDROOT_USE_SSP is not set +# BR2_UCLIBC_INSTALL_UTILS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +BR2_UCLIBC_TARGET_ARCH="arm" +BR2_UCLIBC_ARM_BX=y + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_INET_IPV6=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_NEEDS_GETTEXT=y +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# + +# +# alsa-utils needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set + +# +# espeak needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_FAAD2 is not set + +# +# ffmpeg needs a toolchain w/ largefile, IPv6 +# + +# +# flac needs a toolchain w/ wchar +# + +# +# flite needs a toolchain w/ wchar +# + +# +# gstreamer 0.10 needs a toolchain w/ wchar, threads +# + +# +# gstreamer 1.x needs a toolchain w/ wchar, threads +# + +# +# jack2 needs a toolchain w/ largefile, threads, C++ +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set + +# +# mpd needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_MPG123 is not set + +# +# mplayer needs a toolchain w/ largefile +# +# BR2_PACKAGE_MUSEPACK is not set + +# +# ncmpc needs a toolchain w/ wchar, threads +# + +# +# on2-8170-libs needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_OPUS_TOOLS is not set + +# +# pulseaudio needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_SOX is not set + +# +# tstools needs a toolchain w/ largefile +# + +# +# twolame needs a toolchain w/ largefile +# + +# +# upmpdcli needs a toolchain w/ C++, largefile, threads +# + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +BR2_PACKAGE_XBMC_ARCH_SUPPORTS=y + +# +# xbmc needs a toolchain w/ C++, IPv6, largefile, threads, wchar +# + +# +# xbmc requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set + +# +# lz4 needs a toolchain w/ largefile +# + +# +# lzip needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set + +# +# dstat needs a toolchain w/ wchar +# +# BR2_PACKAGE_DUMA is not set + +# +# fio needs a toolchain w/ largefile, threads +# + +# +# gdb/gdbserver needs a toolchain w/ threads, threads debug +# +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# + +# +# latencytop needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# ltrace needs toolchain w/ largefile, wchar +# + +# +# lttng-modules needs a Linux kernel to be built +# + +# +# lttng-tools needs a toolchain w/ largefile, threads, wchar +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set + +# +# pax-utils needs a toolchain w/ largefile +# + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set + +# +# strace needs a toolchain w/ largefile +# +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set + +# +# trace-cmd needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set + +# +# cvs needs a toolchain w/ wchar +# +# BR2_PACKAGE_FLEX is not set + +# +# gettext needs a toolchain w/ wchar +# + +# +# git needs a toolchain w/ largefile +# +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set + +# +# tree needs a toolchain w/ wchar +# + +# +# Filesystem and flash utilities +# + +# +# btrfs-progs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set + +# +# curlftpfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# dosfstools needs a toolchain w/ largefile, wchar +# + +# +# e2fsprogs needs a toolchain w/ largefile, wchar +# + +# +# e2tools needs a toolchain w/ threads, largefile and wchar +# + +# +# ecryptfs-utils needs a toolchain w/ largefile, threads, wchar +# + +# +# exfat needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# exfat-utils needs a toolchain w/ largefile, wchar +# + +# +# f2fs-tools needs a toolchain w/ largefile, wchar +# + +# +# flashbench needs a toolchain w/ largefile +# + +# +# genext2fs needs a toolchain w/ largefile +# +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set + +# +# mmc-utils needs a toolchain w/ largefile, headers >= 3.0 +# +# BR2_PACKAGE_MTD is not set + +# +# mtools needs a toolchain w/ wchar +# + +# +# nfs-utils needs a toolchain w/ largefile, threads +# + +# +# ntfs-3g needs a toolchain w/ largefile, wchar, threads +# + +# +# simicsfs needs a Linux kernel to be built +# + +# +# squashfs needs a toolchain w/ largefile, threads +# + +# +# sshfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_SUNXI_TOOLS is not set + +# +# unionfs needs a toolchain w/ largefile, threads, dynamic library +# + +# +# xfsprogs needs a toolchain w/ largefile, wchar +# + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set + +# +# jhead needs a toolchain w/ wchar +# + +# +# rrdtool needs a toolchain w/ wchar +# + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set + +# +# fbterm needs a toolchain w/ C++, wchar, locale +# +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set + +# +# psplash needs a toolchain w/ wchar +# +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# + +# +# EFL needs a toolchain w/ wchar +# +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y + +# +# Qt5 needs a toolchain w/ wchar, IPv6, NPTL, C++ +# + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# + +# +# X.org needs a toolchain w/ wchar, threads, dynamic library +# + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# + +# +# avrdude needs a toolchain w/ threads, largefile, wchar +# + +# +# cdrkit needs a toolchain w/ largefile +# + +# +# cryptsetup needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_DBUS is not set + +# +# dmraid needs a toolchain w/ largefile, threads, dynamic library +# + +# +# dvb-apps utils needs a toolchain w/ largefile, threads, headers >= 3.3 +# + +# +# dvbsnoop needs a toolchain w/ largefile +# +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set + +# +# gptfdisk needs a toolchain w/ largefile, wchar, C++ +# + +# +# gvfs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set + +# +# lshw needs a toolchain w/ C++, largefile, wchar +# +# BR2_PACKAGE_LSUIO is not set + +# +# lvm2 needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set + +# +# memtester needs a toolchain w/ largefile +# + +# +# minicom needs a toolchain w/ wchar +# +# BR2_PACKAGE_NANOCOM is not set + +# +# neard needs a toolchain w/ wchar, threads +# + +# +# ofono needs a toolchain w/ wchar, threads +# + +# +# ola needs a toolchain w/ C++, threads, largefile, wchar +# + +# +# on2-8170-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# + +# +# parted needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set + +# +# pifmrds needs a toolchain w/ largefile +# +# BR2_PACKAGE_RNG_TOOLS is not set + +# +# rpi-userland needs a toolchain w/ C++, largefile, threads +# +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set + +# +# sg3-utils needs a toolchain w/ largefile, threads +# + +# +# sispmctl needs a toolchain w/ threads, wchar +# +# BR2_PACKAGE_SMARTMONTOOLS is not set + +# +# smstools3 needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set + +# +# sunxi-cedarx needs an (e)glibc toolchain +# + +# +# sunxi-mali needs an (e)glibc toolchain +# +# BR2_PACKAGE_SYSSTAT is not set + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# + +# +# udisks needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set + +# +# nodejs needs a toolchain w/ C++, IPv6, largefile, threads +# +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set + +# +# python needs a toolchain w/ wchar, threads +# + +# +# python3 needs a toolchain w/ wchar, threads +# + +# +# ruby needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set + +# +# libmpd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set + +# +# libsndfile needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set + +# +# taglib needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# + +# +# libarchive needs a toolchain w/ wchar +# +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# + +# +# gnutls needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set + +# +# libnss needs a toolchain w/ largefile, threads +# + +# +# libsecret needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# + +# +# redis needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# + +# +# gamin needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set + +# +# libfuse needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# + +# +# atk needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set + +# +# gdk-pixbuf needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set + +# +# libdrm needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set + +# +# librsvg needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set + +# +# libva needs a toolchain w/ largefile, threads, dynamic library +# + +# +# opencv needs a toolchain w/ C++, NPTL, wchar +# + +# +# pango needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# + +# +# libcec needs a toolchain w/ C++, wchar, threads, dynamic library +# +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set + +# +# libqmi needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set + +# +# libv4l needs a toolchain w/ largefile, threads and C++ +# +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# + +# +# neardal needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set + +# +# json-glib needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set + +# +# libxml++ needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set + +# +# xerces-c++ needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set + +# +# log4cplus needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LOG4CXX is not set + +# +# zlog needs a toolchain w/ threads, largefile, dynamic library +# + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set + +# +# libdvbsi++ needs a toolchain w/ C++, wchar, threads +# + +# +# libdvdnav needs a toolchain w/ dynamic library, largefile, threads +# + +# +# libdvdread needs a toolchain w/ dynamic library, largefile +# +# BR2_PACKAGE_LIBEBML is not set + +# +# libfslcodec needs an (e)glibc toolchain +# +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set + +# +# libmms needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set + +# +# libplayer needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set + +# +# cppzmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# czmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# filemq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set + +# +# glib-networking needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set + +# +# libmnl needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set + +# +# libnetfilter_acct needs a toolchain w/ largefile +# + +# +# libnetfilter_conntrack needs a toolchain w/ largefile +# + +# +# libnetfilter_cthelper needs a toolchain w/ largefile +# + +# +# libnetfilter_cttimout needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNFNETLINK is not set + +# +# libnftnl needs a toolchain w/ threads, IPv6, largefile +# +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set + +# +# libsoup needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set + +# +# libupnp needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set + +# +# openpgm needs a toolchain w/ wchar, threads, IPv6 +# +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set + +# +# thrift needs a toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_USBREDIR is not set + +# +# wvstreams needs a toolchain w/ C++, largefile +# + +# +# zeromq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zmqpp needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zyre needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set + +# +# armadillo needs a toolchain w/ C++, largefile +# + +# +# boost needs a toolchain w/ C++, largefile, threads +# + +# +# cblas/clapack needs a toolchain w/ largefile +# + +# +# cppcms needs a toolchain w/ C++, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EIGEN is not set + +# +# elfutils needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set + +# +# glibmm needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set + +# +# gtest needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set + +# +# libglib2 needs a toolchain w/ wchar, threads +# + +# +# libical needs a toolchain w/ wchar +# +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y + +# +# libnspr needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set + +# +# linux-pam needs a toolchain w/ wchar, locale, dynamic library +# + +# +# lttng-libust needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set + +# +# poco needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# + +# +# enchant needs a toolchain w/ C++, threads, wchar +# + +# +# icu needs a toolchain w/ C++, wchar, threads +# + +# +# libedit needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBICONV is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set + +# +# newt needs a toolchain w/ wchar +# +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set + +# +# shared-mime-info needs a toolchain w/ wchar, threads +# + +# +# snowball-init needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set + +# +# mutt needs a toolchain w/ wchar +# + +# +# Networking applications +# + +# +# aiccu needs a toolchain w/ IPv6, wchar, threads +# + +# +# aircrack-ng needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set + +# +# bluez-utils needs a toolchain w/ wchar, threads, dynamic library +# + +# +# bluez5-utils needs a toolchain w/ wchar, threads, IPv6, headers >= 3.4 +# +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set + +# +# connman needs a toolchain w/ IPv6, wchar, threads, resolver +# + +# +# conntrack-tools needs a toolchain w/ IPv6, largefile, threads +# +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set + +# +# gesftpserver needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set + +# +# httping needs a toolchain w/ wchar +# +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# + +# +# igmpproxy needs a toolchain w/ wchar +# +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# ipset needs a toolchain w/ largefile +# +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set + +# +# lftp requires a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set + +# +# minidlna needs a toolchain w/ largefile, IPv6, threads, wchar +# + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# + +# +# mongoose needs a toolchain w/ threads, largefile +# + +# +# mongrel2 needs a toolchain w/ C++, IPv6, threads, largefile, wchar +# +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set + +# +# nbd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# + +# +# nfacct needs a toolchain w/ largefile +# + +# +# nftables needs a toolchain w/ IPv6, largefile, threads, wchar, headers >= 3.4 +# +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set + +# +# rtorrent needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set + +# +# samba4 needs a toolchain w/ IPv6, wchar, largfile, threads +# +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set + +# +# spice server needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set + +# +# tvheadend needs a toolchain w/ largefile, IPv6, NPTL, headers >= 3.2 +# + +# +# udpcast needs a toolchain w/ largefile, threads +# + +# +# ulogd needs a toolchain w/ IPv6, largefile, dynamic library +# + +# +# ushare needs a toolchain w/ largefile, threads +# + +# +# ussp-push needs a toolchain w/ wchar, IPv6, threads, dynamic library +# +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set + +# +# wireshark needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_WPA_SUPPLICANT is not set + +# +# wvdial needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set + +# +# inotify-tools needs a toolchain w/ largefile +# +# BR2_PACKAGE_LOCKFILE_PROGS is not set + +# +# logrotate needs a toolchain w/ wchar +# +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# + +# +# acl needs a toolchain w/ largefile +# + +# +# attr needs a toolchain w/ largefile +# +# BR2_PACKAGE_CPULOAD is not set + +# +# ftop needs a toolchain w/ largefile +# +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set + +# +# lxc needs a toolchain w/ IPv6, threads, largefile +# +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set + +# +# polkit needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PWGEN is not set + +# +# quota needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y + +# +# util-linux needs a toolchain w/ largefile, wchar +# + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set + +# +# nano needs a toolchain w/ wchar +# +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_AT91BOOTSTRAP is not set +# BR2_TARGET_AT91BOOTSTRAP3 is not set +# BR2_TARGET_AT91DATAFLASHBOOT is not set +# BR2_TARGET_BAREBOX is not set + +# +# gummiboot needs a toolchain w/ largefile, wchar +# +# BR2_TARGET_LPC32XXCDL is not set +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/arm/little-endian/uclibc/armv7-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24-thumb2.config b/buildroot-configs/arm/little-endian/uclibc/armv7-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24-thumb2.config new file mode 100644 index 0000000..274e761 --- /dev/null +++ b/buildroot-configs/arm/little-endian/uclibc/armv7-el-uclibc0.9.33.2-gcc4.9.1-binutils2.24-thumb2.config @@ -0,0 +1,2110 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00245-gb7fcf3b Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="armv7-a" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="cortex-a8" +BR2_GCC_TARGET_FLOAT_ABI="soft" +BR2_GCC_TARGET_MODE="thumb" +BR2_ARCH_HAS_ATOMICS=y +BR2_ARM_CPU_HAS_NEON=y +BR2_ARM_CPU_HAS_VFPV2=y +BR2_ARM_CPU_HAS_VFPV3=y +BR2_ARM_CPU_HAS_THUMB2=y +# BR2_arm920t is not set +# BR2_arm922t is not set +# BR2_arm926t is not set +# BR2_arm1136jf_s_r0 is not set +# BR2_arm1136jf_s_r1 is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_cortex_a5 is not set +# BR2_cortex_a7 is not set +BR2_cortex_a8=y +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_fa526 is not set +# BR2_pj4 is not set +# BR2_strongarm is not set +# BR2_xscale is not set +# BR2_iwmmxt is not set +# BR2_arm1136jf_s is not set +BR2_ARM_EABI=y +# BR2_ARM_EABIHF is not set +BR2_ARM_SOFT_FLOAT=y +# BR2_ARM_FPU_VFPV2 is not set +# BR2_ARM_FPU_VFPV3 is not set +# BR2_ARM_FPU_VFPV3D16 is not set +# BR2_ARM_FPU_NEON is not set +# BR2_ARM_INSTRUCTIONS_ARM_CHOICE is not set +BR2_ARM_INSTRUCTIONS_THUMB2=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_UCLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_PACKAGE_UCLIBC=y + +# +# uClibc Options +# +BR2_UCLIBC_VERSION_0_9_33=y +# BR2_UCLIBC_VERSION_SNAPSHOT is not set +BR2_UCLIBC_VERSION_STRING="0.9.33.2" +BR2_UCLIBC_CONFIG="package/uclibc/uClibc-0.9.33.config" +# BR2_TOOLCHAIN_BUILDROOT_LARGEFILE is not set +BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +# BR2_TOOLCHAIN_BUILDROOT_WCHAR is not set +# BR2_TOOLCHAIN_BUILDROOT_LOCALE is not set +# BR2_PTHREADS_NONE is not set +# BR2_PTHREADS is not set +# BR2_PTHREADS_OLD is not set +BR2_PTHREADS_NATIVE=y +# BR2_PTHREAD_DEBUG is not set +# BR2_TOOLCHAIN_BUILDROOT_USE_SSP is not set +# BR2_UCLIBC_INSTALL_UTILS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +BR2_UCLIBC_TARGET_ARCH="arm" +BR2_UCLIBC_ARM_BX=y + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_INET_IPV6=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_NEEDS_GETTEXT=y +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# + +# +# alsa-utils needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set + +# +# espeak needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_FAAD2 is not set + +# +# ffmpeg needs a toolchain w/ largefile, IPv6 +# + +# +# flac needs a toolchain w/ wchar +# + +# +# flite needs a toolchain w/ wchar +# + +# +# gstreamer 0.10 needs a toolchain w/ wchar, threads +# + +# +# gstreamer 1.x needs a toolchain w/ wchar, threads +# + +# +# jack2 needs a toolchain w/ largefile, threads, C++ +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set + +# +# mpd needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_MPG123 is not set + +# +# mplayer needs a toolchain w/ largefile +# +# BR2_PACKAGE_MUSEPACK is not set + +# +# ncmpc needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_OPUS_TOOLS is not set + +# +# pulseaudio needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TIDSP_BINARIES is not set + +# +# tstools needs a toolchain w/ largefile +# + +# +# twolame needs a toolchain w/ largefile +# + +# +# upmpdcli needs a toolchain w/ C++, largefile, threads +# + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +BR2_PACKAGE_XBMC_ARCH_SUPPORTS=y + +# +# xbmc needs a toolchain w/ C++, IPv6, largefile, threads, wchar +# + +# +# xbmc requires an OpenGL ES and EGL backend +# +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set + +# +# lz4 needs a toolchain w/ largefile +# + +# +# lzip needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set + +# +# dstat needs a toolchain w/ wchar +# +# BR2_PACKAGE_DUMA is not set + +# +# fio needs a toolchain w/ largefile, threads +# + +# +# gdb/gdbserver needs a toolchain w/ threads, threads debug +# +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# + +# +# latencytop needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# ltrace needs toolchain w/ largefile, wchar +# + +# +# lttng-modules needs a Linux kernel to be built +# + +# +# lttng-tools needs a toolchain w/ largefile, threads, wchar +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set + +# +# pax-utils needs a toolchain w/ largefile +# + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set + +# +# strace needs a toolchain w/ largefile +# +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set + +# +# trace-cmd needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set + +# +# cvs needs a toolchain w/ wchar +# +# BR2_PACKAGE_FLEX is not set + +# +# gettext needs a toolchain w/ wchar +# + +# +# git needs a toolchain w/ largefile +# +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set + +# +# tree needs a toolchain w/ wchar +# + +# +# Filesystem and flash utilities +# + +# +# btrfs-progs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set + +# +# curlftpfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# dosfstools needs a toolchain w/ largefile, wchar +# + +# +# e2fsprogs needs a toolchain w/ largefile, wchar +# + +# +# e2tools needs a toolchain w/ threads, largefile and wchar +# + +# +# ecryptfs-utils needs a toolchain w/ largefile, threads, wchar +# + +# +# exfat needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# exfat-utils needs a toolchain w/ largefile, wchar +# + +# +# f2fs-tools needs a toolchain w/ largefile, wchar +# + +# +# flashbench needs a toolchain w/ largefile +# + +# +# genext2fs needs a toolchain w/ largefile +# +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_MAKEDEVS is not set + +# +# mmc-utils needs a toolchain w/ largefile, headers >= 3.0 +# +# BR2_PACKAGE_MTD is not set + +# +# mtools needs a toolchain w/ wchar +# + +# +# nfs-utils needs a toolchain w/ largefile, threads +# + +# +# ntfs-3g needs a toolchain w/ largefile, wchar, threads +# + +# +# simicsfs needs a Linux kernel to be built +# + +# +# squashfs needs a toolchain w/ largefile, threads +# + +# +# sshfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_SUNXI_TOOLS is not set + +# +# unionfs needs a toolchain w/ largefile, threads, dynamic library +# + +# +# xfsprogs needs a toolchain w/ largefile, wchar +# + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set + +# +# jhead needs a toolchain w/ wchar +# + +# +# rrdtool needs a toolchain w/ wchar +# + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set + +# +# fbterm needs a toolchain w/ C++, wchar, locale +# +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set + +# +# psplash needs a toolchain w/ wchar +# +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# + +# +# EFL needs a toolchain w/ wchar +# +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y + +# +# Qt5 needs a toolchain w/ wchar, IPv6, NPTL, C++ +# + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# + +# +# X.org needs a toolchain w/ wchar, threads, dynamic library +# + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# a10disp needs a Linux kernel to be built +# + +# +# avrdude needs a toolchain w/ threads, largefile, wchar +# + +# +# cdrkit needs a toolchain w/ largefile +# + +# +# cryptsetup needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_DBUS is not set + +# +# dmraid needs a toolchain w/ largefile, threads, dynamic library +# + +# +# dvb-apps utils needs a toolchain w/ largefile, threads, headers >= 3.3 +# + +# +# dvbsnoop needs a toolchain w/ largefile +# +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set + +# +# gptfdisk needs a toolchain w/ largefile, wchar, C++ +# + +# +# gvfs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set + +# +# lshw needs a toolchain w/ C++, largefile, wchar +# +# BR2_PACKAGE_LSUIO is not set + +# +# lvm2 needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set + +# +# memtester needs a toolchain w/ largefile +# + +# +# minicom needs a toolchain w/ wchar +# +# BR2_PACKAGE_NANOCOM is not set + +# +# neard needs a toolchain w/ wchar, threads +# + +# +# ofono needs a toolchain w/ wchar, threads +# + +# +# ola needs a toolchain w/ C++, threads, largefile, wchar +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux needs a Linux kernel to be built +# + +# +# owl-linux is only supported on ARM9 architecture +# + +# +# parted needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set + +# +# pifmrds needs a toolchain w/ largefile +# +# BR2_PACKAGE_RNG_TOOLS is not set + +# +# rpi-userland needs a toolchain w/ C++, largefile, threads +# +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set + +# +# sg3-utils needs a toolchain w/ largefile, threads +# + +# +# sispmctl needs a toolchain w/ threads, wchar +# +# BR2_PACKAGE_SMARTMONTOOLS is not set + +# +# smstools3 needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set + +# +# sunxi-cedarx needs an (e)glibc toolchain +# + +# +# sunxi-mali needs an (e)glibc toolchain +# +# BR2_PACKAGE_SYSSTAT is not set + +# +# ti-gfx needs an (e)glibc toolchain and a Linux kernel to be built +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# + +# +# udisks needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set + +# +# nodejs needs a toolchain w/ C++, IPv6, largefile, threads +# +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set + +# +# python needs a toolchain w/ wchar, threads +# + +# +# python3 needs a toolchain w/ wchar, threads +# + +# +# ruby needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set + +# +# libmpd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set + +# +# libsndfile needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set + +# +# taglib needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# + +# +# libarchive needs a toolchain w/ wchar +# +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# + +# +# gnutls needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set + +# +# libnss needs a toolchain w/ largefile, threads +# + +# +# libsecret needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# + +# +# redis needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# + +# +# gamin needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set + +# +# libfuse needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# + +# +# atk needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set + +# +# gdk-pixbuf needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set + +# +# libdrm needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set + +# +# librsvg needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set + +# +# libva needs a toolchain w/ largefile, threads, dynamic library +# + +# +# opencv needs a toolchain w/ C++, NPTL, wchar +# + +# +# pango needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# + +# +# libcec needs a toolchain w/ C++, wchar, threads, dynamic library +# +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set + +# +# libqmi needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set + +# +# libv4l needs a toolchain w/ largefile, threads and C++ +# +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# ne10 needs a toolchain w/ neon +# + +# +# neardal needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set + +# +# json-glib needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set + +# +# libxml++ needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set + +# +# xerces-c++ needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set + +# +# log4cplus needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LOG4CXX is not set + +# +# zlog needs a toolchain w/ threads, largefile, dynamic library +# + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set + +# +# libdvbsi++ needs a toolchain w/ C++, wchar, threads +# + +# +# libdvdnav needs a toolchain w/ dynamic library, largefile, threads +# + +# +# libdvdread needs a toolchain w/ dynamic library, largefile +# +# BR2_PACKAGE_LIBEBML is not set + +# +# libfslcodec needs an (e)glibc toolchain +# +# BR2_PACKAGE_LIBFSLPARSER is not set + +# +# libfslvpuwrap needs an imx-specific Linux kernel to be built +# +# BR2_PACKAGE_LIBMATROSKA is not set + +# +# libmms needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set + +# +# libplayer needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set + +# +# cppzmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# czmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# filemq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set + +# +# glib-networking needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set + +# +# libmnl needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set + +# +# libnetfilter_acct needs a toolchain w/ largefile +# + +# +# libnetfilter_conntrack needs a toolchain w/ largefile +# + +# +# libnetfilter_cthelper needs a toolchain w/ largefile +# + +# +# libnetfilter_cttimout needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNFNETLINK is not set + +# +# libnftnl needs a toolchain w/ threads, IPv6, largefile +# +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set + +# +# libsoup needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set + +# +# libupnp needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set + +# +# openpgm needs a toolchain w/ wchar, threads, IPv6 +# +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set + +# +# thrift needs a toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_USBREDIR is not set + +# +# wvstreams needs a toolchain w/ C++, largefile +# + +# +# zeromq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zmqpp needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zyre needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set + +# +# armadillo needs a toolchain w/ C++, largefile +# + +# +# boost needs a toolchain w/ C++, largefile, threads +# + +# +# cblas/clapack needs a toolchain w/ largefile +# + +# +# cppcms needs a toolchain w/ C++, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EIGEN is not set + +# +# elfutils needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set + +# +# glibmm needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set + +# +# gtest needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set + +# +# libglib2 needs a toolchain w/ wchar, threads +# + +# +# libical needs a toolchain w/ wchar +# +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y + +# +# libnspr needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set + +# +# linux-pam needs a toolchain w/ wchar, locale, dynamic library +# + +# +# lttng-libust needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set + +# +# poco needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# + +# +# enchant needs a toolchain w/ C++, threads, wchar +# + +# +# icu needs a toolchain w/ C++, wchar, threads +# + +# +# libedit needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBICONV is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set + +# +# newt needs a toolchain w/ wchar +# +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set + +# +# shared-mime-info needs a toolchain w/ wchar, threads +# + +# +# snowball-init needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set + +# +# mutt needs a toolchain w/ wchar +# + +# +# Networking applications +# + +# +# aiccu needs a toolchain w/ IPv6, wchar, threads +# + +# +# aircrack-ng needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set + +# +# bluez-utils needs a toolchain w/ wchar, threads, dynamic library +# + +# +# bluez5-utils needs a toolchain w/ wchar, threads, IPv6, headers >= 3.4 +# +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set + +# +# connman needs a toolchain w/ IPv6, wchar, threads, resolver +# + +# +# conntrack-tools needs a toolchain w/ IPv6, largefile, threads +# +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set + +# +# gesftpserver needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set + +# +# httping needs a toolchain w/ wchar +# +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# + +# +# igmpproxy needs a toolchain w/ wchar +# +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# ipset needs a toolchain w/ largefile +# +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set + +# +# lftp requires a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set + +# +# minidlna needs a toolchain w/ largefile, IPv6, threads, wchar +# + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# + +# +# mongoose needs a toolchain w/ threads, largefile +# + +# +# mongrel2 needs a toolchain w/ C++, IPv6, threads, largefile, wchar +# +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set + +# +# nbd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# + +# +# nfacct needs a toolchain w/ largefile +# + +# +# nftables needs a toolchain w/ IPv6, largefile, threads, wchar, headers >= 3.4 +# +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set + +# +# rtorrent needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set + +# +# samba4 needs a toolchain w/ IPv6, wchar, largfile, threads +# +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set + +# +# spice server needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set + +# +# tvheadend needs a toolchain w/ largefile, IPv6, NPTL, headers >= 3.2 +# + +# +# udpcast needs a toolchain w/ largefile, threads +# + +# +# ulogd needs a toolchain w/ IPv6, largefile, dynamic library +# + +# +# ushare needs a toolchain w/ largefile, threads +# + +# +# ussp-push needs a toolchain w/ wchar, IPv6, threads, dynamic library +# +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set + +# +# wireshark needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_WPA_SUPPLICANT is not set + +# +# wvdial needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set + +# +# inotify-tools needs a toolchain w/ largefile +# +# BR2_PACKAGE_LOCKFILE_PROGS is not set + +# +# logrotate needs a toolchain w/ wchar +# +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# + +# +# acl needs a toolchain w/ largefile +# + +# +# attr needs a toolchain w/ largefile +# +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_DSP_TOOLS is not set + +# +# ftop needs a toolchain w/ largefile +# +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set + +# +# lxc needs a toolchain w/ IPv6, threads, largefile +# +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUT is not set + +# +# polkit needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PWGEN is not set + +# +# quota needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y + +# +# util-linux needs a toolchain w/ largefile, wchar +# + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set + +# +# nano needs a toolchain w/ wchar +# +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set + +# +# gummiboot needs a toolchain w/ largefile, wchar +# +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_UBOOT is not set +# BR2_TARGET_XLOADER is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/big-endian/glibc/mips16-eb-gcc4.9-glibc2.20-binutils2.24.config b/buildroot-configs/mips/big-endian/glibc/mips16-eb-gcc4.9-glibc2.20-binutils2.24.config new file mode 100644 index 0000000..b2fe0d3 --- /dev/null +++ b/buildroot-configs/mips/big-endian/glibc/mips16-eb-gcc4.9-glibc2.20-binutils2.24.config @@ -0,0 +1,1407 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +BR2_mips=y +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mips" +BR2_ENDIAN="BIG" +BR2_GCC_TARGET_ARCH="mips32" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +BR2_mips_32=y +# BR2_mips_32r2 is not set +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y +# BR2_GOOGLE_BREAKPAD_ENABLE is not set +# BR2_ENABLE_SSP is not set +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc" +BR2_PACKAGE_GLIBC=y +# BR2_GLIBC_VERSION_2_19 is not set +BR2_GLIBC_VERSION_2_20=y +BR2_GLIBC_VERSION_STRING="2.20" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_TOOLCHAIN_HAS_NATIVE_RPC=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os -mips16" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_SYSTEMD is not set +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set +# BR2_PACKAGE_VLC is not set +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_GOOGLE_BREAKPAD is not set +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set +# BR2_PACKAGE_LTP_TESTSUITE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +BR2_PACKAGE_ZLIB=y + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +BR2_PACKAGE_OPENSSL=y +# BR2_PACKAGE_OPENSSL_BIN is not set +# BR2_PACKAGE_OPENSSL_ENGINES is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set +# BR2_PACKAGE_POSTGRESQL is not set +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set +# BR2_PACKAGE_LIBCGROUP is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUNWIND is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUMACTL is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/big-endian/glibc/mips32-eb-gcc4.9-glibc2.20-binutils2.24.config b/buildroot-configs/mips/big-endian/glibc/mips32-eb-gcc4.9-glibc2.20-binutils2.24.config new file mode 100644 index 0000000..49c4ab3 --- /dev/null +++ b/buildroot-configs/mips/big-endian/glibc/mips32-eb-gcc4.9-glibc2.20-binutils2.24.config @@ -0,0 +1,1407 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +BR2_mips=y +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mips" +BR2_ENDIAN="BIG" +BR2_GCC_TARGET_ARCH="mips32" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +BR2_mips_32=y +# BR2_mips_32r2 is not set +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y +# BR2_GOOGLE_BREAKPAD_ENABLE is not set +# BR2_ENABLE_SSP is not set +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc" +BR2_PACKAGE_GLIBC=y +# BR2_GLIBC_VERSION_2_19 is not set +BR2_GLIBC_VERSION_2_20=y +BR2_GLIBC_VERSION_STRING="2.20" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_TOOLCHAIN_HAS_NATIVE_RPC=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_SYSTEMD is not set +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set +# BR2_PACKAGE_VLC is not set +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_GOOGLE_BREAKPAD is not set +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set +# BR2_PACKAGE_LTP_TESTSUITE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +BR2_PACKAGE_ZLIB=y + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +BR2_PACKAGE_OPENSSL=y +# BR2_PACKAGE_OPENSSL_BIN is not set +# BR2_PACKAGE_OPENSSL_ENGINES is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set +# BR2_PACKAGE_POSTGRESQL is not set +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set +# BR2_PACKAGE_LIBCGROUP is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUNWIND is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUMACTL is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/big-endian/glibc/mips32r2-eb-gcc4.9-glibc2.20-binutils2.24.config b/buildroot-configs/mips/big-endian/glibc/mips32r2-eb-gcc4.9-glibc2.20-binutils2.24.config new file mode 100644 index 0000000..a496023 --- /dev/null +++ b/buildroot-configs/mips/big-endian/glibc/mips32r2-eb-gcc4.9-glibc2.20-binutils2.24.config @@ -0,0 +1,1407 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +BR2_mips=y +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mips" +BR2_ENDIAN="BIG" +BR2_GCC_TARGET_ARCH="mips32r2" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +# BR2_mips_32 is not set +BR2_mips_32r2=y +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y +# BR2_GOOGLE_BREAKPAD_ENABLE is not set +# BR2_ENABLE_SSP is not set +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc" +BR2_PACKAGE_GLIBC=y +# BR2_GLIBC_VERSION_2_19 is not set +BR2_GLIBC_VERSION_2_20=y +BR2_GLIBC_VERSION_STRING="2.20" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_TOOLCHAIN_HAS_NATIVE_RPC=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_SYSTEMD is not set +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set +# BR2_PACKAGE_VLC is not set +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_GOOGLE_BREAKPAD is not set +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set +# BR2_PACKAGE_LTP_TESTSUITE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +BR2_PACKAGE_ZLIB=y + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +BR2_PACKAGE_OPENSSL=y +# BR2_PACKAGE_OPENSSL_BIN is not set +# BR2_PACKAGE_OPENSSL_ENGINES is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set +# BR2_PACKAGE_POSTGRESQL is not set +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set +# BR2_PACKAGE_LIBCGROUP is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUNWIND is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUMACTL is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/big-endian/musl/mips32-eb-gcc4.9-musl-binutils2.24.config b/buildroot-configs/mips/big-endian/musl/mips32-eb-gcc4.9-musl-binutils2.24.config new file mode 100644 index 0000000..e68ae9a --- /dev/null +++ b/buildroot-configs/mips/big-endian/musl/mips32-eb-gcc4.9-musl-binutils2.24.config @@ -0,0 +1,1417 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +BR2_mips=y +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mips" +BR2_ENDIAN="BIG" +BR2_GCC_TARGET_ARCH="mips32" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +BR2_mips_32=y +# BR2_mips_32r2 is not set +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_MUSL=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_LIBC="musl" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUMACTL is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/big-endian/musl/mips32r2-eb-gcc4.9-musl-binutils2.24.config b/buildroot-configs/mips/big-endian/musl/mips32r2-eb-gcc4.9-musl-binutils2.24.config new file mode 100644 index 0000000..06d33d4 --- /dev/null +++ b/buildroot-configs/mips/big-endian/musl/mips32r2-eb-gcc4.9-musl-binutils2.24.config @@ -0,0 +1,1417 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +BR2_mips=y +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mips" +BR2_ENDIAN="BIG" +BR2_GCC_TARGET_ARCH="mips32r2" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +# BR2_mips_32 is not set +BR2_mips_32r2=y +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_MUSL=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_LIBC="musl" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_POCO is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUMACTL is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/big-endian/uclibc/mips16-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config b/buildroot-configs/mips/big-endian/uclibc/mips16-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config new file mode 100644 index 0000000..07b1161 --- /dev/null +++ b/buildroot-configs/mips/big-endian/uclibc/mips16-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config @@ -0,0 +1,2004 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +BR2_mips=y +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mips" +BR2_ENDIAN="BIG" +BR2_GCC_TARGET_ARCH="mips32" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +BR2_mips_32=y +# BR2_mips_32r2 is not set +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_UCLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_PACKAGE_UCLIBC=y + +# +# uClibc Options +# +BR2_UCLIBC_VERSION_0_9_33=y +# BR2_UCLIBC_VERSION_SNAPSHOT is not set +BR2_UCLIBC_VERSION_STRING="0.9.33.2" +BR2_UCLIBC_CONFIG="package/uclibc/uClibc-0.9.33.config" +# BR2_TOOLCHAIN_BUILDROOT_LARGEFILE is not set +BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +# BR2_TOOLCHAIN_BUILDROOT_WCHAR is not set +# BR2_TOOLCHAIN_BUILDROOT_LOCALE is not set +# BR2_PTHREADS_NONE is not set +# BR2_PTHREADS is not set +# BR2_PTHREADS_OLD is not set +BR2_PTHREADS_NATIVE=y +# BR2_PTHREAD_DEBUG is not set +# BR2_TOOLCHAIN_BUILDROOT_USE_SSP is not set +# BR2_UCLIBC_INSTALL_UTILS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +BR2_UCLIBC_TARGET_ARCH="mips" +BR2_UCLIBC_MIPS_ABI="O32" +BR2_UCLIBC_MIPS_ISA="MIPS32" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_INET_IPV6=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_NEEDS_GETTEXT=y +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os -mips16" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# + +# +# alsa-utils needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set + +# +# espeak needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_FAAD2 is not set + +# +# ffmpeg needs a toolchain w/ largefile, IPv6 +# + +# +# flac needs a toolchain w/ wchar +# + +# +# flite needs a toolchain w/ wchar +# + +# +# gstreamer 0.10 needs a toolchain w/ wchar, threads +# + +# +# gstreamer 1.x needs a toolchain w/ wchar, threads +# + +# +# jack2 needs a toolchain w/ largefile, threads, C++ +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set + +# +# mpd needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_MPG123 is not set + +# +# mplayer needs a toolchain w/ largefile +# +# BR2_PACKAGE_MUSEPACK is not set + +# +# ncmpc needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_OPUS_TOOLS is not set + +# +# pulseaudio needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_SOX is not set + +# +# tstools needs a toolchain w/ largefile +# + +# +# twolame needs a toolchain w/ largefile +# + +# +# upmpdcli needs a toolchain w/ C++, largefile, threads +# + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set + +# +# lz4 needs a toolchain w/ largefile +# + +# +# lzip needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set + +# +# dstat needs a toolchain w/ wchar +# +# BR2_PACKAGE_DUMA is not set + +# +# fio needs a toolchain w/ largefile, threads +# + +# +# gdb/gdbserver needs a toolchain w/ threads, threads debug +# +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# + +# +# latencytop needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# ltrace needs toolchain w/ largefile, wchar +# + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set + +# +# pax-utils needs a toolchain w/ largefile +# + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set + +# +# rt-tests needs an (e)glibc toolchain +# + +# +# strace needs a toolchain w/ largefile +# + +# +# strace is not supported on MIPS using a uClibc toolchain +# +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set + +# +# trace-cmd needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set + +# +# cvs needs a toolchain w/ wchar +# +# BR2_PACKAGE_FLEX is not set + +# +# gettext needs a toolchain w/ wchar +# + +# +# git needs a toolchain w/ largefile +# +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set + +# +# tree needs a toolchain w/ wchar +# + +# +# Filesystem and flash utilities +# + +# +# btrfs-progs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set + +# +# curlftpfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# dosfstools needs a toolchain w/ largefile, wchar +# + +# +# e2fsprogs needs a toolchain w/ largefile, wchar +# + +# +# e2tools needs a toolchain w/ threads, largefile and wchar +# + +# +# ecryptfs-utils needs a toolchain w/ largefile, threads, wchar +# + +# +# exfat needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# exfat-utils needs a toolchain w/ largefile, wchar +# + +# +# f2fs-tools needs a toolchain w/ largefile, wchar +# + +# +# flashbench needs a toolchain w/ largefile +# + +# +# genext2fs needs a toolchain w/ largefile +# +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set + +# +# mmc-utils needs a toolchain w/ largefile, headers >= 3.0 +# +# BR2_PACKAGE_MTD is not set + +# +# mtools needs a toolchain w/ wchar +# + +# +# nfs-utils needs a toolchain w/ largefile, threads +# + +# +# ntfs-3g needs a toolchain w/ largefile, wchar, threads +# + +# +# simicsfs needs a Linux kernel to be built +# + +# +# squashfs needs a toolchain w/ largefile, threads +# + +# +# sshfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# unionfs needs a toolchain w/ largefile, threads, dynamic library +# + +# +# xfsprogs needs a toolchain w/ largefile, wchar +# + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set + +# +# jhead needs a toolchain w/ wchar +# + +# +# rrdtool needs a toolchain w/ wchar +# + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set + +# +# fbterm needs a toolchain w/ C++, wchar, locale +# +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set + +# +# psplash needs a toolchain w/ wchar +# +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# + +# +# EFL needs a toolchain w/ wchar +# +# BR2_PACKAGE_QT is not set + +# +# Qt5 needs a toolchain w/ wchar, IPv6, NPTL, C++ +# + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# + +# +# X.org needs a toolchain w/ wchar, threads, dynamic library +# + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# avrdude needs a toolchain w/ threads, largefile, wchar +# + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# + +# +# cdrkit needs a toolchain w/ largefile +# + +# +# cryptsetup needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_DBUS is not set + +# +# dmraid needs a toolchain w/ largefile, threads, dynamic library +# + +# +# dvb-apps utils needs a toolchain w/ largefile, threads, headers >= 3.3 +# + +# +# dvbsnoop needs a toolchain w/ largefile +# +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set + +# +# gptfdisk needs a toolchain w/ largefile, wchar, C++ +# + +# +# gvfs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set + +# +# lshw needs a toolchain w/ C++, largefile, wchar +# +# BR2_PACKAGE_LSUIO is not set + +# +# lvm2 needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set + +# +# memtester needs a toolchain w/ largefile +# + +# +# minicom needs a toolchain w/ wchar +# +# BR2_PACKAGE_NANOCOM is not set + +# +# neard needs a toolchain w/ wchar, threads +# + +# +# ofono needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# parted needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set + +# +# sg3-utils needs a toolchain w/ largefile, threads +# + +# +# sispmctl needs a toolchain w/ threads, wchar +# +# BR2_PACKAGE_SMARTMONTOOLS is not set + +# +# smstools3 needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# + +# +# udisks needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set + +# +# python needs a toolchain w/ wchar, threads +# + +# +# python3 needs a toolchain w/ wchar, threads +# + +# +# ruby needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set + +# +# libmpd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set + +# +# libsndfile needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set + +# +# taglib needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# + +# +# libarchive needs a toolchain w/ wchar +# +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# + +# +# gnutls needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set + +# +# libnss needs a toolchain w/ largefile, threads +# + +# +# libsecret needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# + +# +# redis needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# + +# +# gamin needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set + +# +# libfuse needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# + +# +# atk needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set + +# +# gdk-pixbuf needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set + +# +# libdrm needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set + +# +# librsvg needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set + +# +# libva needs a toolchain w/ largefile, threads, dynamic library +# + +# +# opencv needs a toolchain w/ C++, NPTL, wchar +# + +# +# pango needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# + +# +# libcec needs a toolchain w/ C++, wchar, threads, dynamic library +# +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set + +# +# libqmi needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set + +# +# libv4l needs a toolchain w/ largefile, threads and C++ +# +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# neardal needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set + +# +# json-glib needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set + +# +# libxml++ needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set + +# +# xerces-c++ needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set + +# +# log4cplus needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LOG4CXX is not set + +# +# zlog needs a toolchain w/ threads, largefile, dynamic library +# + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set + +# +# libdvbsi++ needs a toolchain w/ C++, wchar, threads +# + +# +# libdvdnav needs a toolchain w/ dynamic library, largefile, threads +# + +# +# libdvdread needs a toolchain w/ dynamic library, largefile +# +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set + +# +# libmms needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set + +# +# libplayer needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set + +# +# cppzmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# czmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# filemq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set + +# +# glib-networking needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set + +# +# libmnl needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set + +# +# libnetfilter_acct needs a toolchain w/ largefile +# + +# +# libnetfilter_conntrack needs a toolchain w/ largefile +# + +# +# libnetfilter_cthelper needs a toolchain w/ largefile +# + +# +# libnetfilter_cttimout needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNFNETLINK is not set + +# +# libnftnl needs a toolchain w/ threads, IPv6, largefile +# +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set + +# +# libsoup needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set + +# +# libupnp needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set + +# +# openpgm needs a toolchain w/ wchar, threads, IPv6 +# +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set + +# +# thrift needs a toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_USBREDIR is not set + +# +# wvstreams needs a toolchain w/ C++, largefile +# + +# +# zeromq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zmqpp needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zyre needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set + +# +# boost needs a toolchain w/ C++, largefile, threads +# + +# +# cppcms needs a toolchain w/ C++, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EIGEN is not set + +# +# elfutils needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set + +# +# glibmm needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set + +# +# gtest needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set + +# +# libglib2 needs a toolchain w/ wchar, threads +# + +# +# libical needs a toolchain w/ wchar +# +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y + +# +# libnspr needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUV is not set + +# +# linux-pam needs a toolchain w/ wchar, locale, dynamic library +# +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set + +# +# poco needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# + +# +# enchant needs a toolchain w/ C++, threads, wchar +# + +# +# icu needs a toolchain w/ C++, wchar, threads +# + +# +# libedit needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBICONV is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set + +# +# newt needs a toolchain w/ wchar +# +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set + +# +# shared-mime-info needs a toolchain w/ wchar, threads +# + +# +# snowball-init needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set + +# +# mutt needs a toolchain w/ wchar +# + +# +# Networking applications +# + +# +# aiccu needs a toolchain w/ IPv6, wchar, threads +# + +# +# aircrack-ng needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set + +# +# bluez-utils needs a toolchain w/ wchar, threads, dynamic library +# + +# +# bluez5-utils needs a toolchain w/ wchar, threads, IPv6, headers >= 3.4 +# +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set + +# +# connman needs a toolchain w/ IPv6, wchar, threads, resolver +# + +# +# conntrack-tools needs a toolchain w/ IPv6, largefile, threads +# +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set + +# +# gesftpserver needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set + +# +# httping needs a toolchain w/ wchar +# +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# + +# +# igmpproxy needs a toolchain w/ wchar +# +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# ipset needs a toolchain w/ largefile +# +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set + +# +# lftp requires a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set + +# +# minidlna needs a toolchain w/ largefile, IPv6, threads, wchar +# + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# + +# +# mongoose needs a toolchain w/ threads, largefile +# +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set + +# +# nbd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# + +# +# nfacct needs a toolchain w/ largefile +# + +# +# nftables needs a toolchain w/ IPv6, largefile, threads, wchar, headers >= 3.4 +# +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set + +# +# rtorrent needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set + +# +# samba4 needs a toolchain w/ IPv6, wchar, largfile, threads +# +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set + +# +# spice server needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set + +# +# tvheadend needs a toolchain w/ largefile, IPv6, NPTL, headers >= 3.2 +# + +# +# udpcast needs a toolchain w/ largefile, threads +# + +# +# ulogd needs a toolchain w/ IPv6, largefile, dynamic library +# + +# +# ushare needs a toolchain w/ largefile, threads +# + +# +# ussp-push needs a toolchain w/ wchar, IPv6, threads, dynamic library +# +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set + +# +# wireshark needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_WPA_SUPPLICANT is not set + +# +# wvdial needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set + +# +# inotify-tools needs a toolchain w/ largefile +# +# BR2_PACKAGE_LOCKFILE_PROGS is not set + +# +# logrotate needs a toolchain w/ wchar +# +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# + +# +# acl needs a toolchain w/ largefile +# + +# +# attr needs a toolchain w/ largefile +# +# BR2_PACKAGE_CPULOAD is not set + +# +# ftop needs a toolchain w/ largefile +# +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set + +# +# lxc needs a toolchain w/ IPv6, threads, largefile +# +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set + +# +# numactl needs a toolchain w/ largefile +# +# BR2_PACKAGE_NUT is not set + +# +# polkit needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PWGEN is not set + +# +# quota needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y + +# +# util-linux needs a toolchain w/ largefile, wchar +# + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set + +# +# nano needs a toolchain w/ wchar +# +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set + +# +# gummiboot needs a toolchain w/ largefile, wchar +# +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/big-endian/uclibc/mips32-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config b/buildroot-configs/mips/big-endian/uclibc/mips32-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config new file mode 100644 index 0000000..777a4a7 --- /dev/null +++ b/buildroot-configs/mips/big-endian/uclibc/mips32-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config @@ -0,0 +1,2003 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +BR2_mips=y +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mips" +BR2_ENDIAN="BIG" +BR2_GCC_TARGET_ARCH="mips32" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +BR2_mips_32=y +# BR2_mips_32r2 is not set +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_UCLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_PACKAGE_UCLIBC=y + +# +# uClibc Options +# +BR2_UCLIBC_VERSION_0_9_33=y +# BR2_UCLIBC_VERSION_SNAPSHOT is not set +BR2_UCLIBC_VERSION_STRING="0.9.33.2" +BR2_UCLIBC_CONFIG="package/uclibc/uClibc-0.9.33.config" +# BR2_TOOLCHAIN_BUILDROOT_LARGEFILE is not set +BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +# BR2_TOOLCHAIN_BUILDROOT_WCHAR is not set +# BR2_TOOLCHAIN_BUILDROOT_LOCALE is not set +# BR2_PTHREADS_NONE is not set +# BR2_PTHREADS is not set +# BR2_PTHREADS_OLD is not set +BR2_PTHREADS_NATIVE=y +# BR2_PTHREAD_DEBUG is not set +# BR2_TOOLCHAIN_BUILDROOT_USE_SSP is not set +# BR2_UCLIBC_INSTALL_UTILS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +BR2_UCLIBC_TARGET_ARCH="mips" +BR2_UCLIBC_MIPS_ABI="O32" +BR2_UCLIBC_MIPS_ISA="MIPS32" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_INET_IPV6=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_NEEDS_GETTEXT=y +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# + +# +# alsa-utils needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set + +# +# espeak needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_FAAD2 is not set + +# +# ffmpeg needs a toolchain w/ largefile, IPv6 +# + +# +# flac needs a toolchain w/ wchar +# + +# +# flite needs a toolchain w/ wchar +# + +# +# gstreamer 0.10 needs a toolchain w/ wchar, threads +# + +# +# gstreamer 1.x needs a toolchain w/ wchar, threads +# + +# +# jack2 needs a toolchain w/ largefile, threads, C++ +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set + +# +# mpd needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_MPG123 is not set + +# +# mplayer needs a toolchain w/ largefile +# +# BR2_PACKAGE_MUSEPACK is not set + +# +# ncmpc needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_OPUS_TOOLS is not set + +# +# pulseaudio needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_SOX is not set + +# +# tstools needs a toolchain w/ largefile +# + +# +# twolame needs a toolchain w/ largefile +# + +# +# upmpdcli needs a toolchain w/ C++, largefile, threads +# + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set + +# +# lz4 needs a toolchain w/ largefile +# + +# +# lzip needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set + +# +# dstat needs a toolchain w/ wchar +# +# BR2_PACKAGE_DUMA is not set + +# +# fio needs a toolchain w/ largefile, threads +# + +# +# gdb/gdbserver needs a toolchain w/ threads, threads debug +# +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# + +# +# latencytop needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# ltrace needs toolchain w/ largefile, wchar +# + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set + +# +# pax-utils needs a toolchain w/ largefile +# + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set + +# +# rt-tests needs an (e)glibc toolchain +# + +# +# strace needs a toolchain w/ largefile +# + +# +# strace is not supported on MIPS using a uClibc toolchain +# +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set + +# +# trace-cmd needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set + +# +# cvs needs a toolchain w/ wchar +# +# BR2_PACKAGE_FLEX is not set + +# +# gettext needs a toolchain w/ wchar +# + +# +# git needs a toolchain w/ largefile +# +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set + +# +# tree needs a toolchain w/ wchar +# + +# +# Filesystem and flash utilities +# + +# +# btrfs-progs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set + +# +# curlftpfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# dosfstools needs a toolchain w/ largefile, wchar +# + +# +# e2fsprogs needs a toolchain w/ largefile, wchar +# + +# +# e2tools needs a toolchain w/ threads, largefile and wchar +# + +# +# ecryptfs-utils needs a toolchain w/ largefile, threads, wchar +# + +# +# exfat needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# exfat-utils needs a toolchain w/ largefile, wchar +# + +# +# f2fs-tools needs a toolchain w/ largefile, wchar +# + +# +# flashbench needs a toolchain w/ largefile +# + +# +# genext2fs needs a toolchain w/ largefile +# +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set + +# +# mmc-utils needs a toolchain w/ largefile, headers >= 3.0 +# +# BR2_PACKAGE_MTD is not set + +# +# mtools needs a toolchain w/ wchar +# + +# +# nfs-utils needs a toolchain w/ largefile, threads +# + +# +# ntfs-3g needs a toolchain w/ largefile, wchar, threads +# + +# +# simicsfs needs a Linux kernel to be built +# + +# +# squashfs needs a toolchain w/ largefile, threads +# + +# +# sshfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# unionfs needs a toolchain w/ largefile, threads, dynamic library +# + +# +# xfsprogs needs a toolchain w/ largefile, wchar +# + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set + +# +# jhead needs a toolchain w/ wchar +# + +# +# rrdtool needs a toolchain w/ wchar +# + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set + +# +# fbterm needs a toolchain w/ C++, wchar, locale +# +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set + +# +# psplash needs a toolchain w/ wchar +# +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# + +# +# EFL needs a toolchain w/ wchar +# +# BR2_PACKAGE_QT is not set + +# +# Qt5 needs a toolchain w/ wchar, IPv6, NPTL, C++ +# + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# + +# +# X.org needs a toolchain w/ wchar, threads, dynamic library +# + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# avrdude needs a toolchain w/ threads, largefile, wchar +# + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# + +# +# cdrkit needs a toolchain w/ largefile +# + +# +# cryptsetup needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_DBUS is not set + +# +# dmraid needs a toolchain w/ largefile, threads, dynamic library +# + +# +# dvb-apps utils needs a toolchain w/ largefile, threads, headers >= 3.3 +# + +# +# dvbsnoop needs a toolchain w/ largefile +# +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set + +# +# gptfdisk needs a toolchain w/ largefile, wchar, C++ +# + +# +# gvfs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set + +# +# lshw needs a toolchain w/ C++, largefile, wchar +# +# BR2_PACKAGE_LSUIO is not set + +# +# lvm2 needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set + +# +# memtester needs a toolchain w/ largefile +# + +# +# minicom needs a toolchain w/ wchar +# +# BR2_PACKAGE_NANOCOM is not set + +# +# neard needs a toolchain w/ wchar, threads +# + +# +# ofono needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# parted needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set + +# +# sg3-utils needs a toolchain w/ largefile, threads +# + +# +# sispmctl needs a toolchain w/ threads, wchar +# +# BR2_PACKAGE_SMARTMONTOOLS is not set + +# +# smstools3 needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# + +# +# udisks needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set + +# +# python needs a toolchain w/ wchar, threads +# + +# +# python3 needs a toolchain w/ wchar, threads +# + +# +# ruby needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set + +# +# libmpd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set + +# +# libsndfile needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set + +# +# taglib needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# + +# +# libarchive needs a toolchain w/ wchar +# +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# + +# +# gnutls needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set + +# +# libnss needs a toolchain w/ largefile, threads +# + +# +# libsecret needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# + +# +# redis needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# + +# +# gamin needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set + +# +# libfuse needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# + +# +# atk needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set + +# +# gdk-pixbuf needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set + +# +# libdrm needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set + +# +# librsvg needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set + +# +# libva needs a toolchain w/ largefile, threads, dynamic library +# + +# +# opencv needs a toolchain w/ C++, NPTL, wchar +# + +# +# pango needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# + +# +# libcec needs a toolchain w/ C++, wchar, threads, dynamic library +# +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set + +# +# libqmi needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set + +# +# libv4l needs a toolchain w/ largefile, threads and C++ +# +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# neardal needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set + +# +# json-glib needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set + +# +# libxml++ needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set + +# +# xerces-c++ needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set + +# +# log4cplus needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LOG4CXX is not set + +# +# zlog needs a toolchain w/ threads, largefile, dynamic library +# + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set + +# +# libdvbsi++ needs a toolchain w/ C++, wchar, threads +# + +# +# libdvdnav needs a toolchain w/ dynamic library, largefile, threads +# + +# +# libdvdread needs a toolchain w/ dynamic library, largefile +# +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set + +# +# libmms needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set + +# +# libplayer needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set + +# +# cppzmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# czmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# filemq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set + +# +# glib-networking needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set + +# +# libmnl needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set + +# +# libnetfilter_acct needs a toolchain w/ largefile +# + +# +# libnetfilter_conntrack needs a toolchain w/ largefile +# + +# +# libnetfilter_cthelper needs a toolchain w/ largefile +# + +# +# libnetfilter_cttimout needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNFNETLINK is not set + +# +# libnftnl needs a toolchain w/ threads, IPv6, largefile +# +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set + +# +# libsoup needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set + +# +# libupnp needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set + +# +# openpgm needs a toolchain w/ wchar, threads, IPv6 +# +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set + +# +# thrift needs a toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_USBREDIR is not set + +# +# wvstreams needs a toolchain w/ C++, largefile +# + +# +# zeromq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zmqpp needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zyre needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set + +# +# boost needs a toolchain w/ C++, largefile, threads +# + +# +# cppcms needs a toolchain w/ C++, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EIGEN is not set + +# +# elfutils needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set + +# +# glibmm needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set + +# +# gtest needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set + +# +# libglib2 needs a toolchain w/ wchar, threads +# + +# +# libical needs a toolchain w/ wchar +# +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y + +# +# libnspr needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUV is not set + +# +# linux-pam needs a toolchain w/ wchar, locale, dynamic library +# +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set + +# +# poco needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# + +# +# enchant needs a toolchain w/ C++, threads, wchar +# + +# +# icu needs a toolchain w/ C++, wchar, threads +# + +# +# libedit needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBICONV is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set + +# +# newt needs a toolchain w/ wchar +# +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set + +# +# shared-mime-info needs a toolchain w/ wchar, threads +# + +# +# snowball-init needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set + +# +# mutt needs a toolchain w/ wchar +# + +# +# Networking applications +# + +# +# aiccu needs a toolchain w/ IPv6, wchar, threads +# + +# +# aircrack-ng needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set + +# +# bluez-utils needs a toolchain w/ wchar, threads, dynamic library +# + +# +# bluez5-utils needs a toolchain w/ wchar, threads, IPv6, headers >= 3.4 +# +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set + +# +# connman needs a toolchain w/ IPv6, wchar, threads, resolver +# + +# +# conntrack-tools needs a toolchain w/ IPv6, largefile, threads +# +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set + +# +# gesftpserver needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set + +# +# httping needs a toolchain w/ wchar +# +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# + +# +# igmpproxy needs a toolchain w/ wchar +# +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# ipset needs a toolchain w/ largefile +# +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set + +# +# lftp requires a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set + +# +# minidlna needs a toolchain w/ largefile, IPv6, threads, wchar +# + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# + +# +# mongoose needs a toolchain w/ threads, largefile +# +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set + +# +# nbd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# + +# +# nfacct needs a toolchain w/ largefile +# + +# +# nftables needs a toolchain w/ IPv6, largefile, threads, wchar, headers >= 3.4 +# +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set + +# +# rtorrent needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set + +# +# samba4 needs a toolchain w/ IPv6, wchar, largfile, threads +# +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set + +# +# spice server needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set + +# +# tvheadend needs a toolchain w/ largefile, IPv6, NPTL, headers >= 3.2 +# + +# +# udpcast needs a toolchain w/ largefile, threads +# + +# +# ulogd needs a toolchain w/ IPv6, largefile, dynamic library +# + +# +# ushare needs a toolchain w/ largefile, threads +# + +# +# ussp-push needs a toolchain w/ wchar, IPv6, threads, dynamic library +# +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set + +# +# wireshark needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_WPA_SUPPLICANT is not set + +# +# wvdial needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set + +# +# inotify-tools needs a toolchain w/ largefile +# +# BR2_PACKAGE_LOCKFILE_PROGS is not set + +# +# logrotate needs a toolchain w/ wchar +# +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# + +# +# acl needs a toolchain w/ largefile +# + +# +# attr needs a toolchain w/ largefile +# +# BR2_PACKAGE_CPULOAD is not set + +# +# ftop needs a toolchain w/ largefile +# +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set + +# +# lxc needs a toolchain w/ IPv6, threads, largefile +# +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set + +# +# numactl needs a toolchain w/ largefile +# +# BR2_PACKAGE_NUT is not set + +# +# polkit needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PWGEN is not set + +# +# quota needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y + +# +# util-linux needs a toolchain w/ largefile, wchar +# + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set + +# +# nano needs a toolchain w/ wchar +# +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set + +# +# gummiboot needs a toolchain w/ largefile, wchar +# +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/big-endian/uclibc/mips32r2-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config b/buildroot-configs/mips/big-endian/uclibc/mips32r2-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config new file mode 100644 index 0000000..371ee4a --- /dev/null +++ b/buildroot-configs/mips/big-endian/uclibc/mips32r2-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config @@ -0,0 +1,2003 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +BR2_mips=y +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mips" +BR2_ENDIAN="BIG" +BR2_GCC_TARGET_ARCH="mips32r2" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +# BR2_mips_32 is not set +BR2_mips_32r2=y +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_UCLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_PACKAGE_UCLIBC=y + +# +# uClibc Options +# +BR2_UCLIBC_VERSION_0_9_33=y +# BR2_UCLIBC_VERSION_SNAPSHOT is not set +BR2_UCLIBC_VERSION_STRING="0.9.33.2" +BR2_UCLIBC_CONFIG="package/uclibc/uClibc-0.9.33.config" +# BR2_TOOLCHAIN_BUILDROOT_LARGEFILE is not set +BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +# BR2_TOOLCHAIN_BUILDROOT_WCHAR is not set +# BR2_TOOLCHAIN_BUILDROOT_LOCALE is not set +# BR2_PTHREADS_NONE is not set +# BR2_PTHREADS is not set +# BR2_PTHREADS_OLD is not set +BR2_PTHREADS_NATIVE=y +# BR2_PTHREAD_DEBUG is not set +# BR2_TOOLCHAIN_BUILDROOT_USE_SSP is not set +# BR2_UCLIBC_INSTALL_UTILS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +BR2_UCLIBC_TARGET_ARCH="mips" +BR2_UCLIBC_MIPS_ABI="O32" +BR2_UCLIBC_MIPS_ISA="MIPS32R2" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_INET_IPV6=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_NEEDS_GETTEXT=y +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# + +# +# alsa-utils needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set + +# +# espeak needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_FAAD2 is not set + +# +# ffmpeg needs a toolchain w/ largefile, IPv6 +# + +# +# flac needs a toolchain w/ wchar +# + +# +# flite needs a toolchain w/ wchar +# + +# +# gstreamer 0.10 needs a toolchain w/ wchar, threads +# + +# +# gstreamer 1.x needs a toolchain w/ wchar, threads +# + +# +# jack2 needs a toolchain w/ largefile, threads, C++ +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set + +# +# mpd needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_MPG123 is not set + +# +# mplayer needs a toolchain w/ largefile +# +# BR2_PACKAGE_MUSEPACK is not set + +# +# ncmpc needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_OPUS_TOOLS is not set + +# +# pulseaudio needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_SOX is not set + +# +# tstools needs a toolchain w/ largefile +# + +# +# twolame needs a toolchain w/ largefile +# + +# +# upmpdcli needs a toolchain w/ C++, largefile, threads +# + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set + +# +# lz4 needs a toolchain w/ largefile +# + +# +# lzip needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set + +# +# dstat needs a toolchain w/ wchar +# +# BR2_PACKAGE_DUMA is not set + +# +# fio needs a toolchain w/ largefile, threads +# + +# +# gdb/gdbserver needs a toolchain w/ threads, threads debug +# +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# + +# +# latencytop needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# ltrace needs toolchain w/ largefile, wchar +# + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set + +# +# pax-utils needs a toolchain w/ largefile +# + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set + +# +# rt-tests needs an (e)glibc toolchain +# + +# +# strace needs a toolchain w/ largefile +# + +# +# strace is not supported on MIPS using a uClibc toolchain +# +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set + +# +# trace-cmd needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set + +# +# cvs needs a toolchain w/ wchar +# +# BR2_PACKAGE_FLEX is not set + +# +# gettext needs a toolchain w/ wchar +# + +# +# git needs a toolchain w/ largefile +# +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set + +# +# tree needs a toolchain w/ wchar +# + +# +# Filesystem and flash utilities +# + +# +# btrfs-progs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set + +# +# curlftpfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# dosfstools needs a toolchain w/ largefile, wchar +# + +# +# e2fsprogs needs a toolchain w/ largefile, wchar +# + +# +# e2tools needs a toolchain w/ threads, largefile and wchar +# + +# +# ecryptfs-utils needs a toolchain w/ largefile, threads, wchar +# + +# +# exfat needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# exfat-utils needs a toolchain w/ largefile, wchar +# + +# +# f2fs-tools needs a toolchain w/ largefile, wchar +# + +# +# flashbench needs a toolchain w/ largefile +# + +# +# genext2fs needs a toolchain w/ largefile +# +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set + +# +# mmc-utils needs a toolchain w/ largefile, headers >= 3.0 +# +# BR2_PACKAGE_MTD is not set + +# +# mtools needs a toolchain w/ wchar +# + +# +# nfs-utils needs a toolchain w/ largefile, threads +# + +# +# ntfs-3g needs a toolchain w/ largefile, wchar, threads +# + +# +# simicsfs needs a Linux kernel to be built +# + +# +# squashfs needs a toolchain w/ largefile, threads +# + +# +# sshfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# unionfs needs a toolchain w/ largefile, threads, dynamic library +# + +# +# xfsprogs needs a toolchain w/ largefile, wchar +# + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set + +# +# jhead needs a toolchain w/ wchar +# + +# +# rrdtool needs a toolchain w/ wchar +# + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set + +# +# fbterm needs a toolchain w/ C++, wchar, locale +# +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set + +# +# psplash needs a toolchain w/ wchar +# +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# + +# +# EFL needs a toolchain w/ wchar +# +# BR2_PACKAGE_QT is not set + +# +# Qt5 needs a toolchain w/ wchar, IPv6, NPTL, C++ +# + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# + +# +# X.org needs a toolchain w/ wchar, threads, dynamic library +# + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# avrdude needs a toolchain w/ threads, largefile, wchar +# + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# + +# +# cdrkit needs a toolchain w/ largefile +# + +# +# cryptsetup needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_DBUS is not set + +# +# dmraid needs a toolchain w/ largefile, threads, dynamic library +# + +# +# dvb-apps utils needs a toolchain w/ largefile, threads, headers >= 3.3 +# + +# +# dvbsnoop needs a toolchain w/ largefile +# +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set + +# +# gptfdisk needs a toolchain w/ largefile, wchar, C++ +# + +# +# gvfs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set + +# +# lshw needs a toolchain w/ C++, largefile, wchar +# +# BR2_PACKAGE_LSUIO is not set + +# +# lvm2 needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set + +# +# memtester needs a toolchain w/ largefile +# + +# +# minicom needs a toolchain w/ wchar +# +# BR2_PACKAGE_NANOCOM is not set + +# +# neard needs a toolchain w/ wchar, threads +# + +# +# ofono needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# parted needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set + +# +# sg3-utils needs a toolchain w/ largefile, threads +# + +# +# sispmctl needs a toolchain w/ threads, wchar +# +# BR2_PACKAGE_SMARTMONTOOLS is not set + +# +# smstools3 needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# + +# +# udisks needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set + +# +# python needs a toolchain w/ wchar, threads +# + +# +# python3 needs a toolchain w/ wchar, threads +# + +# +# ruby needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set + +# +# libmpd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set + +# +# libsndfile needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set + +# +# taglib needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# + +# +# libarchive needs a toolchain w/ wchar +# +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# + +# +# gnutls needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set + +# +# libnss needs a toolchain w/ largefile, threads +# + +# +# libsecret needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# + +# +# redis needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# + +# +# gamin needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set + +# +# libfuse needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# + +# +# atk needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set + +# +# gdk-pixbuf needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set + +# +# libdrm needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set + +# +# librsvg needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set + +# +# libva needs a toolchain w/ largefile, threads, dynamic library +# + +# +# opencv needs a toolchain w/ C++, NPTL, wchar +# + +# +# pango needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# + +# +# libcec needs a toolchain w/ C++, wchar, threads, dynamic library +# +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set + +# +# libqmi needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set + +# +# libv4l needs a toolchain w/ largefile, threads and C++ +# +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# neardal needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set + +# +# json-glib needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set + +# +# libxml++ needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set + +# +# xerces-c++ needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set + +# +# log4cplus needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LOG4CXX is not set + +# +# zlog needs a toolchain w/ threads, largefile, dynamic library +# + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set + +# +# libdvbsi++ needs a toolchain w/ C++, wchar, threads +# + +# +# libdvdnav needs a toolchain w/ dynamic library, largefile, threads +# + +# +# libdvdread needs a toolchain w/ dynamic library, largefile +# +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set + +# +# libmms needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set + +# +# libplayer needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set + +# +# cppzmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# czmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# filemq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set + +# +# glib-networking needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set + +# +# libmnl needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set + +# +# libnetfilter_acct needs a toolchain w/ largefile +# + +# +# libnetfilter_conntrack needs a toolchain w/ largefile +# + +# +# libnetfilter_cthelper needs a toolchain w/ largefile +# + +# +# libnetfilter_cttimout needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNFNETLINK is not set + +# +# libnftnl needs a toolchain w/ threads, IPv6, largefile +# +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set + +# +# libsoup needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set + +# +# libupnp needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set + +# +# openpgm needs a toolchain w/ wchar, threads, IPv6 +# +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set + +# +# thrift needs a toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_USBREDIR is not set + +# +# wvstreams needs a toolchain w/ C++, largefile +# + +# +# zeromq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zmqpp needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zyre needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set + +# +# boost needs a toolchain w/ C++, largefile, threads +# + +# +# cppcms needs a toolchain w/ C++, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EIGEN is not set + +# +# elfutils needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set + +# +# glibmm needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set + +# +# gtest needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set + +# +# libglib2 needs a toolchain w/ wchar, threads +# + +# +# libical needs a toolchain w/ wchar +# +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y + +# +# libnspr needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUV is not set + +# +# linux-pam needs a toolchain w/ wchar, locale, dynamic library +# +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set + +# +# poco needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# + +# +# enchant needs a toolchain w/ C++, threads, wchar +# + +# +# icu needs a toolchain w/ C++, wchar, threads +# + +# +# libedit needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBICONV is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set + +# +# newt needs a toolchain w/ wchar +# +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set + +# +# shared-mime-info needs a toolchain w/ wchar, threads +# + +# +# snowball-init needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set + +# +# mutt needs a toolchain w/ wchar +# + +# +# Networking applications +# + +# +# aiccu needs a toolchain w/ IPv6, wchar, threads +# + +# +# aircrack-ng needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set + +# +# bluez-utils needs a toolchain w/ wchar, threads, dynamic library +# + +# +# bluez5-utils needs a toolchain w/ wchar, threads, IPv6, headers >= 3.4 +# +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set + +# +# connman needs a toolchain w/ IPv6, wchar, threads, resolver +# + +# +# conntrack-tools needs a toolchain w/ IPv6, largefile, threads +# +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set + +# +# gesftpserver needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set + +# +# httping needs a toolchain w/ wchar +# +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# + +# +# igmpproxy needs a toolchain w/ wchar +# +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# ipset needs a toolchain w/ largefile +# +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set + +# +# lftp requires a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set + +# +# minidlna needs a toolchain w/ largefile, IPv6, threads, wchar +# + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# + +# +# mongoose needs a toolchain w/ threads, largefile +# +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set + +# +# nbd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# + +# +# nfacct needs a toolchain w/ largefile +# + +# +# nftables needs a toolchain w/ IPv6, largefile, threads, wchar, headers >= 3.4 +# +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set + +# +# rtorrent needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set + +# +# samba4 needs a toolchain w/ IPv6, wchar, largfile, threads +# +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set + +# +# spice server needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set + +# +# tvheadend needs a toolchain w/ largefile, IPv6, NPTL, headers >= 3.2 +# + +# +# udpcast needs a toolchain w/ largefile, threads +# + +# +# ulogd needs a toolchain w/ IPv6, largefile, dynamic library +# + +# +# ushare needs a toolchain w/ largefile, threads +# + +# +# ussp-push needs a toolchain w/ wchar, IPv6, threads, dynamic library +# +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set + +# +# wireshark needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_WPA_SUPPLICANT is not set + +# +# wvdial needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set + +# +# inotify-tools needs a toolchain w/ largefile +# +# BR2_PACKAGE_LOCKFILE_PROGS is not set + +# +# logrotate needs a toolchain w/ wchar +# +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# + +# +# acl needs a toolchain w/ largefile +# + +# +# attr needs a toolchain w/ largefile +# +# BR2_PACKAGE_CPULOAD is not set + +# +# ftop needs a toolchain w/ largefile +# +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set + +# +# lxc needs a toolchain w/ IPv6, threads, largefile +# +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set + +# +# numactl needs a toolchain w/ largefile +# +# BR2_PACKAGE_NUT is not set + +# +# polkit needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PWGEN is not set + +# +# quota needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y + +# +# util-linux needs a toolchain w/ largefile, wchar +# + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set + +# +# nano needs a toolchain w/ wchar +# +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set + +# +# gummiboot needs a toolchain w/ largefile, wchar +# +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/little-endian/glibc/mips16-el-gcc4.9-glibc2.20-binutils2.24.config b/buildroot-configs/mips/little-endian/glibc/mips16-el-gcc4.9-glibc2.20-binutils2.24.config new file mode 100644 index 0000000..d4247f3 --- /dev/null +++ b/buildroot-configs/mips/little-endian/glibc/mips16-el-gcc4.9-glibc2.20-binutils2.24.config @@ -0,0 +1,1411 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +BR2_mipsel=y +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mipsel" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="mips32" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +BR2_mips_32=y +# BR2_mips_32r2 is not set +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y +# BR2_GOOGLE_BREAKPAD_ENABLE is not set +# BR2_ENABLE_SSP is not set +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc" +BR2_PACKAGE_GLIBC=y +# BR2_GLIBC_VERSION_2_19 is not set +BR2_GLIBC_VERSION_2_20=y +BR2_GLIBC_VERSION_STRING="2.20" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_TOOLCHAIN_HAS_NATIVE_RPC=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os -mips16" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_SYSTEMD is not set +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set +# BR2_PACKAGE_VLC is not set +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_GOOGLE_BREAKPAD is not set +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set +# BR2_PACKAGE_LTP_TESTSUITE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_NODEJS is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +BR2_PACKAGE_ZLIB=y + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +BR2_PACKAGE_OPENSSL=y +# BR2_PACKAGE_OPENSSL_BIN is not set +# BR2_PACKAGE_OPENSSL_ENGINES is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set +# BR2_PACKAGE_POSTGRESQL is not set +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set +# BR2_PACKAGE_LIBCGROUP is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUNWIND is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUMACTL is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/little-endian/glibc/mips32-el-gcc4.9-glibc2.20-binutils2.24.config b/buildroot-configs/mips/little-endian/glibc/mips32-el-gcc4.9-glibc2.20-binutils2.24.config new file mode 100644 index 0000000..727bf66 --- /dev/null +++ b/buildroot-configs/mips/little-endian/glibc/mips32-el-gcc4.9-glibc2.20-binutils2.24.config @@ -0,0 +1,1411 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +BR2_mipsel=y +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mipsel" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="mips32" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +BR2_mips_32=y +# BR2_mips_32r2 is not set +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y +# BR2_GOOGLE_BREAKPAD_ENABLE is not set +# BR2_ENABLE_SSP is not set +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc" +BR2_PACKAGE_GLIBC=y +# BR2_GLIBC_VERSION_2_19 is not set +BR2_GLIBC_VERSION_2_20=y +BR2_GLIBC_VERSION_STRING="2.20" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_TOOLCHAIN_HAS_NATIVE_RPC=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_SYSTEMD is not set +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set +# BR2_PACKAGE_VLC is not set +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_GOOGLE_BREAKPAD is not set +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set +# BR2_PACKAGE_LTP_TESTSUITE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_NODEJS is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +BR2_PACKAGE_ZLIB=y + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +BR2_PACKAGE_OPENSSL=y +# BR2_PACKAGE_OPENSSL_BIN is not set +# BR2_PACKAGE_OPENSSL_ENGINES is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set +# BR2_PACKAGE_POSTGRESQL is not set +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set +# BR2_PACKAGE_LIBCGROUP is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUNWIND is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUMACTL is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/little-endian/glibc/mips32r2-el-gcc4.9-glibc2.20-binutils2.24.config b/buildroot-configs/mips/little-endian/glibc/mips32r2-el-gcc4.9-glibc2.20-binutils2.24.config new file mode 100644 index 0000000..a5647e1 --- /dev/null +++ b/buildroot-configs/mips/little-endian/glibc/mips32r2-el-gcc4.9-glibc2.20-binutils2.24.config @@ -0,0 +1,1411 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +BR2_mipsel=y +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mipsel" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="mips32r2" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +# BR2_mips_32 is not set +BR2_mips_32r2=y +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y +# BR2_GOOGLE_BREAKPAD_ENABLE is not set +# BR2_ENABLE_SSP is not set +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc" +BR2_PACKAGE_GLIBC=y +# BR2_GLIBC_VERSION_2_19 is not set +BR2_GLIBC_VERSION_2_20=y +BR2_GLIBC_VERSION_STRING="2.20" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_TOOLCHAIN_HAS_NATIVE_RPC=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_SYSTEMD is not set +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set +# BR2_PACKAGE_VLC is not set +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_GOOGLE_BREAKPAD is not set +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set +# BR2_PACKAGE_LTP_TESTSUITE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_NODEJS is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +BR2_PACKAGE_ZLIB=y + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +BR2_PACKAGE_OPENSSL=y +# BR2_PACKAGE_OPENSSL_BIN is not set +# BR2_PACKAGE_OPENSSL_ENGINES is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set +# BR2_PACKAGE_POSTGRESQL is not set +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set +# BR2_PACKAGE_LIBCGROUP is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUNWIND is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUMACTL is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/little-endian/musl/mips32-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config b/buildroot-configs/mips/little-endian/musl/mips32-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config new file mode 100644 index 0000000..6f01c1e --- /dev/null +++ b/buildroot-configs/mips/little-endian/musl/mips32-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config @@ -0,0 +1,1421 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +BR2_mipsel=y +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mipsel" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="mips32" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +BR2_mips_32=y +# BR2_mips_32r2 is not set +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_MUSL=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_LIBC="musl" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_NODEJS is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUMACTL is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/little-endian/musl/mips32r2-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config b/buildroot-configs/mips/little-endian/musl/mips32r2-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config new file mode 100644 index 0000000..7510018 --- /dev/null +++ b/buildroot-configs/mips/little-endian/musl/mips32r2-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config @@ -0,0 +1,1421 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +BR2_mipsel=y +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mipsel" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="mips32r2" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +# BR2_mips_32 is not set +BR2_mips_32r2=y +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_MUSL=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_MUSL=y +BR2_TOOLCHAIN_BUILDROOT_LIBC="musl" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_LARGEFILE=y +BR2_INET_IPV6=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK2 is not set +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MPD is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UPMPDCLI is not set + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set + +# +# simicsfs needs a Linux kernel to be built +# +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# +# BR2_PACKAGE_EFL is not set +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y +# BR2_PACKAGE_QT5 is not set + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DBUS is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_NODEJS is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBICAL is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Networking applications +# +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINIDLNA is not set + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NUMACTL is not set +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +# BR2_PACKAGE_UTIL_LINUX is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/little-endian/uclibc/mips16-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config b/buildroot-configs/mips/little-endian/uclibc/mips16-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config new file mode 100644 index 0000000..e0e5e5e --- /dev/null +++ b/buildroot-configs/mips/little-endian/uclibc/mips16-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config @@ -0,0 +1,2010 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +BR2_mipsel=y +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mipsel" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="mips32" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +BR2_mips_32=y +# BR2_mips_32r2 is not set +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_UCLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_PACKAGE_UCLIBC=y + +# +# uClibc Options +# +BR2_UCLIBC_VERSION_0_9_33=y +# BR2_UCLIBC_VERSION_SNAPSHOT is not set +BR2_UCLIBC_VERSION_STRING="0.9.33.2" +BR2_UCLIBC_CONFIG="package/uclibc/uClibc-0.9.33.config" +# BR2_TOOLCHAIN_BUILDROOT_LARGEFILE is not set +BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +# BR2_TOOLCHAIN_BUILDROOT_WCHAR is not set +# BR2_TOOLCHAIN_BUILDROOT_LOCALE is not set +# BR2_PTHREADS_NONE is not set +# BR2_PTHREADS is not set +# BR2_PTHREADS_OLD is not set +BR2_PTHREADS_NATIVE=y +# BR2_PTHREAD_DEBUG is not set +# BR2_TOOLCHAIN_BUILDROOT_USE_SSP is not set +# BR2_UCLIBC_INSTALL_UTILS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +BR2_UCLIBC_TARGET_ARCH="mips" +BR2_UCLIBC_MIPS_ABI="O32" +BR2_UCLIBC_MIPS_ISA="MIPS32" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_INET_IPV6=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_NEEDS_GETTEXT=y +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os -mips16" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# + +# +# alsa-utils needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set + +# +# espeak needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_FAAD2 is not set + +# +# ffmpeg needs a toolchain w/ largefile, IPv6 +# + +# +# flac needs a toolchain w/ wchar +# + +# +# flite needs a toolchain w/ wchar +# + +# +# gstreamer 0.10 needs a toolchain w/ wchar, threads +# + +# +# gstreamer 1.x needs a toolchain w/ wchar, threads +# + +# +# jack2 needs a toolchain w/ largefile, threads, C++ +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set + +# +# mpd needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_MPG123 is not set + +# +# mplayer needs a toolchain w/ largefile +# +# BR2_PACKAGE_MUSEPACK is not set + +# +# ncmpc needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_OPUS_TOOLS is not set + +# +# pulseaudio needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_SOX is not set + +# +# tstools needs a toolchain w/ largefile +# + +# +# twolame needs a toolchain w/ largefile +# + +# +# upmpdcli needs a toolchain w/ C++, largefile, threads +# + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set + +# +# lz4 needs a toolchain w/ largefile +# + +# +# lzip needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set + +# +# dstat needs a toolchain w/ wchar +# +# BR2_PACKAGE_DUMA is not set + +# +# fio needs a toolchain w/ largefile, threads +# + +# +# gdb/gdbserver needs a toolchain w/ threads, threads debug +# +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# + +# +# latencytop needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# ltrace needs toolchain w/ largefile, wchar +# + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set + +# +# pax-utils needs a toolchain w/ largefile +# + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set + +# +# rt-tests needs an (e)glibc toolchain +# + +# +# strace needs a toolchain w/ largefile +# + +# +# strace is not supported on MIPS using a uClibc toolchain +# +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set + +# +# trace-cmd needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set + +# +# cvs needs a toolchain w/ wchar +# +# BR2_PACKAGE_FLEX is not set + +# +# gettext needs a toolchain w/ wchar +# + +# +# git needs a toolchain w/ largefile +# +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set + +# +# tree needs a toolchain w/ wchar +# + +# +# Filesystem and flash utilities +# + +# +# btrfs-progs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set + +# +# curlftpfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# dosfstools needs a toolchain w/ largefile, wchar +# + +# +# e2fsprogs needs a toolchain w/ largefile, wchar +# + +# +# e2tools needs a toolchain w/ threads, largefile and wchar +# + +# +# ecryptfs-utils needs a toolchain w/ largefile, threads, wchar +# + +# +# exfat needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# exfat-utils needs a toolchain w/ largefile, wchar +# + +# +# f2fs-tools needs a toolchain w/ largefile, wchar +# + +# +# flashbench needs a toolchain w/ largefile +# + +# +# genext2fs needs a toolchain w/ largefile +# +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set + +# +# mmc-utils needs a toolchain w/ largefile, headers >= 3.0 +# +# BR2_PACKAGE_MTD is not set + +# +# mtools needs a toolchain w/ wchar +# + +# +# nfs-utils needs a toolchain w/ largefile, threads +# + +# +# ntfs-3g needs a toolchain w/ largefile, wchar, threads +# + +# +# simicsfs needs a Linux kernel to be built +# + +# +# squashfs needs a toolchain w/ largefile, threads +# + +# +# sshfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# unionfs needs a toolchain w/ largefile, threads, dynamic library +# + +# +# xfsprogs needs a toolchain w/ largefile, wchar +# + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set + +# +# jhead needs a toolchain w/ wchar +# + +# +# rrdtool needs a toolchain w/ wchar +# + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set + +# +# fbterm needs a toolchain w/ C++, wchar, locale +# +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set + +# +# psplash needs a toolchain w/ wchar +# +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# + +# +# EFL needs a toolchain w/ wchar +# +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y + +# +# Qt5 needs a toolchain w/ wchar, IPv6, NPTL, C++ +# + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# + +# +# X.org needs a toolchain w/ wchar, threads, dynamic library +# + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# avrdude needs a toolchain w/ threads, largefile, wchar +# + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# + +# +# cdrkit needs a toolchain w/ largefile +# + +# +# cryptsetup needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_DBUS is not set + +# +# dmraid needs a toolchain w/ largefile, threads, dynamic library +# + +# +# dvb-apps utils needs a toolchain w/ largefile, threads, headers >= 3.3 +# + +# +# dvbsnoop needs a toolchain w/ largefile +# +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set + +# +# gptfdisk needs a toolchain w/ largefile, wchar, C++ +# + +# +# gvfs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set + +# +# lshw needs a toolchain w/ C++, largefile, wchar +# +# BR2_PACKAGE_LSUIO is not set + +# +# lvm2 needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set + +# +# memtester needs a toolchain w/ largefile +# + +# +# minicom needs a toolchain w/ wchar +# +# BR2_PACKAGE_NANOCOM is not set + +# +# neard needs a toolchain w/ wchar, threads +# + +# +# ofono needs a toolchain w/ wchar, threads +# + +# +# ola needs a toolchain w/ C++, threads, largefile, wchar +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# parted needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set + +# +# sg3-utils needs a toolchain w/ largefile, threads +# + +# +# sispmctl needs a toolchain w/ threads, wchar +# +# BR2_PACKAGE_SMARTMONTOOLS is not set + +# +# smstools3 needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# + +# +# udisks needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set + +# +# nodejs needs a toolchain w/ C++, IPv6, largefile, threads +# +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set + +# +# python needs a toolchain w/ wchar, threads +# + +# +# python3 needs a toolchain w/ wchar, threads +# + +# +# ruby needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set + +# +# libmpd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set + +# +# libsndfile needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set + +# +# taglib needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# + +# +# libarchive needs a toolchain w/ wchar +# +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# + +# +# gnutls needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set + +# +# libnss needs a toolchain w/ largefile, threads +# + +# +# libsecret needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# + +# +# redis needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# + +# +# gamin needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set + +# +# libfuse needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# + +# +# atk needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set + +# +# gdk-pixbuf needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set + +# +# libdrm needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set + +# +# librsvg needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set + +# +# libva needs a toolchain w/ largefile, threads, dynamic library +# + +# +# opencv needs a toolchain w/ C++, NPTL, wchar +# + +# +# pango needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# + +# +# libcec needs a toolchain w/ C++, wchar, threads, dynamic library +# +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set + +# +# libqmi needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set + +# +# libv4l needs a toolchain w/ largefile, threads and C++ +# +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# neardal needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set + +# +# json-glib needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set + +# +# libxml++ needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set + +# +# xerces-c++ needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set + +# +# log4cplus needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LOG4CXX is not set + +# +# zlog needs a toolchain w/ threads, largefile, dynamic library +# + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set + +# +# libdvbsi++ needs a toolchain w/ C++, wchar, threads +# + +# +# libdvdnav needs a toolchain w/ dynamic library, largefile, threads +# + +# +# libdvdread needs a toolchain w/ dynamic library, largefile +# +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set + +# +# libmms needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set + +# +# libplayer needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set + +# +# cppzmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# czmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# filemq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set + +# +# glib-networking needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set + +# +# libmnl needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set + +# +# libnetfilter_acct needs a toolchain w/ largefile +# + +# +# libnetfilter_conntrack needs a toolchain w/ largefile +# + +# +# libnetfilter_cthelper needs a toolchain w/ largefile +# + +# +# libnetfilter_cttimout needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNFNETLINK is not set + +# +# libnftnl needs a toolchain w/ threads, IPv6, largefile +# +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set + +# +# libsoup needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set + +# +# libupnp needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set + +# +# openpgm needs a toolchain w/ wchar, threads, IPv6 +# +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set + +# +# thrift needs a toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_USBREDIR is not set + +# +# wvstreams needs a toolchain w/ C++, largefile +# + +# +# zeromq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zmqpp needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zyre needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set + +# +# boost needs a toolchain w/ C++, largefile, threads +# + +# +# cppcms needs a toolchain w/ C++, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EIGEN is not set + +# +# elfutils needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set + +# +# glibmm needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set + +# +# gtest needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set + +# +# libglib2 needs a toolchain w/ wchar, threads +# + +# +# libical needs a toolchain w/ wchar +# +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y + +# +# libnspr needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUV is not set + +# +# linux-pam needs a toolchain w/ wchar, locale, dynamic library +# +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# + +# +# enchant needs a toolchain w/ C++, threads, wchar +# + +# +# icu needs a toolchain w/ C++, wchar, threads +# + +# +# libedit needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBICONV is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set + +# +# newt needs a toolchain w/ wchar +# +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set + +# +# shared-mime-info needs a toolchain w/ wchar, threads +# + +# +# snowball-init needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set + +# +# mutt needs a toolchain w/ wchar +# + +# +# Networking applications +# + +# +# aiccu needs a toolchain w/ IPv6, wchar, threads +# + +# +# aircrack-ng needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set + +# +# bluez-utils needs a toolchain w/ wchar, threads, dynamic library +# + +# +# bluez5-utils needs a toolchain w/ wchar, threads, IPv6, headers >= 3.4 +# +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set + +# +# connman needs a toolchain w/ IPv6, wchar, threads, resolver +# + +# +# conntrack-tools needs a toolchain w/ IPv6, largefile, threads +# +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set + +# +# gesftpserver needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set + +# +# httping needs a toolchain w/ wchar +# +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# + +# +# igmpproxy needs a toolchain w/ wchar +# +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# ipset needs a toolchain w/ largefile +# +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set + +# +# lftp requires a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set + +# +# minidlna needs a toolchain w/ largefile, IPv6, threads, wchar +# + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# + +# +# mongoose needs a toolchain w/ threads, largefile +# +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set + +# +# nbd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# + +# +# nfacct needs a toolchain w/ largefile +# + +# +# nftables needs a toolchain w/ IPv6, largefile, threads, wchar, headers >= 3.4 +# +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set + +# +# rtorrent needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set + +# +# samba4 needs a toolchain w/ IPv6, wchar, largfile, threads +# +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set + +# +# spice server needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set + +# +# tvheadend needs a toolchain w/ largefile, IPv6, NPTL, headers >= 3.2 +# + +# +# udpcast needs a toolchain w/ largefile, threads +# + +# +# ulogd needs a toolchain w/ IPv6, largefile, dynamic library +# + +# +# ushare needs a toolchain w/ largefile, threads +# + +# +# ussp-push needs a toolchain w/ wchar, IPv6, threads, dynamic library +# +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set + +# +# wireshark needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_WPA_SUPPLICANT is not set + +# +# wvdial needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set + +# +# inotify-tools needs a toolchain w/ largefile +# +# BR2_PACKAGE_LOCKFILE_PROGS is not set + +# +# logrotate needs a toolchain w/ wchar +# +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# + +# +# acl needs a toolchain w/ largefile +# + +# +# attr needs a toolchain w/ largefile +# +# BR2_PACKAGE_CPULOAD is not set + +# +# ftop needs a toolchain w/ largefile +# +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set + +# +# lxc needs a toolchain w/ IPv6, threads, largefile +# +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set + +# +# numactl needs a toolchain w/ largefile +# +# BR2_PACKAGE_NUT is not set + +# +# polkit needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PWGEN is not set + +# +# quota needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y + +# +# util-linux needs a toolchain w/ largefile, wchar +# + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set + +# +# nano needs a toolchain w/ wchar +# +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set + +# +# gummiboot needs a toolchain w/ largefile, wchar +# +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/little-endian/uclibc/mips32-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config b/buildroot-configs/mips/little-endian/uclibc/mips32-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config new file mode 100644 index 0000000..6f2fd30 --- /dev/null +++ b/buildroot-configs/mips/little-endian/uclibc/mips32-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config @@ -0,0 +1,2010 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +BR2_mipsel=y +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mipsel" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="mips32" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +BR2_mips_32=y +# BR2_mips_32r2 is not set +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_UCLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_PACKAGE_UCLIBC=y + +# +# uClibc Options +# +BR2_UCLIBC_VERSION_0_9_33=y +# BR2_UCLIBC_VERSION_SNAPSHOT is not set +BR2_UCLIBC_VERSION_STRING="0.9.33.2" +BR2_UCLIBC_CONFIG="package/uclibc/uClibc-0.9.33.config" +# BR2_TOOLCHAIN_BUILDROOT_LARGEFILE is not set +BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +# BR2_TOOLCHAIN_BUILDROOT_WCHAR is not set +# BR2_TOOLCHAIN_BUILDROOT_LOCALE is not set +# BR2_PTHREADS_NONE is not set +# BR2_PTHREADS is not set +# BR2_PTHREADS_OLD is not set +BR2_PTHREADS_NATIVE=y +# BR2_PTHREAD_DEBUG is not set +# BR2_TOOLCHAIN_BUILDROOT_USE_SSP is not set +# BR2_UCLIBC_INSTALL_UTILS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +BR2_UCLIBC_TARGET_ARCH="mips" +BR2_UCLIBC_MIPS_ABI="O32" +BR2_UCLIBC_MIPS_ISA="MIPS32" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_INET_IPV6=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_NEEDS_GETTEXT=y +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# + +# +# alsa-utils needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set + +# +# espeak needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_FAAD2 is not set + +# +# ffmpeg needs a toolchain w/ largefile, IPv6 +# + +# +# flac needs a toolchain w/ wchar +# + +# +# flite needs a toolchain w/ wchar +# + +# +# gstreamer 0.10 needs a toolchain w/ wchar, threads +# + +# +# gstreamer 1.x needs a toolchain w/ wchar, threads +# + +# +# jack2 needs a toolchain w/ largefile, threads, C++ +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set + +# +# mpd needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_MPG123 is not set + +# +# mplayer needs a toolchain w/ largefile +# +# BR2_PACKAGE_MUSEPACK is not set + +# +# ncmpc needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_OPUS_TOOLS is not set + +# +# pulseaudio needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_SOX is not set + +# +# tstools needs a toolchain w/ largefile +# + +# +# twolame needs a toolchain w/ largefile +# + +# +# upmpdcli needs a toolchain w/ C++, largefile, threads +# + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set + +# +# lz4 needs a toolchain w/ largefile +# + +# +# lzip needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set + +# +# dstat needs a toolchain w/ wchar +# +# BR2_PACKAGE_DUMA is not set + +# +# fio needs a toolchain w/ largefile, threads +# + +# +# gdb/gdbserver needs a toolchain w/ threads, threads debug +# +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# + +# +# latencytop needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# ltrace needs toolchain w/ largefile, wchar +# + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set + +# +# pax-utils needs a toolchain w/ largefile +# + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set + +# +# rt-tests needs an (e)glibc toolchain +# + +# +# strace needs a toolchain w/ largefile +# + +# +# strace is not supported on MIPS using a uClibc toolchain +# +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set + +# +# trace-cmd needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set + +# +# cvs needs a toolchain w/ wchar +# +# BR2_PACKAGE_FLEX is not set + +# +# gettext needs a toolchain w/ wchar +# + +# +# git needs a toolchain w/ largefile +# +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set + +# +# tree needs a toolchain w/ wchar +# + +# +# Filesystem and flash utilities +# + +# +# btrfs-progs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set + +# +# curlftpfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# dosfstools needs a toolchain w/ largefile, wchar +# + +# +# e2fsprogs needs a toolchain w/ largefile, wchar +# + +# +# e2tools needs a toolchain w/ threads, largefile and wchar +# + +# +# ecryptfs-utils needs a toolchain w/ largefile, threads, wchar +# + +# +# exfat needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# exfat-utils needs a toolchain w/ largefile, wchar +# + +# +# f2fs-tools needs a toolchain w/ largefile, wchar +# + +# +# flashbench needs a toolchain w/ largefile +# + +# +# genext2fs needs a toolchain w/ largefile +# +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set + +# +# mmc-utils needs a toolchain w/ largefile, headers >= 3.0 +# +# BR2_PACKAGE_MTD is not set + +# +# mtools needs a toolchain w/ wchar +# + +# +# nfs-utils needs a toolchain w/ largefile, threads +# + +# +# ntfs-3g needs a toolchain w/ largefile, wchar, threads +# + +# +# simicsfs needs a Linux kernel to be built +# + +# +# squashfs needs a toolchain w/ largefile, threads +# + +# +# sshfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# unionfs needs a toolchain w/ largefile, threads, dynamic library +# + +# +# xfsprogs needs a toolchain w/ largefile, wchar +# + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set + +# +# jhead needs a toolchain w/ wchar +# + +# +# rrdtool needs a toolchain w/ wchar +# + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set + +# +# fbterm needs a toolchain w/ C++, wchar, locale +# +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set + +# +# psplash needs a toolchain w/ wchar +# +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# + +# +# EFL needs a toolchain w/ wchar +# +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y + +# +# Qt5 needs a toolchain w/ wchar, IPv6, NPTL, C++ +# + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# + +# +# X.org needs a toolchain w/ wchar, threads, dynamic library +# + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# avrdude needs a toolchain w/ threads, largefile, wchar +# + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# + +# +# cdrkit needs a toolchain w/ largefile +# + +# +# cryptsetup needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_DBUS is not set + +# +# dmraid needs a toolchain w/ largefile, threads, dynamic library +# + +# +# dvb-apps utils needs a toolchain w/ largefile, threads, headers >= 3.3 +# + +# +# dvbsnoop needs a toolchain w/ largefile +# +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set + +# +# gptfdisk needs a toolchain w/ largefile, wchar, C++ +# + +# +# gvfs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set + +# +# lshw needs a toolchain w/ C++, largefile, wchar +# +# BR2_PACKAGE_LSUIO is not set + +# +# lvm2 needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set + +# +# memtester needs a toolchain w/ largefile +# + +# +# minicom needs a toolchain w/ wchar +# +# BR2_PACKAGE_NANOCOM is not set + +# +# neard needs a toolchain w/ wchar, threads +# + +# +# ofono needs a toolchain w/ wchar, threads +# + +# +# ola needs a toolchain w/ C++, threads, largefile, wchar +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# parted needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set + +# +# sg3-utils needs a toolchain w/ largefile, threads +# + +# +# sispmctl needs a toolchain w/ threads, wchar +# +# BR2_PACKAGE_SMARTMONTOOLS is not set + +# +# smstools3 needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# + +# +# udisks needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set + +# +# nodejs needs a toolchain w/ C++, IPv6, largefile, threads +# +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set + +# +# python needs a toolchain w/ wchar, threads +# + +# +# python3 needs a toolchain w/ wchar, threads +# + +# +# ruby needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set + +# +# libmpd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set + +# +# libsndfile needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set + +# +# taglib needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# + +# +# libarchive needs a toolchain w/ wchar +# +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# + +# +# gnutls needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set + +# +# libnss needs a toolchain w/ largefile, threads +# + +# +# libsecret needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# + +# +# redis needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# + +# +# gamin needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set + +# +# libfuse needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# + +# +# atk needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set + +# +# gdk-pixbuf needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set + +# +# libdrm needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set + +# +# librsvg needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set + +# +# libva needs a toolchain w/ largefile, threads, dynamic library +# + +# +# opencv needs a toolchain w/ C++, NPTL, wchar +# + +# +# pango needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# + +# +# libcec needs a toolchain w/ C++, wchar, threads, dynamic library +# +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set + +# +# libqmi needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set + +# +# libv4l needs a toolchain w/ largefile, threads and C++ +# +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# neardal needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set + +# +# json-glib needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set + +# +# libxml++ needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set + +# +# xerces-c++ needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set + +# +# log4cplus needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LOG4CXX is not set + +# +# zlog needs a toolchain w/ threads, largefile, dynamic library +# + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set + +# +# libdvbsi++ needs a toolchain w/ C++, wchar, threads +# + +# +# libdvdnav needs a toolchain w/ dynamic library, largefile, threads +# + +# +# libdvdread needs a toolchain w/ dynamic library, largefile +# +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set + +# +# libmms needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set + +# +# libplayer needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set + +# +# cppzmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# czmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# filemq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set + +# +# glib-networking needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set + +# +# libmnl needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set + +# +# libnetfilter_acct needs a toolchain w/ largefile +# + +# +# libnetfilter_conntrack needs a toolchain w/ largefile +# + +# +# libnetfilter_cthelper needs a toolchain w/ largefile +# + +# +# libnetfilter_cttimout needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNFNETLINK is not set + +# +# libnftnl needs a toolchain w/ threads, IPv6, largefile +# +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set + +# +# libsoup needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set + +# +# libupnp needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set + +# +# openpgm needs a toolchain w/ wchar, threads, IPv6 +# +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set + +# +# thrift needs a toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_USBREDIR is not set + +# +# wvstreams needs a toolchain w/ C++, largefile +# + +# +# zeromq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zmqpp needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zyre needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set + +# +# boost needs a toolchain w/ C++, largefile, threads +# + +# +# cppcms needs a toolchain w/ C++, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EIGEN is not set + +# +# elfutils needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set + +# +# glibmm needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set + +# +# gtest needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set + +# +# libglib2 needs a toolchain w/ wchar, threads +# + +# +# libical needs a toolchain w/ wchar +# +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y + +# +# libnspr needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUV is not set + +# +# linux-pam needs a toolchain w/ wchar, locale, dynamic library +# +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# + +# +# enchant needs a toolchain w/ C++, threads, wchar +# + +# +# icu needs a toolchain w/ C++, wchar, threads +# + +# +# libedit needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBICONV is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set + +# +# newt needs a toolchain w/ wchar +# +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set + +# +# shared-mime-info needs a toolchain w/ wchar, threads +# + +# +# snowball-init needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set + +# +# mutt needs a toolchain w/ wchar +# + +# +# Networking applications +# + +# +# aiccu needs a toolchain w/ IPv6, wchar, threads +# + +# +# aircrack-ng needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set + +# +# bluez-utils needs a toolchain w/ wchar, threads, dynamic library +# + +# +# bluez5-utils needs a toolchain w/ wchar, threads, IPv6, headers >= 3.4 +# +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set + +# +# connman needs a toolchain w/ IPv6, wchar, threads, resolver +# + +# +# conntrack-tools needs a toolchain w/ IPv6, largefile, threads +# +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set + +# +# gesftpserver needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set + +# +# httping needs a toolchain w/ wchar +# +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# + +# +# igmpproxy needs a toolchain w/ wchar +# +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# ipset needs a toolchain w/ largefile +# +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set + +# +# lftp requires a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set + +# +# minidlna needs a toolchain w/ largefile, IPv6, threads, wchar +# + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# + +# +# mongoose needs a toolchain w/ threads, largefile +# +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set + +# +# nbd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# + +# +# nfacct needs a toolchain w/ largefile +# + +# +# nftables needs a toolchain w/ IPv6, largefile, threads, wchar, headers >= 3.4 +# +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set + +# +# rtorrent needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set + +# +# samba4 needs a toolchain w/ IPv6, wchar, largfile, threads +# +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set + +# +# spice server needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set + +# +# tvheadend needs a toolchain w/ largefile, IPv6, NPTL, headers >= 3.2 +# + +# +# udpcast needs a toolchain w/ largefile, threads +# + +# +# ulogd needs a toolchain w/ IPv6, largefile, dynamic library +# + +# +# ushare needs a toolchain w/ largefile, threads +# + +# +# ussp-push needs a toolchain w/ wchar, IPv6, threads, dynamic library +# +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set + +# +# wireshark needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_WPA_SUPPLICANT is not set + +# +# wvdial needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set + +# +# inotify-tools needs a toolchain w/ largefile +# +# BR2_PACKAGE_LOCKFILE_PROGS is not set + +# +# logrotate needs a toolchain w/ wchar +# +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# + +# +# acl needs a toolchain w/ largefile +# + +# +# attr needs a toolchain w/ largefile +# +# BR2_PACKAGE_CPULOAD is not set + +# +# ftop needs a toolchain w/ largefile +# +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set + +# +# lxc needs a toolchain w/ IPv6, threads, largefile +# +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set + +# +# numactl needs a toolchain w/ largefile +# +# BR2_PACKAGE_NUT is not set + +# +# polkit needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PWGEN is not set + +# +# quota needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y + +# +# util-linux needs a toolchain w/ largefile, wchar +# + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set + +# +# nano needs a toolchain w/ wchar +# +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set + +# +# gummiboot needs a toolchain w/ largefile, wchar +# +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/mips/little-endian/uclibc/mips32r2-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config b/buildroot-configs/mips/little-endian/uclibc/mips32r2-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config new file mode 100644 index 0000000..f82c879 --- /dev/null +++ b/buildroot-configs/mips/little-endian/uclibc/mips32r2-el-gcc4.9-uclibc0.9.33.2-binutils2.24.config @@ -0,0 +1,2010 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +BR2_mipsel=y +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="mipsel" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="mips32r2" +BR2_GCC_TARGET_ABI="32" +BR2_ARCH_HAS_ATOMICS=y +# BR2_mips_32 is not set +BR2_mips_32r2=y +# BR2_MIPS_SOFT_FLOAT is not set +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_UCLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_PACKAGE_UCLIBC=y + +# +# uClibc Options +# +BR2_UCLIBC_VERSION_0_9_33=y +# BR2_UCLIBC_VERSION_SNAPSHOT is not set +BR2_UCLIBC_VERSION_STRING="0.9.33.2" +BR2_UCLIBC_CONFIG="package/uclibc/uClibc-0.9.33.config" +# BR2_TOOLCHAIN_BUILDROOT_LARGEFILE is not set +BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +# BR2_TOOLCHAIN_BUILDROOT_WCHAR is not set +# BR2_TOOLCHAIN_BUILDROOT_LOCALE is not set +# BR2_PTHREADS_NONE is not set +# BR2_PTHREADS is not set +# BR2_PTHREADS_OLD is not set +BR2_PTHREADS_NATIVE=y +# BR2_PTHREAD_DEBUG is not set +# BR2_TOOLCHAIN_BUILDROOT_USE_SSP is not set +# BR2_UCLIBC_INSTALL_UTILS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +BR2_UCLIBC_TARGET_ARCH="mips" +BR2_UCLIBC_MIPS_ABI="O32" +BR2_UCLIBC_MIPS_ISA="MIPS32R2" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_INET_IPV6=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_NEEDS_GETTEXT=y +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# + +# +# alsa-utils needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set + +# +# espeak needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_FAAD2 is not set + +# +# ffmpeg needs a toolchain w/ largefile, IPv6 +# + +# +# flac needs a toolchain w/ wchar +# + +# +# flite needs a toolchain w/ wchar +# + +# +# gstreamer 0.10 needs a toolchain w/ wchar, threads +# + +# +# gstreamer 1.x needs a toolchain w/ wchar, threads +# + +# +# jack2 needs a toolchain w/ largefile, threads, C++ +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set + +# +# mpd needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_MPG123 is not set + +# +# mplayer needs a toolchain w/ largefile +# +# BR2_PACKAGE_MUSEPACK is not set + +# +# ncmpc needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_OPUS_TOOLS is not set + +# +# pulseaudio needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_SOX is not set + +# +# tstools needs a toolchain w/ largefile +# + +# +# twolame needs a toolchain w/ largefile +# + +# +# upmpdcli needs a toolchain w/ C++, largefile, threads +# + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set + +# +# lz4 needs a toolchain w/ largefile +# + +# +# lzip needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set + +# +# dstat needs a toolchain w/ wchar +# +# BR2_PACKAGE_DUMA is not set + +# +# fio needs a toolchain w/ largefile, threads +# + +# +# gdb/gdbserver needs a toolchain w/ threads, threads debug +# +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires an (e)glibc toolchain w/ C++ enabled +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# + +# +# latencytop needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# ltrace needs toolchain w/ largefile, wchar +# + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set + +# +# pax-utils needs a toolchain w/ largefile +# + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set + +# +# rt-tests needs an (e)glibc toolchain +# + +# +# strace needs a toolchain w/ largefile +# + +# +# strace is not supported on MIPS using a uClibc toolchain +# +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_TINYMEMBENCH is not set + +# +# trace-cmd needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set + +# +# cvs needs a toolchain w/ wchar +# +# BR2_PACKAGE_FLEX is not set + +# +# gettext needs a toolchain w/ wchar +# + +# +# git needs a toolchain w/ largefile +# +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set + +# +# tree needs a toolchain w/ wchar +# + +# +# Filesystem and flash utilities +# + +# +# btrfs-progs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set + +# +# curlftpfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# dosfstools needs a toolchain w/ largefile, wchar +# + +# +# e2fsprogs needs a toolchain w/ largefile, wchar +# + +# +# e2tools needs a toolchain w/ threads, largefile and wchar +# + +# +# ecryptfs-utils needs a toolchain w/ largefile, threads, wchar +# + +# +# exfat needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# exfat-utils needs a toolchain w/ largefile, wchar +# + +# +# f2fs-tools needs a toolchain w/ largefile, wchar +# + +# +# flashbench needs a toolchain w/ largefile +# + +# +# genext2fs needs a toolchain w/ largefile +# +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set + +# +# mmc-utils needs a toolchain w/ largefile, headers >= 3.0 +# +# BR2_PACKAGE_MTD is not set + +# +# mtools needs a toolchain w/ wchar +# + +# +# nfs-utils needs a toolchain w/ largefile, threads +# + +# +# ntfs-3g needs a toolchain w/ largefile, wchar, threads +# + +# +# simicsfs needs a Linux kernel to be built +# + +# +# squashfs needs a toolchain w/ largefile, threads +# + +# +# sshfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# unionfs needs a toolchain w/ largefile, threads, dynamic library +# + +# +# xfsprogs needs a toolchain w/ largefile, wchar +# + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set + +# +# jhead needs a toolchain w/ wchar +# + +# +# rrdtool needs a toolchain w/ wchar +# + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set + +# +# fbterm needs a toolchain w/ C++, wchar, locale +# +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set + +# +# psplash needs a toolchain w/ wchar +# +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# + +# +# EFL needs a toolchain w/ wchar +# +# BR2_PACKAGE_QT is not set +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y + +# +# Qt5 needs a toolchain w/ wchar, IPv6, NPTL, C++ +# + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# + +# +# X.org needs a toolchain w/ wchar, threads, dynamic library +# + +# +# X applications +# + +# +# midori needs libgtk2 and a toolchain w/ C++, wchar, threads +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# avrdude needs a toolchain w/ threads, largefile, wchar +# + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# + +# +# cdrkit needs a toolchain w/ largefile +# + +# +# cryptsetup needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_DBUS is not set + +# +# dmraid needs a toolchain w/ largefile, threads, dynamic library +# + +# +# dvb-apps utils needs a toolchain w/ largefile, threads, headers >= 3.3 +# + +# +# dvbsnoop needs a toolchain w/ largefile +# +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set + +# +# gptfdisk needs a toolchain w/ largefile, wchar, C++ +# + +# +# gvfs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set + +# +# lshw needs a toolchain w/ C++, largefile, wchar +# +# BR2_PACKAGE_LSUIO is not set + +# +# lvm2 needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set + +# +# memtester needs a toolchain w/ largefile +# + +# +# minicom needs a toolchain w/ wchar +# +# BR2_PACKAGE_NANOCOM is not set + +# +# neard needs a toolchain w/ wchar, threads +# + +# +# ofono needs a toolchain w/ wchar, threads +# + +# +# ola needs a toolchain w/ C++, threads, largefile, wchar +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# parted needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set + +# +# sg3-utils needs a toolchain w/ largefile, threads +# + +# +# sispmctl needs a toolchain w/ threads, wchar +# +# BR2_PACKAGE_SMARTMONTOOLS is not set + +# +# smstools3 needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# + +# +# udisks needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set + +# +# nodejs needs a toolchain w/ C++, IPv6, largefile, threads +# +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set + +# +# python needs a toolchain w/ wchar, threads +# + +# +# python3 needs a toolchain w/ wchar, threads +# + +# +# ruby needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set + +# +# libmpd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set + +# +# libsndfile needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set + +# +# taglib needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# + +# +# libarchive needs a toolchain w/ wchar +# +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# + +# +# gnutls needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set + +# +# libnss needs a toolchain w/ largefile, threads +# + +# +# libsecret needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# + +# +# redis needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# + +# +# gamin needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set + +# +# libfuse needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# + +# +# atk needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set + +# +# gdk-pixbuf needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set + +# +# libdrm needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set + +# +# librsvg needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set + +# +# libva needs a toolchain w/ largefile, threads, dynamic library +# + +# +# opencv needs a toolchain w/ C++, NPTL, wchar +# + +# +# pango needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS=y + +# +# webkit needs libgtk2 and a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# + +# +# libcec needs a toolchain w/ C++, wchar, threads, dynamic library +# +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set + +# +# libqmi needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set + +# +# libv4l needs a toolchain w/ largefile, threads and C++ +# +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# neardal needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set + +# +# json-glib needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set + +# +# libxml++ needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set + +# +# xerces-c++ needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set + +# +# log4cplus needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LOG4CXX is not set + +# +# zlog needs a toolchain w/ threads, largefile, dynamic library +# + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set + +# +# libdvbsi++ needs a toolchain w/ C++, wchar, threads +# + +# +# libdvdnav needs a toolchain w/ dynamic library, largefile, threads +# + +# +# libdvdread needs a toolchain w/ dynamic library, largefile +# +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set + +# +# libmms needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set + +# +# libplayer needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set + +# +# cppzmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# czmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# filemq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set + +# +# glib-networking needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set + +# +# libmnl needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set + +# +# libnetfilter_acct needs a toolchain w/ largefile +# + +# +# libnetfilter_conntrack needs a toolchain w/ largefile +# + +# +# libnetfilter_cthelper needs a toolchain w/ largefile +# + +# +# libnetfilter_cttimout needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNFNETLINK is not set + +# +# libnftnl needs a toolchain w/ threads, IPv6, largefile +# +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set + +# +# libsoup needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set + +# +# libupnp needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set + +# +# openpgm needs a toolchain w/ wchar, threads, IPv6 +# +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set + +# +# thrift needs a toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_USBREDIR is not set + +# +# wvstreams needs a toolchain w/ C++, largefile +# + +# +# zeromq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zmqpp needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zyre needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set + +# +# boost needs a toolchain w/ C++, largefile, threads +# + +# +# cppcms needs a toolchain w/ C++, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EIGEN is not set + +# +# elfutils needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set + +# +# glibmm needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set + +# +# gtest needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set + +# +# libglib2 needs a toolchain w/ wchar, threads +# + +# +# libical needs a toolchain w/ wchar +# +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y + +# +# libnspr needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBUV is not set + +# +# linux-pam needs a toolchain w/ wchar, locale, dynamic library +# +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# + +# +# enchant needs a toolchain w/ C++, threads, wchar +# + +# +# icu needs a toolchain w/ C++, wchar, threads +# + +# +# libedit needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBICONV is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set + +# +# newt needs a toolchain w/ wchar +# +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set + +# +# shared-mime-info needs a toolchain w/ wchar, threads +# + +# +# snowball-init needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set + +# +# mutt needs a toolchain w/ wchar +# + +# +# Networking applications +# + +# +# aiccu needs a toolchain w/ IPv6, wchar, threads +# + +# +# aircrack-ng needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set + +# +# bluez-utils needs a toolchain w/ wchar, threads, dynamic library +# + +# +# bluez5-utils needs a toolchain w/ wchar, threads, IPv6, headers >= 3.4 +# +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set + +# +# connman needs a toolchain w/ IPv6, wchar, threads, resolver +# + +# +# conntrack-tools needs a toolchain w/ IPv6, largefile, threads +# +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set + +# +# gesftpserver needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set + +# +# httping needs a toolchain w/ wchar +# +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# + +# +# igmpproxy needs a toolchain w/ wchar +# +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# ipset needs a toolchain w/ largefile +# +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set + +# +# lftp requires a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set + +# +# minidlna needs a toolchain w/ largefile, IPv6, threads, wchar +# + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# + +# +# mongoose needs a toolchain w/ threads, largefile +# +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set + +# +# nbd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# + +# +# nfacct needs a toolchain w/ largefile +# + +# +# nftables needs a toolchain w/ IPv6, largefile, threads, wchar, headers >= 3.4 +# +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set + +# +# rtorrent needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set + +# +# samba4 needs a toolchain w/ IPv6, wchar, largfile, threads +# +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set + +# +# spice server needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set + +# +# tvheadend needs a toolchain w/ largefile, IPv6, NPTL, headers >= 3.2 +# + +# +# udpcast needs a toolchain w/ largefile, threads +# + +# +# ulogd needs a toolchain w/ IPv6, largefile, dynamic library +# + +# +# ushare needs a toolchain w/ largefile, threads +# + +# +# ussp-push needs a toolchain w/ wchar, IPv6, threads, dynamic library +# +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set + +# +# wireshark needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_WPA_SUPPLICANT is not set + +# +# wvdial needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set + +# +# inotify-tools needs a toolchain w/ largefile +# +# BR2_PACKAGE_LOCKFILE_PROGS is not set + +# +# logrotate needs a toolchain w/ wchar +# +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# + +# +# acl needs a toolchain w/ largefile +# + +# +# attr needs a toolchain w/ largefile +# +# BR2_PACKAGE_CPULOAD is not set + +# +# ftop needs a toolchain w/ largefile +# +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set + +# +# lxc needs a toolchain w/ IPv6, threads, largefile +# +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set + +# +# numactl needs a toolchain w/ largefile +# +# BR2_PACKAGE_NUT is not set + +# +# polkit needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PWGEN is not set + +# +# quota needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y + +# +# util-linux needs a toolchain w/ largefile, wchar +# + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set + +# +# nano needs a toolchain w/ wchar +# +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set + +# +# gummiboot needs a toolchain w/ largefile, wchar +# +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/buildroot-configs/ppc/big-endian/uclibc/ppc-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config b/buildroot-configs/ppc/big-endian/uclibc/ppc-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config new file mode 100644 index 0000000..584b1a1 --- /dev/null +++ b/buildroot-configs/ppc/big-endian/uclibc/ppc-eb-gcc4.9-uclibc0.9.33.2-binutils2.24.config @@ -0,0 +1,2038 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot 2014.11-git-00318-gae69ead Configuration +# +BR2_HAVE_DOT_CONFIG=y + +# +# Target options +# +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +BR2_powerpc=y +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_sh is not set +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH="powerpc" +BR2_ENDIAN="BIG" +BR2_ARCH_HAS_ATOMICS=y +BR2_generic_powerpc=y +# BR2_powerpc_401 is not set +# BR2_powerpc_403 is not set +# BR2_powerpc_405 is not set +# BR2_powerpc_405fp is not set +# BR2_powerpc_440 is not set +# BR2_powerpc_440fp is not set +# BR2_powerpc_464 is not set +# BR2_powerpc_464fp is not set +# BR2_powerpc_476 is not set +# BR2_powerpc_476fp is not set +# BR2_powerpc_505 is not set +# BR2_powerpc_601 is not set +# BR2_powerpc_602 is not set +# BR2_powerpc_603 is not set +# BR2_powerpc_603e is not set +# BR2_powerpc_604 is not set +# BR2_powerpc_604e is not set +# BR2_powerpc_620 is not set +# BR2_powerpc_630 is not set +# BR2_powerpc_740 is not set +# BR2_powerpc_7400 is not set +# BR2_powerpc_7450 is not set +# BR2_powerpc_750 is not set +# BR2_powerpc_821 is not set +# BR2_powerpc_823 is not set +# BR2_powerpc_860 is not set +# BR2_powerpc_970 is not set +# BR2_powerpc_8540 is not set +# BR2_powerpc_8548 is not set +# BR2_powerpc_e300c2 is not set +# BR2_powerpc_e300c3 is not set +# BR2_powerpc_e500mc is not set +# BR2_powerpc_power4 is not set +# BR2_powerpc_power5 is not set +# BR2_powerpc_power6 is not set +# BR2_powerpc_power7 is not set +# BR2_powerpc_power8 is not set +BR2_powerpc_CLASSIC=y +# BR2_POWERPC_SOFT_FLOAT is not set + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SSH="ssh" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_LUAROCKS_MIRROR="http://luarocks.org/repositories/rocks" +BR2_CPAN_MIRROR="http://search.cpan.org/CPAN" +BR2_JLEVEL=16 +BR2_CCACHE=y +BR2_CCACHE_DIR="$(HOME)/.buildroot-ccache" +BR2_CCACHE_INITIAL_SETUP="" +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_none is not set +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y + +# +# enabling Stack Smashing Protection requires support in the toolchain +# +# BR2_PREFER_STATIC_LIB is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_UCLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +BR2_KERNEL_HEADERS_3_16=y +# BR2_KERNEL_HEADERS_VERSION is not set +BR2_DEFAULT_KERNEL_HEADERS="3.16.3" +BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_GLIBC is not set +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc" +BR2_PACKAGE_UCLIBC=y + +# +# uClibc Options +# +BR2_UCLIBC_VERSION_0_9_33=y +# BR2_UCLIBC_VERSION_SNAPSHOT is not set +BR2_UCLIBC_VERSION_STRING="0.9.33.2" +BR2_UCLIBC_CONFIG="package/uclibc/uClibc-0.9.33.config" +# BR2_TOOLCHAIN_BUILDROOT_LARGEFILE is not set +BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +# BR2_TOOLCHAIN_BUILDROOT_WCHAR is not set +# BR2_TOOLCHAIN_BUILDROOT_LOCALE is not set +# BR2_PTHREADS_NONE is not set +# BR2_PTHREADS is not set +# BR2_PTHREADS_OLD is not set +BR2_PTHREADS_NATIVE=y +# BR2_PTHREAD_DEBUG is not set +# BR2_TOOLCHAIN_BUILDROOT_USE_SSP is not set +# BR2_UCLIBC_INSTALL_UTILS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +BR2_UCLIBC_TARGET_ARCH="powerpc" +BR2_UCLIBC_POWERPC_TYPE="CLASSIC" + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +BR2_BINUTILS_VERSION_2_24=y +BR2_BINUTILS_VERSION="2.24" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +BR2_GCC_NEEDS_MPC=y +BR2_GCC_SUPPORTS_GRAPHITE=y +# BR2_GCC_VERSION_4_4_X is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_GCC_VERSION_4_8_X is not set +BR2_GCC_VERSION_4_9_X=y +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.9.1" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GCC_ENABLE_TLS=y +BR2_GCC_ENABLE_OPENMP=y +# BR2_GCC_ENABLE_GRAPHITE is not set +# BR2_PACKAGE_HOST_GDB is not set +BR2_INET_IPV6=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" +BR2_GENERATE_LOCALE="" +BR2_NEEDS_GETTEXT=y +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe -Os" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.16" + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +# BR2_TARGET_GENERIC_PASSWD_DES is not set +BR2_TARGET_GENERIC_PASSWD_MD5=y +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="md5" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set + +# +# systemd needs an (e)glibc toolchain, headers >= 3.10 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_TARGET_GENERIC_GETTY=y + +# +# getty options +# +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_GENERIC_GETTY_BAUDRATE="115200" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set + +# +# Audio and video applications +# + +# +# alsa-utils needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BELLAGIO is not set + +# +# espeak needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_FAAD2 is not set + +# +# ffmpeg needs a toolchain w/ largefile, IPv6 +# + +# +# flac needs a toolchain w/ wchar +# + +# +# flite needs a toolchain w/ wchar +# + +# +# gstreamer 0.10 needs a toolchain w/ wchar, threads +# + +# +# gstreamer 1.x needs a toolchain w/ wchar, threads +# + +# +# jack2 needs a toolchain w/ largefile, threads, C++ +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_MADPLAY is not set + +# +# mpd needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_MPG123 is not set + +# +# mplayer needs a toolchain w/ largefile +# +# BR2_PACKAGE_MUSEPACK is not set + +# +# ncmpc needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_OPUS_TOOLS is not set + +# +# pulseaudio needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_SOX is not set + +# +# tstools needs a toolchain w/ largefile +# + +# +# twolame needs a toolchain w/ largefile +# + +# +# upmpdcli needs a toolchain w/ C++, largefile, threads +# + +# +# vlc needs a uclibc snapshot or (e)glibc toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_INFOZIP is not set + +# +# lz4 needs a toolchain w/ largefile +# + +# +# lzip needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set + +# +# dstat needs a toolchain w/ wchar +# +# BR2_PACKAGE_DUMA is not set + +# +# fio needs a toolchain w/ largefile, threads +# + +# +# gdb/gdbserver needs a toolchain w/ threads, threads debug +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# kexec-lite needs a toolchain w/ largefile, wchar, dynamic library +# + +# +# ktap needs a Linux kernel to be built +# + +# +# latencytop needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LMBENCH is not set + +# +# ltp-testsuite needs a toolchain w/ IPv6, RPC, largefile, threads +# + +# +# ltrace needs toolchain w/ largefile, wchar +# + +# +# lttng-modules needs a Linux kernel to be built +# + +# +# lttng-tools needs a toolchain w/ largefile, threads, wchar +# +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_OPROFILE is not set + +# +# pax-utils needs a toolchain w/ largefile +# + +# +# perf needs a toolchain w/ largefile and a Linux kernel to be built +# +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set + +# +# strace needs a toolchain w/ largefile +# +# BR2_PACKAGE_STRESS is not set + +# +# sysprof needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_TINYMEMBENCH is not set + +# +# trace-cmd needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BSDIFF is not set + +# +# cvs needs a toolchain w/ wchar +# +# BR2_PACKAGE_FLEX is not set + +# +# gettext needs a toolchain w/ wchar +# + +# +# git needs a toolchain w/ largefile +# +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_PACKAGE_SUBVERSION is not set + +# +# tree needs a toolchain w/ wchar +# + +# +# Filesystem and flash utilities +# + +# +# btrfs-progs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CRAMFS is not set + +# +# curlftpfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# dosfstools needs a toolchain w/ largefile, wchar +# + +# +# e2fsprogs needs a toolchain w/ largefile, wchar +# + +# +# e2tools needs a toolchain w/ threads, largefile and wchar +# + +# +# ecryptfs-utils needs a toolchain w/ largefile, threads, wchar +# + +# +# exfat needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# exfat-utils needs a toolchain w/ largefile, wchar +# + +# +# f2fs-tools needs a toolchain w/ largefile, wchar +# + +# +# flashbench needs a toolchain w/ largefile +# + +# +# genext2fs needs a toolchain w/ largefile +# +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_MAKEDEVS is not set + +# +# mmc-utils needs a toolchain w/ largefile, headers >= 3.0 +# +# BR2_PACKAGE_MTD is not set + +# +# mtools needs a toolchain w/ wchar +# + +# +# nfs-utils needs a toolchain w/ largefile, threads +# + +# +# ntfs-3g needs a toolchain w/ largefile, wchar, threads +# + +# +# simicsfs needs a Linux kernel to be built +# + +# +# squashfs needs a toolchain w/ largefile, threads +# + +# +# sshfs needs a toolchain w/ largefile, wchar, threads, dynamic library +# + +# +# unionfs needs a toolchain w/ largefile, threads, dynamic library +# + +# +# xfsprogs needs a toolchain w/ largefile, wchar +# + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GNUPLOT is not set + +# +# jhead needs a toolchain w/ wchar +# + +# +# rrdtool needs a toolchain w/ wchar +# + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI06 is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FB_TEST_APP is not set + +# +# fbterm needs a toolchain w/ C++, wchar, locale +# +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs udev /dev management and a toolchain w/ C++, largefile, NPTL +# +# BR2_PACKAGE_OCRAD is not set + +# +# psplash needs a toolchain w/ wchar +# +# BR2_PACKAGE_SDL is not set + +# +# Other GUIs +# + +# +# EFL needs a toolchain w/ wchar +# +# BR2_PACKAGE_QT is not set + +# +# Qt5 needs a toolchain w/ wchar, IPv6, NPTL, C++ +# + +# +# weston needs udev and a toolchain w/ threads, headers >= 3.0 +# + +# +# X.org needs a toolchain w/ wchar, threads, dynamic library +# + +# +# X applications +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# X window managers +# + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set + +# +# avrdude needs a toolchain w/ threads, largefile, wchar +# + +# +# bcache-tools needs udev /dev management and a toolchain w/ largefile, wchar +# + +# +# cdrkit needs a toolchain w/ largefile +# + +# +# cryptsetup needs a toolchain w/ largefile, wchar, threads, dynamic library +# +# BR2_PACKAGE_DBUS is not set + +# +# dmraid needs a toolchain w/ largefile, threads, dynamic library +# + +# +# dvb-apps utils needs a toolchain w/ largefile, threads, headers >= 3.3 +# + +# +# dvbsnoop needs a toolchain w/ largefile +# +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_EEPROG is not set + +# +# eudev needs eudev /dev management +# + +# +# eudev needs a toolchain w/ largefile, wchar, dynamic library +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set + +# +# gptfdisk needs a toolchain w/ largefile, wchar, C++ +# + +# +# gvfs needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LM_SENSORS is not set + +# +# lshw needs a toolchain w/ C++, largefile, wchar +# +# BR2_PACKAGE_LSUIO is not set + +# +# lvm2 needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MEDIA_CTL is not set + +# +# memtester needs a toolchain w/ largefile +# + +# +# minicom needs a toolchain w/ wchar +# +# BR2_PACKAGE_NANOCOM is not set + +# +# neard needs a toolchain w/ wchar, threads +# + +# +# ofono needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# parted needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set + +# +# sg3-utils needs a toolchain w/ largefile, threads +# + +# +# sispmctl needs a toolchain w/ threads, wchar +# +# BR2_PACKAGE_SMARTMONTOOLS is not set + +# +# smstools3 needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udisks needs udev /dev management +# + +# +# udisks needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbmount requires udev to be enabled +# +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_ENSCRIPT is not set +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set + +# +# python needs a toolchain w/ wchar, threads +# + +# +# python3 needs a toolchain w/ wchar, threads +# + +# +# ruby needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set + +# +# libmpd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set + +# +# libsndfile needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SPEEX is not set + +# +# taglib needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# + +# +# libarchive needs a toolchain w/ wchar +# +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# + +# +# gnutls needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set + +# +# libnss needs a toolchain w/ largefile, threads +# + +# +# libsecret needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +# BR2_PACKAGE_POLARSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_MYSQL is not set + +# +# postgresql needs a toolchain w/ glibc +# + +# +# redis needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# + +# +# gamin needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set + +# +# libfuse needs a toolchain w/ largefile, threads, dynamic library +# +# BR2_PACKAGE_LIBLOCKFILE is not set + +# +# libnfs needs a toolchain w/ RPC and LARGEFILE +# +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# Graphics +# + +# +# atk needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set + +# +# gdk-pixbuf needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IMLIB2 is not set +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set + +# +# libdrm needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBEXIF is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set + +# +# librsvg needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set + +# +# libva needs a toolchain w/ largefile, threads, dynamic library +# + +# +# opencv needs a toolchain w/ C++, NPTL, wchar +# + +# +# pango needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +# BR2_PACKAGE_WEBP is not set +# BR2_PACKAGE_ZXING is not set + +# +# Hardware handling +# +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# + +# +# libcec needs a toolchain w/ C++, wchar, threads, dynamic library +# +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBHID is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set + +# +# libmbim needs udev /dev management and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPHIDGET is not set + +# +# libqmi needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBUSB is not set + +# +# libv4l needs a toolchain w/ largefile, threads and C++ +# +# BR2_PACKAGE_LIBXKBCOMMON is not set +# BR2_PACKAGE_MTDEV is not set + +# +# neardal needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JQUERY_KEYBOARD is not set +# BR2_PACKAGE_JQUERY_MOBILE is not set +# BR2_PACKAGE_JQUERY_SPARKLINE is not set +# BR2_PACKAGE_JQUERY_UI is not set +# BR2_PACKAGE_JQUERY_VALIDATION is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set + +# +# JSON/XML +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JSON_C is not set + +# +# json-glib needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set + +# +# libxml++ needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_TINYXML is not set + +# +# xerces-c++ needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_YAJL is not set + +# +# Logging +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set + +# +# log4cplus needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LOG4CXX is not set + +# +# zlog needs a toolchain w/ threads, largefile, dynamic library +# + +# +# Multimedia +# +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBLURAY is not set + +# +# libdvbsi++ needs a toolchain w/ C++, wchar, threads +# + +# +# libdvdnav needs a toolchain w/ dynamic library, largefile, threads +# + +# +# libdvdread needs a toolchain w/ dynamic library, largefile +# +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBMATROSKA is not set + +# +# libmms needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set + +# +# libplayer needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_C_ARES is not set + +# +# cppzmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# czmq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# filemq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_GEOIP is not set + +# +# glib-networking needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set + +# +# libmnl needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBNDP is not set + +# +# libnetfilter_acct needs a toolchain w/ largefile +# + +# +# libnetfilter_conntrack needs a toolchain w/ largefile +# + +# +# libnetfilter_cthelper needs a toolchain w/ largefile +# + +# +# libnetfilter_cttimout needs a toolchain w/ largefile +# +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNFNETLINK is not set + +# +# libnftnl needs a toolchain w/ threads, IPv6, largefile +# +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set + +# +# libsoup needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set + +# +# libupnp needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_OMNIORB is not set + +# +# openpgm needs a toolchain w/ wchar, threads, IPv6 +# +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set + +# +# thrift needs a toolchain w/ C++, largefile, wchar, threads +# +# BR2_PACKAGE_USBREDIR is not set + +# +# wvstreams needs a toolchain w/ C++, largefile +# + +# +# zeromq needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zmqpp needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# zyre needs a toolchain w/ C++, IPv6, largefile, wchar, threads +# + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set + +# +# boost needs a toolchain w/ C++, largefile, threads +# + +# +# cppcms needs a toolchain w/ C++, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EIGEN is not set + +# +# elfutils needs a toolchain w/ largefile, wchar +# +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set + +# +# glibmm needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_GMP is not set +# BR2_PACKAGE_GSL is not set + +# +# gtest needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs an (e)glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGC is not set + +# +# libglib2 needs a toolchain w/ wchar, threads +# + +# +# libical needs a toolchain w/ wchar +# +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y + +# +# libnspr needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set + +# +# linux-pam needs a toolchain w/ wchar, locale, dynamic library +# + +# +# lttng-libust needs a toolchain w/ wchar, largefile, threads +# +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set + +# +# poco needs a toolchain w/ wchar, threads, C++ +# +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_SCHIFRA is not set + +# +# Security +# +# BR2_PACKAGE_LIBSEPOL is not set + +# +# Text and terminal handling +# + +# +# enchant needs a toolchain w/ C++, threads, wchar +# + +# +# icu needs a toolchain w/ C++, wchar, threads +# + +# +# libedit needs a toolchain w/ wchar +# +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBICONV is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set + +# +# newt needs a toolchain w/ wchar +# +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set + +# +# shared-mime-info needs a toolchain w/ wchar, threads +# + +# +# snowball-init needs a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Mail +# +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set + +# +# mutt needs a toolchain w/ wchar +# + +# +# Networking applications +# + +# +# aiccu needs a toolchain w/ IPv6, wchar, threads +# + +# +# aircrack-ng needs a toolchain w/ largefile, threads +# +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BCUSDK is not set + +# +# bluez-utils needs a toolchain w/ wchar, threads, dynamic library +# + +# +# bluez5-utils needs a toolchain w/ wchar, threads, IPv6, headers >= 3.4 +# +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set + +# +# connman needs a toolchain w/ IPv6, wchar, threads, resolver +# + +# +# conntrack-tools needs a toolchain w/ IPv6, largefile, threads +# +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FPING is not set + +# +# gesftpserver needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set + +# +# httping needs a toolchain w/ wchar +# +# BR2_PACKAGE_IFTOP is not set + +# +# igh-ethercat needs a Linux kernel to be built +# + +# +# igmpproxy needs a toolchain w/ wchar +# +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# ipset needs a toolchain w/ largefile +# +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set + +# +# lftp requires a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set + +# +# minidlna needs a toolchain w/ largefile, IPv6, threads, wchar +# + +# +# modemmanager needs udev /dev management and a toolchain w/ largefile, wchar, threads, IPv6 +# + +# +# mongoose needs a toolchain w/ threads, largefile +# +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MTR is not set + +# +# nbd needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a toolchain w/ IPv6, largefile, wchar, threads, headers >= 3.7 +# + +# +# nfacct needs a toolchain w/ largefile +# + +# +# nftables needs a toolchain w/ IPv6, largefile, threads, wchar, headers >= 3.4 +# +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set + +# +# portmap needs a toolchain w/ RPC +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set + +# +# rtorrent needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_SAMBA is not set + +# +# samba4 needs a toolchain w/ IPv6, wchar, largfile, threads +# +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SPAWN_FCGI is not set + +# +# spice server needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TRANSMISSION is not set + +# +# tvheadend needs a toolchain w/ largefile, IPv6, NPTL, headers >= 3.2 +# + +# +# udpcast needs a toolchain w/ largefile, threads +# + +# +# ulogd needs a toolchain w/ IPv6, largefile, dynamic library +# + +# +# ushare needs a toolchain w/ largefile, threads +# + +# +# ussp-push needs a toolchain w/ wchar, IPv6, threads, dynamic library +# +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set + +# +# wireshark needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_WPA_SUPPLICANT is not set + +# +# wvdial needs a toolchain w/ C++, largefile +# +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Shell and utilities +# + +# +# Shells +# + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set + +# +# inotify-tools needs a toolchain w/ largefile +# +# BR2_PACKAGE_LOCKFILE_PROGS is not set + +# +# logrotate needs a toolchain w/ wchar +# +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# + +# +# acl needs a toolchain w/ largefile +# + +# +# attr needs a toolchain w/ largefile +# +# BR2_PACKAGE_CPULOAD is not set + +# +# ftop needs a toolchain w/ largefile +# +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set + +# +# lxc needs a toolchain w/ IPv6, threads, largefile +# +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_NCDU is not set + +# +# numactl needs a toolchain w/ largefile +# +# BR2_PACKAGE_NUT is not set +# BR2_PACKAGE_POWERPC_UTILS is not set + +# +# polkit needs a toolchain w/ wchar, threads +# +# BR2_PACKAGE_PWGEN is not set + +# +# quota needs a toolchain w/ largefile, wchar, threads +# +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs the python interpreter +# +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y + +# +# util-linux needs a toolchain w/ largefile, wchar +# + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set + +# +# nano needs a toolchain w/ wchar +# +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set + +# +# gummiboot needs a toolchain w/ largefile, wchar +# +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_PARTED is not set +# BR2_PACKAGE_HOST_PATCHELF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2014.11 +# +# BR2_PACKAGE_LINUX_FIRMWARE_XC5000 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_CXGB4 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 is not set + +# +# Legacy options removed in 2014.08 +# +# BR2_PACKAGE_LIBELF is not set +# BR2_KERNEL_HEADERS_3_8 is not set +# BR2_PACKAGE_GETTEXT_TOOLS is not set +# BR2_PACKAGE_PROCPS is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +# BR2_BINUTILS_VERSION_2_21 is not set +# BR2_BINUTILS_VERSION_2_23_1 is not set +# BR2_UCLIBC_VERSION_0_9_32 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GDB_VERSION_7_4 is not set +# BR2_GDB_VERSION_7_5 is not set +# BR2_BUSYBOX_VERSION_1_19_X is not set +# BR2_BUSYBOX_VERSION_1_20_X is not set +# BR2_BUSYBOX_VERSION_1_21_X is not set +# BR2_PACKAGE_LIBV4L_DECODE_TM6000 is not set +# BR2_PACKAGE_LIBV4L_IR_KEYTABLE is not set +# BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE is not set +# BR2_PACKAGE_LIBV4L_V4L2_CTL is not set +# BR2_PACKAGE_LIBV4L_V4L2_DBG is not set + +# +# Legacy options removed in 2014.05 +# +# BR2_PACKAGE_EVTEST_CAPTURE is not set +# BR2_KERNEL_HEADERS_3_6 is not set +# BR2_KERNEL_HEADERS_3_7 is not set +# BR2_PACKAGE_VALA is not set +BR2_PACKAGE_TZDATA_ZONELIST="" +# BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE is not set +# BR2_PACKAGE_LUA_INTERPRETER_READLINE is not set +# BR2_PACKAGE_LUA_INTERPRETER_LINENOISE is not set +# BR2_PACKAGE_DVB_APPS_UTILS is not set +# BR2_KERNEL_HEADERS_SNAP is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +# BR2_PACKAGE_UDEV is not set +# BR2_PACKAGE_UDEV_RULES_GEN is not set +# BR2_PACKAGE_UDEV_ALL_EXTRAS is not set + +# +# Legacy options removed in 2014.02 +# +# BR2_sh2 is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +# BR2_KERNEL_HEADERS_3_1 is not set +# BR2_KERNEL_HEADERS_3_3 is not set +# BR2_KERNEL_HEADERS_3_5 is not set +# BR2_GDB_VERSION_7_2 is not set +# BR2_GDB_VERSION_7_3 is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_XSTROKE is not set +# BR2_PACKAGE_LZMA is not set +# BR2_PACKAGE_TTCP is not set +# BR2_PACKAGE_LIBNFC_LLCP is not set +# BR2_PACKAGE_MYSQL_CLIENT is not set +# BR2_PACKAGE_SQUASHFS3 is not set +# BR2_TARGET_ROOTFS_SQUASHFS3 is not set +# BR2_PACKAGE_NETKITBASE is not set +# BR2_PACKAGE_NETKITTELNET is not set +# BR2_PACKAGE_LUASQL is not set +# BR2_PACKAGE_LUACJSON is not set + +# +# Legacy options removed in 2013.11 +# +# BR2_PACKAGE_LVM2_DMSETUP_ONLY is not set +# BR2_PACKAGE_QT_JAVASCRIPTCORE is not set +# BR2_PACKAGE_MODULE_INIT_TOOLS is not set +BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL="" +BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION="" +BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="" + +# +# Legacy options removed in 2013.08 +# +# BR2_ARM_OABI is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSCK is not set +# BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_MKDOSFS is not set +# BR2_ELF2FLT is not set +# BR2_VFP_FLOAT is not set +# BR2_PACKAGE_GCC_TARGET is not set +# BR2_HAVE_DEVFILES is not set + +# +# Legacy options removed in 2013.05 +# +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192 is not set +# BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712 is not set + +# +# Legacy options removed in 2013.02 +# +# BR2_sa110 is not set +# BR2_sa1100 is not set +# BR2_PACKAGE_GDISK is not set +# BR2_PACKAGE_GDISK_GDISK is not set +# BR2_PACKAGE_GDISK_SGDISK is not set +# BR2_PACKAGE_GDB_HOST is not set +# BR2_PACKAGE_DIRECTB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTB_TESTS is not set + +# +# Legacy options removed in 2012.11 +# +# BR2_PACKAGE_CUSTOMIZE is not set +# BR2_PACKAGE_XSERVER_xorg is not set +# BR2_PACKAGE_XSERVER_tinyx is not set +# BR2_PACKAGE_PTHREAD_STUBS is not set + +# +# Legacy options removed in 2012.08 +# +# BR2_PACKAGE_GETTEXT_STATIC is not set +# BR2_PACKAGE_LIBINTL is not set +# BR2_PACKAGE_INPUT_TOOLS_EVTEST is not set +# BR2_BFIN_FDPIC is not set +# BR2_BFIN_FLAT is not set diff --git a/config.h b/config.h new file mode 100644 index 0000000..221e97d --- /dev/null +++ b/config.h @@ -0,0 +1,583 @@ +#ifndef CONFIG_H_ +#define CONFIG_H_ + +/* Don't change anything ABOVE this line */ + +/* + * As a best practice do not change the original config.h as distributed with vlmcsd. + * Instead make a copy, e.g. myconfig.h, customize it and type 'make CONFIG=myconfig.h' + * to build vlmcsd. This prevents your copy being overwritten when you upgrade to a + * new version. + */ + + + +/* + * ---------------------------------------------------------------------------------------- + * Useful customizations. These options are mandatory. You cannot comment them out. + * Feel free to change them to fit your needs. + * ---------------------------------------------------------------------------------------- + */ + +#ifndef VERSION +/* + * Define your own version identifier here, e.g. '#define VERSION "my vlmcsd based on svn560"' + */ + +#define VERSION "private build" + +#endif // VERSION + + + + +/* + * Define default ePIDs and HWID here. Preferrably grab ePIDs and HWID + * from a real KMS server. + */ + +#ifndef EPID_WINDOWS +#define EPID_WINDOWS "06401-00206-271-298329-03-1033-9600.0000-0452015" +#endif + +#ifndef EPID_OFFICE2010 +#define EPID_OFFICE2010 "06401-00096-199-198322-03-1033-9600.0000-0452015" +#endif + +#ifndef EPID_OFFICE2013 +#define EPID_OFFICE2013 "06401-00206-234-398213-03-1033-9600.0000-0452015" +#endif + +#ifndef HWID // HwId from the Ratiborus VM +#define HWID 0x36, 0x4F, 0x46, 0x3A, 0x88, 0x63, 0xD3, 0x5F +#endif + + + + + +/* + * Anything below this line is optional. If you want to use any of these options + * uncomment one or more lines starting with "//#define" + */ + + + +/* + * ------------------------------- + * Defaults + * ------------------------------- + */ + + +#ifndef INI_FILE +/* + * Uncomment and customize the following line if you want vlmcsd to look for an ini file + * at a default location + */ + +//#define INI_FILE "/etc/vlmcsd.ini" + +#endif // INI_FILE + + + + +/* + * ---------------------------------------------------------------------------------------- + * Troubleshooting options. Please note that disabling features may also help troubleshooting. + * If you have an old OS that does not support features like pthreads, shared memory or + * semaphores, uncomment "#define NO_LIMIT" and "#define NO_SIGHUP" and leave "#define USE_THREADS" + * commented out. + * ---------------------------------------------------------------------------------------- + */ + + +#ifndef CHILD_HANDLER +/* + * Uncomment the following #define if you are compiling for a platform that does + * not correctly handle the SA_NOCLDWAIT flag when ignoring SIGCHLD, i.e. forked + * processes remain as "zombies" after dying. This option will add a SIGCHLD handler that + * "waits" for a child that has terminated. This is only required for a few + * unixoid OSses. + */ + +//#define CHILD_HANDLER + +#endif // CHILD_HANDLER + + +#ifndef NO_TIMEOUT +/* + * Uncomment the following #define if you are compiling for a platform that does + * not support custom socket send or receive timeouts. + */ + +//#define NO_TIMEOUT + +#endif // NO_TIMEOUT + + +#ifndef NO_DNS +/* + * Uncomment the following #define if you have trouble with accessing routines + * from libresolv. If enabled, vlmcs will be compiled without support for + * detecting KMS servers via DNS. + */ + +//#define NO_DNS + +#endif // NO_DNS + + +#ifndef TERMINAL_FIXED_WIDTH +/* + * Uncomment the following #define and optionally change its value if you are compiling for + * a platform that cannot properly determine the width of a terminal/command prompt. + * This affects the output of "vlmcsd -x" only. It should be rarely necessary to use this. + */ + +//#define TERMINAL_FIXED_WIDTH 80 + +#endif // TERMINAL_FIXED_WIDTH + + + + +#ifndef _PEDANTIC +/* + * Uncomment the following #define if you want to do vlmcs and vlmcsd more checks on the data + * it receives over the network. They are normally not necessary but may provide useful if + * you are testing any KMS server or client emulator that may send malformed KMS packets. + */ + +//#define _PEDANTIC + +#endif // _PEDANTIC + + + + +#ifndef NO_PROCFS +/* + * Cygwin, Linux, Android, NetBSD, DragonflyBSD: + * Do not rely on a properly mounted proc filesystem and use the less reliable + * argv[0] to determine the program's executable name when restarting vlmcsd + * by sending a SIGHUP signal. Use only if absolutely necessary (very old versions + * of these OSses). + * + * FreeBSD: + * Do not use sysctl and but the less reliable + * argv[0] to determine the program's executable name when restarting vlmcsd + * by sending a SIGHUP signal. Use only if absolutely necessary (very old FreeBSD). + * + * OpenBSD: + * This option has no effect since OpenBSD always must use the less reliable argv[0]. + * + * Mac OS X, Solaris: + * This option is not neccessary (and has no effect) since these OSses provide + * a reliable way to determine the executable name. + * + * Windows: + * This option is not used because Windows doesn't support signals. + */ + +//#define NO_PROCFS + +#endif // NO_PROCFS + + + + +#ifndef USE_AUXV +/* + * Linux only: + * Use the process' ELF aux vector to determine the executable name when restarting + * vlmcsd by sending a SIGHUP signal. This is actually the best method but is supported + * only with + * * the musl library + * * the glbic library 2.16 or newer + * + * It does NOT work with uclibc (most routers and other small devices) and glibc < 2.16. + * Use it only if your system supports it and you do not plan to use the binary on older systems. + * It won't work on debian 7 or Red Hat 6.x. + * + * It it safe to try this by yourself. vlmcsd won't compile if your system doesn't support it. + */ + +//#define USE_AUXV + +#endif // USE_AUXV + + + + +#ifndef _OPENSSL_NO_HMAC +/* + * If you configured vlmcsd to use OpenSSL (which you shouldn't) you may use this option + * to calculate the KMSv6 HMAC with internal code instead of using OpenSSL. + * + * This may be necessary for some embedded devices that have OpenSSL without HMAC support. + */ + +//#define _OPENSSL_NO_HMAC + +#endif // _OPENSSL_NO_HMAC + + + + +/* + * ---------------------------------------------------------------------------------------- + * Modes of operation + * ---------------------------------------------------------------------------------------- + */ + + +#ifndef USE_THREADS +/* + * Do not use fork() but threads to serve your clients. + * + * Unix-like operarting systems: + * You may use this or not. Entirely your choice. Threads do not require explicitly allocating + * a shared memory segment which might be a problem on some systems. Using fork() is more robust + * although the threaded version of vlmcsd is rock solid too. + * + * Some older unixoid OSses may not have pthreads. Do NOT use USE_THREADS and define NO_SIGHUP + * and NO_LIMIT instead to disable use of the pthreads, shared memory and semaphores. + * + * Cygwin: + * It is recommended to use threads since fork() is extremely slow (no copy on write) and somewhat + * unstable. + * + * Windows: + * This option has no effect since fork() is not supported. + */ + +//#define USE_THREADS + +#endif // USE_THREADS + + + + +#ifndef _CRYPTO_POLARSSL +/* + * Not available on native Windows. Can be used with Cygwin. + * + * Use PolarSSL for crypto routines if possible and if it is safe. There is not much benefit by using this + * options since it can be used for SHA256 and HMAC_SHA256 only. It cannot be used for AES calculations because + * KMSv6 uses a modified algorithm that PolarSSL does not support. KMSv4 CMAC is also unsupported since it uses + * a Rijndael keysize (160 bits) that is not part of the AES standard. + * + * It is strongly recommended not to use an external crypto library. + * + * Do not define both _CRYPTO_OPENSSL and _CRYPTO_POLARSSL + */ + +//#define _CRYPTO_POLARSSL + +#endif // _CRYPTO_POLARSSL + + + + +#ifndef _CRYPTO_OPENSSL +/* + * Not available on native Windows. Can be used with Cygwin. + * + * Use OpenSSL for crypto routines if possible and if it is safe. There is not much benefit by using this + * options since it can be used for SHA256 and HMAC_SHA256 only. It cannot be used for AES calculations because + * KMSv6 uses a modified algorithm that OpenSSL does not support. KMSv4 CMAC is also unsupported since it uses + * a Rijndael keysize (160 bits) that is not part of the AES standard. + * + * It is strongly recommended not to use an external crypto library. + * + * Do not define both _CRYPTO_OPENSSL and _CRYPTO_POLARSSL + */ + +//#define _CRYPTO_OPENSSL + +#endif // _CRYPTO_OPENSSL + + + + +#ifndef _USE_AES_FROM_OPENSSL +/* + * DANGEROUS: Tweak OpenSSL to perform KMSv4 CMAC and KMSv6 modified AES. This option creates the expanded + * AES key by itself and then applies modifications to it. OpenSSL will then perfom modified AES operations. + * + * This options tampers with internal structures of OpenSSL that are subject to change or may have a platform + * specific implementation. In this case your resulting binary can only perform KMSv5 operations. + * + * This option has no effect if _CRYPTO_OPENSSL is not defined. + * + * Don't use this except for your own research on the internals of OpenSSL. + */ + +//#define _USE_AES_FROM_OPENSSL + +#endif // _USE_AES_FROM_OPENSSL + + + + + +#ifndef _OPENSSL_SOFTWARE +/* + * Use this only if you have defined _CRYPTO_OPENSSL and _USE_AES_FROM_OPENSSL. It has no effect otherwise. + * + * This options assumes a different internal AES expanded key in OpenSSL which is used mostly if OpenSSL is + * compiled without support for hardware accelerated AES. It's worth a try if _USE_AES_FROM_OPENSSL doesn't work. + */ + +//#define _OPENSSL_SOFTWARE + +#endif // _OPENSSL_SOFTWARE + + + + +/* + * ------------------------------------------------------------------------------------------ + * Extra features not compiled by default because they are rarely needed + * ------------------------------------------------------------------------------------------ + */ + + +#ifndef INCLUDE_BETAS +/* + * Uncomment the following #define if you want obsolete beta/preview SKUs + * to be included in the extended product list. + */ + +//#define INCLUDE_BETAS +#endif + + + + +/* + * ---------------------------------------------------------------------------------------- + * Removal of features. Allows you to remove features of vlmcsd you do not need or want. + * Use it to get smaller binaries. This is especially useful on very small embedded devices. + * ---------------------------------------------------------------------------------------- + */ + + +#ifndef NO_EXTENDED_PRODUCT_LIST +/* + * Do not compile the extended product list. Removes the list of Activation GUIDs (aka + * Client SKU Id, License Id) and their respective product names (e.g. Windows 8.1 Enterprise). + * + * This affects logging only and does not have an effect on activation itself. As long as you + * do not also define NO_BASIC_PRODUCT_LIST more generic names like Windows 8.1 or Office 2013 + * will still be logged. Saves a lot of space without loosing much functionality. + * + */ + +//#define NO_EXTENDED_PRODUCT_LIST + +#endif // NO_EXTENDED_PRODUCT_LIST + + + + +#ifndef NO_BASIC_PRODUCT_LIST +/* + * Do not compile the basic product list. Removes the list KMS GUIDs (aka Server SKU Id) and their + * respective product names. Only affects logging not activation. This has a negative impact only + * if you activate a product that is not (yet) in the extended product list. On the other hand you + * do not save much space by not compiling this list. + */ + +//#define NO_BASIC_PRODUCT_LIST + +#endif // NO_BASIC_PRODUCT_LIST + + + + +#ifndef NO_VERBOSE_LOG +/* + * Removes the ability to do verbose logging and disables -v and -q in vlmcsd. It does not remove the -v + * option in the vlmcs client. Disables ini file directive LogVerbose. + */ + +//#define NO_VERBOSE_LOG + +#endif // NO_VERBOSE_LOG + + + + +#ifndef NO_LOG +/* + * Disables logging completely. You can neither log to a file nor to the console. -D and -f will + * start vlmcsd in foreground. -e will not be available. Disables ini file directive LogFile. + * Implies NO_VERBOSE_LOG, NO_EXTENDED_PRODUCT_LIST and NO_BASIC_PRODUCT_LIST. + */ + +//#define NO_LOG + +#endif // NO_LOG + + + + +#ifndef NO_RANDOM_EPID +/* + * Disables the ability to generate random ePIDs. Useful if you managed to grab ePID/HWID from a + * real KMS server and want to use these. Removes -r from the vlmcsd command line and the ini + * file directive RandomizationLevel (The randomization level will be harcoded to 0). + */ + +//#define NO_RANDOM_EPID + +#endif // NO_RANDOM_EPID + + + + +#ifndef NO_INI_FILE +/* + * Disables the ability to use a configuration file (aka ini file). Removes -i from the command line. + */ + +//#define NO_INI_FILE + +#endif // NO_INI_FILE + + + + +#ifndef NO_PID_FILE +/* + * Disables the abilty to write a pid file containing the process id of vlmcsd. If your init system + * does not need this feature, you can safely disables this but it won't save much space. Disables + * the use of -p from the command line and PidFile from the ini file. + */ + +//#define NO_PID_FILE + +#endif // NO_PID_FILE + + + + +#ifndef NO_USER_SWITCH +/* + * Disables switching to another uid and/or gid after starting the program and setting up the sockets. + * You cannot use -u anf -g on the command line as well as User and Group in the ini file. If your init system + * supports starting daemons as another uid/gid (user/group) you can disable this feature in vlmcsd as long as you + * do not need to run vlmcsd on a privileged port ( < 1024 on most systems). + * + * This setting has no effect on native Windows since -u and -g is not available anyway. It may be used with + * Cygwin. + */ + +//#define NO_USER_SWITCH + +#endif // NO_USER_SWITCH + + + + +#ifndef NO_HELP +/* + * Disables display of help in both vlmcsd and vlmcs. Saves some bytes but only makes sense if you have + * access to the man files vlmcsd.8 and vlmcs.1 + */ + +//#define NO_HELP + +#endif // NO_HELP + + + + +#ifndef NO_CUSTOM_INTERVALS +/* + * Disables the ability to specify custom interval for renewing and retrying activation. Newer versions of the Microsoft's + * KMS activation client (as in Win 8.1) do not honor these parameters anyway. Disable them to save some bytes. Removes + * -A and -R from the command line as well as ActivationInterval and RenewalInterval in the ini file. + */ + +//#define NO_CUSTOM_INTERVALS + +#endif // NO_CUSTOM_INTERVALS + + + + +#ifndef NO_SOCKETS +/* + * Disables standalone startup of vlmcsd. If you use this config directive, you must start vlmcsd from an internet + * superserver like inetd, xinetd, systemd or launchd. Disables -m, -t, -4, -6, -e, -f, -P and -L in the vlmcsd + * command line. Socket setup is the job of your superserver. + */ + +//#define NO_SOCKETS + +#endif // NO_SOCKETS + + + + +#ifndef NO_CL_PIDS +/* + * Disables the ability to specify ePIDs and HWID at the command line. You still may use them in the ini file. + * Removes -0, -3, -w and -H from the vlmcsd command line. + */ + +//#define NO_CL_PIDS + +#endif // NO_CL_PIDS + + + + +#ifndef NO_LIMIT +/* + * Disables the ability to limit the number of worker threads or processes that vlmcsd uses. While you should set a + * limit whenever possible, you may save some bytes by enabling that setting. If you do not use a limit, use vlmcsd + * in a "friendly" environment only, i.e. do not run it without a reasonable limit on the internet. + * + * Removes the ability to use -m in the vlmcsd command line and MaxWorkers in the ini file. + * + * Some older unixoid OSses may not have pthreads. Do NOT use USE_THREADS and define NO_SIGHUP + * and NO_LIMIT instead to disable use of the pthreads, shared memory and semaphores. + */ + +//#define NO_LIMIT + +#endif // NO_LIMIT + + + + +#ifndef NO_SIGHUP +/* + * Disables the ability to signal hangup (SIGHUP) to vlmcsd to restart it (rereading the ini file). The SIGHUP + * handler makes heavy use of OS specific code. It should not cause any trouble on Solaris, Mac OS X and iOS. On Linux + * use "#define USE_AUXV" (see troubleshooting options) if this is supported by your C runtime library. + * + * You may save some bytes by enabling this option. Use it also if the SIGHUP handler causes any trouble on your + * platform. Please note that with no SIGHUP handler at all. vlmcsd will simply terminate (uncleanly) if it receives + * the SIGHUP signal. This is the same behavior as with most other signals. + * + * This option has no effect on native Windows since Posix signaling is not supported. It can be used with Cygwin. + */ + +//#define NO_SIGHUP + +#endif // NO_SIGHUP + + + + +/* Don't change anything BELOW this line */ + + +#endif /* CONFIG_H_ */ diff --git a/crypto.c b/crypto.c new file mode 100644 index 0000000..042bfd8 --- /dev/null +++ b/crypto.c @@ -0,0 +1,328 @@ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "crypto.h" +#include "endian.h" +#include + +const BYTE AesKeyV4[] = { + 0x05, 0x3D, 0x83, 0x07, 0xF9, 0xE5, 0xF0, 0x88, 0xEB, 0x5E, 0xA6, 0x68, 0x6C, 0xF0, 0x37, 0xC7, 0xE4, 0xEF, 0xD2, 0xD6}; + +const BYTE AesKeyV5[] = { + 0xCD, 0x7E, 0x79, 0x6F, 0x2A, 0xB2, 0x5D, 0xCB, 0x55, 0xFF, 0xC8, 0xEF, 0x83, 0x64, 0xC4, 0x70 }; + +const BYTE AesKeyV6[] = { + 0xA9, 0x4A, 0x41, 0x95, 0xE2, 0x01, 0x43, 0x2D, 0x9B, 0xCB, 0x46, 0x04, 0x05, 0xD8, 0x4A, 0x21 }; + +static const BYTE SBox[] = { + 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, + 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, + 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 0xB7, 0xFD, 0x93, 0x26, + 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, + 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, + 0xEB, 0x27, 0xB2, 0x75, 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, + 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, 0x53, 0xD1, 0x00, 0xED, + 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, + 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, + 0x50, 0x3C, 0x9F, 0xA8, 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, + 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 0xCD, 0x0C, 0x13, 0xEC, + 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, + 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, + 0xDE, 0x5E, 0x0B, 0xDB, 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, + 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, 0xE7, 0xC8, 0x37, 0x6D, + 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, + 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, + 0x4B, 0xBD, 0x8B, 0x8A, 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, + 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, 0xE1, 0xF8, 0x98, 0x11, + 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, + 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, + 0xB0, 0x54, 0xBB, 0x16 +}; + + +void XorBlock(const BYTE *const in, const BYTE *out) // Ensure that this is always 32 bit aligned +{ + /*UAA64( out, 0 ) ^= UAA64( in, 0 ); + UAA64( out, 1 ) ^= UAA64( in, 1 );*/ + + uint_fast8_t i; + + for (i = 0; i < AES_BLOCK_WORDS; i++) + { + ((DWORD*)out)[i] ^= ((DWORD*)in)[i]; + } +} + +#define AddRoundKey(d, rk) XorBlock((const BYTE *)rk, (const BYTE *)d) + +#define Mul2(word) (((word & 0x7f7f7f7f) << 1) ^ (((word & 0x80808080) >> 7) * 0x1b)) +#define Mul3(word) (Mul2(word) ^ word) +#define Mul4(word) (Mul2(Mul2(word))) +#define Mul8(word) (Mul2(Mul2(Mul2(word)))) +#define Mul9(word) (Mul8(word) ^ word) +#define MulB(word) (Mul8(word) ^ Mul3(word)) +#define MulD(word) (Mul8(word) ^ Mul4(word) ^ word) +#define MulE(word) (Mul8(word) ^ Mul4(word) ^ Mul2(word)) + +//32 bit Galois Multiplication (generates bigger code than Macros) +/*static DWORD Mul(DWORD x, DWORD y) +{ + DWORD result = x, yTemp = y, log2; + + if (!y) return 0; + + for (log2 = 0; yTemp >>= 1; log2++ ) + { + result = Mul2(result); + } + + return result ^ Mul(x, y - (1 << log2)); +}*/ + + +void MixColumnsR(BYTE *restrict state) +{ + uint_fast8_t i = 0; + for (; i < AES_BLOCK_WORDS; i++) + { + #if defined(_CRYPTO_OPENSSL) && defined(_OPENSSL_SOFTWARE) && defined(_USE_AES_FROM_OPENSSL) //Always byte swap regardless of endianess + DWORD word = BS32(((DWORD *) state)[i]); + ((DWORD *) state)[i] = BS32(MulE(word) ^ ROR32(MulB(word), 8) ^ ROR32(MulD(word), 16) ^ ROR32(Mul9(word), 24)); + #else + DWORD word = LE32(((DWORD *) state)[i]); + ((DWORD *) state)[i] = LE32(MulE(word) ^ ROR32(MulB(word), 8) ^ ROR32(MulD(word), 16) ^ ROR32(Mul9(word), 24)); + #endif + } +} + + +static DWORD SubDword(DWORD v) +{ + BYTE *b = (BYTE *)&v; + uint_fast8_t i = 0; + + for (; i < sizeof(DWORD); i++) b[i] = SBox[b[i]]; + + return v; +} + + +void AesInitKey(AesCtx *Ctx, const BYTE *Key, int_fast8_t IsV6, int RijndaelKeyBytes) +{ + int RijndaelKeyDwords = RijndaelKeyBytes / sizeof(DWORD); + Ctx->rounds = (uint_fast8_t)(RijndaelKeyDwords + 6); + + static const DWORD RCon[] = { + 0x00000000, 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, + 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000 }; + + uint_fast8_t i; + DWORD temp; + + memcpy(Ctx->Key, Key, RijndaelKeyBytes); + + for ( i = RijndaelKeyDwords; i < ( Ctx->rounds + 1 ) << 2; i++ ) + { + temp = Ctx->Key[ i - 1 ]; + + if ( ( i % RijndaelKeyDwords ) == 0 ) + temp = BE32( SubDword( ROR32( BE32(temp), 24) ) ^ RCon[ i / RijndaelKeyDwords ] ); + + Ctx->Key[ i ] = Ctx->Key[ i - RijndaelKeyDwords ] ^ temp; + } + + if ( IsV6 ) + { + BYTE *_p = (BYTE *)Ctx->Key; + + _p[ 4 * 16 ] ^= 0x73; + _p[ 6 * 16 ] ^= 0x09; + _p[ 8 * 16 ] ^= 0xE4; + } +} + + +#if !defined(_CRYPTO_OPENSSL) || !defined(_USE_AES_FROM_OPENSSL) || defined(_OPENSSL_SOFTWARE) +static void SubBytes(BYTE *block) +{ + uint_fast8_t i; + + for (i = 0; i < AES_BLOCK_BYTES; i++) + block[i] = SBox[ block[i] ]; +} + + +static void ShiftRows(BYTE *state) +{ + BYTE bIn[AES_BLOCK_BYTES]; + uint_fast8_t i; + + memcpy(bIn, state, AES_BLOCK_BYTES); + for (i = 0; i < AES_BLOCK_BYTES; i++) + { + state[i] = bIn[(i + ((i & 3) << 2)) & 0xf]; + } +}; + + +static void MixColumns(BYTE *state) +{ + uint_fast8_t i = 0; + for (; i < AES_BLOCK_WORDS; i++) + { + DWORD word = LE32(((DWORD *) state)[i]); + ((DWORD *) state)[i] = LE32(Mul2(word) ^ ROR32(Mul3(word), 8) ^ ROR32(word, 16) ^ ROR32(word, 24)); + } +} + + +void AesEncryptBlock(const AesCtx *const Ctx, BYTE *block) +{ + uint_fast8_t i; + + for ( i = 0 ;; i += 4 ) + { + AddRoundKey(block, &Ctx->Key[ i ]); + SubBytes(block); + ShiftRows(block); + + if ( i >= ( Ctx->rounds - 1 ) << 2 ) break; + + MixColumns(block); + } + + AddRoundKey(block, &Ctx->Key[ Ctx->rounds << 2 ]); +} + + +void AesCmacV4(BYTE *Message, size_t MessageSize, BYTE *MacOut) +{ + size_t i; + BYTE mac[AES_BLOCK_BYTES]; + AesCtx Ctx; + + AesInitKey(&Ctx, AesKeyV4, FALSE, V4_KEY_BYTES); + + memset(mac, 0, sizeof(mac)); + memset(Message + MessageSize, 0, AES_BLOCK_BYTES); + Message[MessageSize] = 0x80; + + for (i = 0; i <= MessageSize; i += AES_BLOCK_BYTES) + { + XorBlock(Message + i, mac); + AesEncryptBlock(&Ctx, mac); + } + + memcpy(MacOut, mac, AES_BLOCK_BYTES); +} +#endif + +#if !defined(_CRYPTO_OPENSSL) || !defined(_USE_AES_FROM_OPENSSL) + +static const BYTE SBoxR[] = { + 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, + 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, + 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, 0x54, 0x7B, 0x94, 0x32, + 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, + 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, + 0x6D, 0x8B, 0xD1, 0x25, 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, + 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, 0x6C, 0x70, 0x48, 0x50, + 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, + 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, + 0xB8, 0xB3, 0x45, 0x06, 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, + 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, 0x3A, 0x91, 0x11, 0x41, + 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, + 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, + 0x1C, 0x75, 0xDF, 0x6E, 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, + 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, 0xFC, 0x56, 0x3E, 0x4B, + 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, + 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, + 0x27, 0x80, 0xEC, 0x5F, 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, + 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, 0xA0, 0xE0, 0x3B, 0x4D, + 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, + 0x55, 0x21, 0x0C, 0x7D +}; + + +static void ShiftRowsR(BYTE *state) +{ + BYTE b[AES_BLOCK_BYTES]; + uint_fast8_t i; + + memcpy(b, state, AES_BLOCK_BYTES); + + for (i = 0; i < AES_BLOCK_BYTES; i++) + state[i] = b[(i - ((i & 0x3) << 2)) & 0xf]; +} + + +static void SubBytesR(BYTE *block) +{ + uint_fast8_t i; + + for (i = 0; i < AES_BLOCK_BYTES; i++) + block[i] = SBoxR[ block[i] ]; +} + + +void AesEncryptCbc(const AesCtx *const Ctx, BYTE *restrict iv, BYTE *restrict data, size_t *restrict len) +{ + // Pad up to blocksize inclusive + size_t i; + uint_fast8_t pad = (~*len & (AES_BLOCK_BYTES - 1)) + 1; + + #if defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ == 8) // gcc 4.8 memset bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56977 + for (i = 0; i < pad; i++) data[*len + i] = pad; + #else + memset(data + *len, pad, pad); + #endif + *len += pad; + + if ( iv ) XorBlock(iv, data); + AesEncryptBlock(Ctx, data); + + for (i = *len - AES_BLOCK_BYTES; i; i -= AES_BLOCK_BYTES) + { + XorBlock(data, data + AES_BLOCK_BYTES); + data += AES_BLOCK_BYTES; + AesEncryptBlock(Ctx, data); + } +} + + +void AesDecryptBlock(const AesCtx *const Ctx, BYTE *block) +{ + uint_fast8_t i; + + AddRoundKey(block, &Ctx->Key[ Ctx->rounds << 2 ]); + + for ( i = ( Ctx->rounds - 1 ) << 2 ;; i -= 4 ) + { + ShiftRowsR(block); + SubBytesR(block); + AddRoundKey(block, &Ctx->Key[ i ]); + + if ( i == 0 ) break; + + MixColumnsR(block); + } +} + + +void AesDecryptCbc(const AesCtx *const Ctx, BYTE *iv, BYTE *data, size_t len) +{ + BYTE *cc; + + for (cc = data + len - AES_BLOCK_BYTES; cc > data; cc -= AES_BLOCK_BYTES) + { + AesDecryptBlock(Ctx, cc); + XorBlock(cc - AES_BLOCK_BYTES, cc); + } + + AesDecryptBlock(Ctx, cc); + if ( iv ) XorBlock(iv, cc); +} +#endif // _CRYPTO_OPENSSL || OPENSSL_VERSION_NUMBER < 0x10000000L diff --git a/crypto.h b/crypto.h new file mode 100644 index 0000000..54cbde1 --- /dev/null +++ b/crypto.h @@ -0,0 +1,59 @@ +#ifndef __crypto_h +#define __crypto_h + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "types.h" +#include +#include +#include +#include +#include "endian.h" +#include + +//#define AES_ROUNDS (10) +#define AES_KEY_BYTES (16) // 128 Bits +#define AES_BLOCK_BYTES (16) +#define AES_BLOCK_WORDS (AES_BLOCK_BYTES / sizeof(DWORD)) +#define AES_KEY_DWORDS (AES_KEY_BYTES / sizeof(DWORD)) +//#define V4_ROUNDS (11) +#define V4_KEY_BYTES (20) // 160 Bits + +#define ROR32(v, n) ( (v) << (32 - n) | (v) >> n ) + +void XorBlock(const BYTE *const in, const BYTE *out); + +void AesCmacV4(BYTE *data, size_t len, BYTE *hash); + +extern const BYTE AesKeyV5[]; +extern const BYTE AesKeyV6[]; + +typedef struct { + DWORD Key[48]; // Supports a maximum of 160 key bits! + uint_fast8_t rounds; +} AesCtx; + +void AesInitKey(AesCtx *Ctx, const BYTE *Key, int_fast8_t IsV6, int AesKeyBytes); +void AesEncryptBlock(const AesCtx *const Ctx, BYTE *block); +void AesDecryptBlock(const AesCtx *const Ctx, BYTE *block); +void AesEncryptCbc(const AesCtx *const Ctx, BYTE *iv, BYTE *data, size_t *len); +void AesDecryptCbc(const AesCtx *const Ctx, BYTE *iv, BYTE *data, size_t len); +void MixColumnsR(BYTE *restrict state); + +#if defined(_CRYPTO_OPENSSL) +#include "crypto_openssl.h" + +#elif defined(_CRYPTO_POLARSSL) +#include "crypto_polarssl.h" + +#elif defined(_CRYPTO_WINDOWS) +#include "crypto_windows.h" + +#else +#include "crypto_internal.h" + +#endif +#endif // __crypto_h diff --git a/crypto_internal.c b/crypto_internal.c new file mode 100644 index 0000000..c0cf761 --- /dev/null +++ b/crypto_internal.c @@ -0,0 +1,212 @@ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#if !defined(_CRYPTO_OPENSSL) && !defined(_CRYPTO_POLARSSL) && !defined(_CRYPTO_WINDOWS) +#include "crypto_internal.h" +#include "endian.h" + +#define F0(x, y, z) ( ((x) & (y)) | (~(x) & (z)) ) +#define F1(x, y, z) ( ((x) & (y)) | ((x) & (z)) | ((y) & (z)) ) + +#define SI1(x) ( ROR32(x, 2 ) ^ ROR32(x, 13) ^ ROR32(x, 22) ) +#define SI2(x) ( ROR32(x, 6 ) ^ ROR32(x, 11) ^ ROR32(x, 25) ) +#define SI3(x) ( ROR32(x, 7 ) ^ ROR32(x, 18) ^ ((x) >> 3 ) ) +#define SI4(x) ( ROR32(x, 17) ^ ROR32(x, 19) ^ ((x) >> 10) ) + +static const DWORD k[] = { + 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, + 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, + 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, + 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, + 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, + 0x06CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, + 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, + 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, + 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, + 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, + 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 +}; + + +static void Sha256Init(Sha256Ctx *Ctx) +{ + Ctx->State[0] = 0x6A09E667; + Ctx->State[1] = 0xBB67AE85; + Ctx->State[2] = 0x3C6EF372; + Ctx->State[3] = 0xA54FF53A; + Ctx->State[4] = 0x510E527F; + Ctx->State[5] = 0x9B05688C; + Ctx->State[6] = 0x1F83D9AB; + Ctx->State[7] = 0x5BE0CD19; + Ctx->Len = 0; +} + + +static void Sha256ProcessBlock(Sha256Ctx *Ctx, BYTE *block) +{ + unsigned int i; + DWORD w[64], temp1, temp2; + DWORD a = Ctx->State[0]; + DWORD b = Ctx->State[1]; + DWORD c = Ctx->State[2]; + DWORD d = Ctx->State[3]; + DWORD e = Ctx->State[4]; + DWORD f = Ctx->State[5]; + DWORD g = Ctx->State[6]; + DWORD h = Ctx->State[7]; + + for (i = 0; i < 16; i++) + //w[ i ] = GET_UAA32BE(block, i); + w[i] = BE32(((DWORD*)block)[i]); + + for (i = 16; i < 64; i++) + w[ i ] = SI4(w[ i - 2 ]) + w[ i - 7 ] + SI3(w[ i - 15 ]) + w[ i - 16 ]; + + for (i = 0; i < 64; i++) + { + temp1 = h + SI2(e) + F0(e, f, g) + k[ i ] + w[ i ]; + temp2 = SI1(a) + F1(a, b, c); + + h = g; + g = f; + f = e; + e = d + temp1; + d = c; + c = b; + b = a; + a = temp1 + temp2; + } + + Ctx->State[0] += a; + Ctx->State[1] += b; + Ctx->State[2] += c; + Ctx->State[3] += d; + Ctx->State[4] += e; + Ctx->State[5] += f; + Ctx->State[6] += g; + Ctx->State[7] += h; +} + + +static void Sha256Update(Sha256Ctx *Ctx, BYTE *data, size_t len) +{ + unsigned int b_len = Ctx->Len & 63, + r_len = (b_len ^ 63) + 1; + + Ctx->Len += len; + + if ( len < r_len ) + { + memcpy(Ctx->Buffer + b_len, data, len); + return; + } + + if ( r_len < 64 ) + { + memcpy(Ctx->Buffer + b_len, data, r_len); + len -= r_len; + data += r_len; + Sha256ProcessBlock(Ctx, Ctx->Buffer); + } + + for (; len >= 64; len -= 64, data += 64) + Sha256ProcessBlock(Ctx, data); + + if ( len ) memcpy(Ctx->Buffer, data, len); +} + + +static void Sha256Finish(Sha256Ctx *Ctx, BYTE *hash) +{ + unsigned int i, b_len = Ctx->Len & 63; + + Ctx->Buffer[ b_len ] = 0x80; + if ( b_len ^ 63 ) memset(Ctx->Buffer + b_len + 1, 0, b_len ^ 63); + + if ( b_len >= 56 ) + { + Sha256ProcessBlock(Ctx, Ctx->Buffer); + memset(Ctx->Buffer, 0, 56); + } + + //PUT_UAA64BE(Ctx->Buffer, (unsigned long long)(Ctx->Len * 8), 7); + ((uint64_t*)Ctx->Buffer)[7] = BE64((uint64_t)Ctx->Len << 3); + Sha256ProcessBlock(Ctx, Ctx->Buffer); + + for (i = 0; i < 8; i++) + //PUT_UAA32BE(hash, Ctx->State[i], i); + ((DWORD*)hash)[i] = BE32(Ctx->State[i]); + +} + + +void Sha256(BYTE *data, size_t len, BYTE *hash) +{ + Sha256Ctx Ctx; + + Sha256Init(&Ctx); + Sha256Update(&Ctx, data, len); + Sha256Finish(&Ctx, hash); +} + + +static void _Sha256HmacInit(Sha256HmacCtx *Ctx, BYTE *key, size_t klen) +{ + BYTE IPad[64]; + unsigned int i; + + memset(IPad, 0x36, sizeof(IPad)); + memset(Ctx->OPad, 0x5C, sizeof(Ctx->OPad)); + + if ( klen > 64 ) + { + BYTE *temp = (BYTE*)alloca(32); + Sha256(key, klen, temp); + klen = 32; + key = temp; + } + + for (i = 0; i < klen; i++) + { + IPad[ i ] ^= key[ i ]; + Ctx->OPad[ i ] ^= key[ i ]; + } + + Sha256Init(&Ctx->ShaCtx); + Sha256Update(&Ctx->ShaCtx, IPad, sizeof(IPad)); +} + + +static void _Sha256HmacUpdate(Sha256HmacCtx *Ctx, BYTE *data, size_t len) +{ + Sha256Update(&Ctx->ShaCtx, data, len); +} + + +static void _Sha256HmacFinish(Sha256HmacCtx *Ctx, BYTE *hmac) +{ + BYTE temp[32]; + + Sha256Finish(&Ctx->ShaCtx, temp); + Sha256Init(&Ctx->ShaCtx); + Sha256Update(&Ctx->ShaCtx, Ctx->OPad, sizeof(Ctx->OPad)); + Sha256Update(&Ctx->ShaCtx, temp, sizeof(temp)); + Sha256Finish(&Ctx->ShaCtx, hmac); +} + + + +int_fast8_t Sha256Hmac(BYTE* key, BYTE* restrict data, DWORD len, BYTE* restrict hmac) +{ + Sha256HmacCtx Ctx; + _Sha256HmacInit(&Ctx, key, 16); + _Sha256HmacUpdate(&Ctx, data, len); + _Sha256HmacFinish(&Ctx, hmac); + return TRUE; +} + + +#endif // No external Crypto + diff --git a/crypto_internal.h b/crypto_internal.h new file mode 100644 index 0000000..f99ca0a --- /dev/null +++ b/crypto_internal.h @@ -0,0 +1,38 @@ +#ifndef __crypto_internal_h +#define __crypto_internal_h + +#if !defined(_CRYPTO_OPENSSL) && !defined(_CRYPTO_POLARSSL) && !defined(_CRYPTO_WINDOWS) + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "crypto.h" + +typedef struct { + DWORD State[8]; + BYTE Buffer[64]; + unsigned int Len; +} Sha256Ctx; + +typedef struct { + Sha256Ctx ShaCtx; + BYTE OPad[64]; +} Sha256HmacCtx; + +void Sha256(BYTE *data, size_t len, BYTE *hash); +int_fast8_t Sha256Hmac(BYTE* key, BYTE* restrict data, DWORD len, BYTE* restrict hmac); + +//void _Sha256HmacInit(Sha256HmacCtx *Ctx, BYTE *key, size_t klen); +//void _Sha256HmacUpdate(Sha256HmacCtx *Ctx, BYTE *data, size_t len); +//void _Sha256HmacFinish(Sha256HmacCtx *Ctx, BYTE *hmac); + +//#define Sha256HmacInit(c, k, l) ( _Sha256HmacInit(c, k, l), !0 ) +//#define Sha256HmacUpdate(c, d, l) ( _Sha256HmacUpdate(c, d, l), !0 ) +//#define Sha256HmacFinish(c, h) ( _Sha256HmacFinish(c, h), !0 ) + + +#endif // !defined(_CRYPTO_OPENSSL) && !defined(_CRYPTO_POLARSSL) && !defined(_CRYPTO_WINDOWS) + +#endif // __crypto_internal_h diff --git a/crypto_openssl.c b/crypto_openssl.c new file mode 100644 index 0000000..f8550c7 --- /dev/null +++ b/crypto_openssl.c @@ -0,0 +1,269 @@ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#if defined(_CRYPTO_OPENSSL) + +#include "crypto.h" +#include "crypto_openssl.h" // Required for Eclipse only +#include +#include "endian.h" + + +#ifndef _OPENSSL_NO_HMAC + +int Sha256HmacInit_OpenSSL(HMAC_CTX *c, const void *k, int l) +{ + HMAC_CTX_init(c); + #if OPENSSL_VERSION_NUMBER >= 0x10000000L + int result = + #else + int result = TRUE; + #endif + HMAC_Init_ex(c, k, l, EVP_sha256(), NULL); + return result; +} + +int Sha256HmacFinish_OpenSSL(HMAC_CTX *c, unsigned char *h, unsigned int *l) +{ + #if OPENSSL_VERSION_NUMBER >= 0x10000000L + int result = + #else + int result = !0; + #endif + HMAC_Final(c, h, l); + HMAC_CTX_cleanup(c); + return result; +} + +int_fast8_t Sha256Hmac(BYTE* key, BYTE* restrict data, DWORD len, BYTE* restrict hmac) +{ + HMAC_CTX Ctx; + +# if OPENSSL_VERSION_NUMBER >= 0x10000000L + + return + Sha256HmacInit_OpenSSL(&Ctx, key, 16) && + HMAC_Update(&Ctx, data, len) && + Sha256HmacFinish_OpenSSL(&Ctx, hmac, NULL); + +# else // OpenSSL 0.9.x + + Sha256HmacInit_OpenSSL(&Ctx, key, 16); + HMAC_Update(&Ctx, data, len); + Sha256HmacFinish_OpenSSL(&Ctx, hmac, NULL); + return TRUE; + +# endif +} + +#else // _OPENSSL_NO_HMAC (some routers have OpenSSL without support for HMAC) + +int _Sha256HmacInit(Sha256HmacCtx *Ctx, BYTE *key, size_t klen) +{ + BYTE IPad[64]; + unsigned int i; + + memset(IPad, 0x36, sizeof(IPad)); + memset(Ctx->OPad, 0x5C, sizeof(Ctx->OPad)); + + if ( klen > 64 ) + { + BYTE *temp = (BYTE*)alloca(32); + SHA256(key, klen, temp); + klen = 32; + key = temp; + } + + for (i = 0; i < klen; i++) + { + IPad[ i ] ^= key[ i ]; + Ctx->OPad[ i ] ^= key[ i ]; + } + + SHA256_Init(&Ctx->ShaCtx); + return SHA256_Update(&Ctx->ShaCtx, IPad, sizeof(IPad)); +} + +int _Sha256HmacUpdate(Sha256HmacCtx *Ctx, BYTE *data, size_t len) +{ + int rc = SHA256_Update(&Ctx->ShaCtx, data, len); + return rc; +} + +int _Sha256HmacFinish(Sha256HmacCtx *Ctx, BYTE *hmac, void* dummy) +{ + BYTE temp[32]; + + SHA256_Final(temp, &Ctx->ShaCtx); + SHA256_Init(&Ctx->ShaCtx); + SHA256_Update(&Ctx->ShaCtx, Ctx->OPad, sizeof(Ctx->OPad)); + SHA256_Update(&Ctx->ShaCtx, temp, sizeof(temp)); + return SHA256_Final(hmac, &Ctx->ShaCtx); +} + +int_fast8_t Sha256Hmac(BYTE* key, BYTE* restrict data, DWORD len, BYTE* restrict hmac) +{ + Sha256HmacCtx Ctx; + _Sha256HmacInit(&Ctx, key, 16); + _Sha256HmacUpdate(&Ctx, data, len); + _Sha256HmacFinish(&Ctx, hmac, NULL); + return TRUE; +} +#endif + +#if defined(_USE_AES_FROM_OPENSSL) +void TransformOpenSslEncryptKey(AES_KEY *k, const AesCtx *const Ctx) +{ + uint32_t *rk_OpenSSL = k->rd_key, *rk_vlmcsd = (uint32_t*)Ctx->Key; + k->rounds = Ctx->rounds; + + for (; rk_OpenSSL < k->rd_key + ((k->rounds + 1) << 2); rk_OpenSSL++, rk_vlmcsd++) + { + #ifdef _OPENSSL_SOFTWARE + *rk_OpenSSL = BE32(*rk_vlmcsd); + #else + *rk_OpenSSL = LE32(*rk_vlmcsd); + #endif + } +} + +void TransformOpenSslDecryptKey(AES_KEY *k, const AesCtx *const Ctx) +{ + uint_fast8_t i; + + #ifdef _DEBUG_OPENSSL + AES_set_decrypt_key((BYTE*)Ctx->Key, 128, k); + errorout("Correct V5 round key:"); + + for (i = 0; i < (Ctx->rounds + 1) << 4; i++) + { + if (!(i % 16)) errorout("\n"); + if (!(i % 4)) errorout(" "); + errorout("%02X", ((BYTE*)(k->rd_key))[i]); + } + + errorout("\n"); + #endif + + k->rounds = Ctx->rounds; + + /* invert the order of the round keys blockwise (1 Block = AES_BLOCK_SIZE = 16): */ + + for (i = 0; i < (Ctx->rounds + 1) << 2; i++) + { + #ifdef _OPENSSL_SOFTWARE + k->rd_key[((Ctx->rounds-(i >> 2)) << 2) + (i & 3)] = BE32(Ctx->Key[i]); + #else + k->rd_key[((Ctx->rounds-(i >> 2)) << 2) + (i & 3)] = LE32(Ctx->Key[i]); + #endif + } + + /* apply the inverse MixColumn transform to all round keys but the first and the last: */ + + uint32_t *rk = k->rd_key + 4; + + for (i = 0; i < (Ctx->rounds - 1); i++) + { + MixColumnsR((BYTE*)(rk + (i << 2))); + } + + #ifdef _DEBUG_OPENSSL + errorout("Real round key:"); + + for (i = 0; i < (Ctx->rounds + 1) << 4; i++) + { + if (!(i % 16)) errorout("\n"); + if (!(i % 4)) errorout(" "); + errorout("%02X", ((BYTE*)(k->rd_key))[i]); + } + + errorout("\n"); + #endif +} + +static BYTE NullIV[AES_BLOCK_SIZE + 8]; // OpenSSL may overwrite bytes behind IV + +void AesEncryptCbc(const AesCtx *const Ctx, BYTE *iv, BYTE *data, size_t *len) +{ + AES_KEY k; + + // OpenSSL overwrites IV plus 4 bytes + BYTE localIV[24]; // 4 spare bytes for safety + if (iv) memcpy(localIV, iv, AES_BLOCK_SIZE); + + // OpenSSL Low-Level APIs do not pad. Could use EVP API instead but needs more code to access the expanded key + uint_fast8_t pad = (~*len & (AES_BLOCK_SIZE - 1)) + 1; + + #if defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ == 8) // gcc 4.8 memset bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56977 + size_t i; + for (i = 0; i < pad; i++) data[*len + i] = pad; + #else + memset(data + *len, pad, pad); + #endif + *len += pad; + + memset(NullIV, 0, sizeof(NullIV)); + + TransformOpenSslEncryptKey(&k, Ctx); + + AES_cbc_encrypt(data, data, *len, &k, iv ? localIV : NullIV, AES_ENCRYPT); +} + +void AesDecryptBlock(const AesCtx *const Ctx, BYTE *block) +{ + AES_KEY k; + + TransformOpenSslDecryptKey(&k, Ctx); + AES_decrypt(block, block, &k); +} + +#if defined(_CRYPTO_OPENSSL) && defined(_USE_AES_FROM_OPENSSL) && !defined(_OPENSSL_SOFTWARE) +void AesEncryptBlock(const AesCtx *const Ctx, BYTE *block) +{ + AES_KEY k; + + TransformOpenSslEncryptKey(&k, Ctx); + AES_encrypt(block, block, &k); +} +#endif + +void AesDecryptCbc(const AesCtx *const Ctx, BYTE *iv, BYTE *data, size_t len) +{ + AES_KEY k; + + memset(NullIV, 0, sizeof(NullIV)); + + TransformOpenSslDecryptKey(&k, Ctx); + AES_cbc_encrypt(data, data, len, &k, iv ? iv : NullIV, AES_DECRYPT); +} + +#ifndef _OPENSSL_SOFTWARE +void AesCmacV4(BYTE *Message, size_t MessageSize, BYTE *HashOut) +{ + size_t i; + BYTE hash[AES_BLOCK_BYTES]; + AesCtx Ctx; + AES_KEY k; + + AesInitKey(&Ctx, AesKeyV4, FALSE, V4_KEY_BYTES); + TransformOpenSslEncryptKey(&k, &Ctx); + + memset(hash, 0, sizeof(hash)); + memset(Message + MessageSize, 0, AES_BLOCK_BYTES); + Message[MessageSize] = 0x80; + + for (i = 0; i <= MessageSize; i += AES_BLOCK_BYTES) + { + XorBlock(Message + i, hash); + AES_encrypt(hash, hash, &k); + } + + memcpy(HashOut, hash, AES_BLOCK_BYTES); +} +#endif // !_OPENSSL_SOFTWARE + +#endif // defined(_USE_AES_FROM_OPENSSL) + +#endif // _CRYPTO_OPENSSL diff --git a/crypto_openssl.h b/crypto_openssl.h new file mode 100644 index 0000000..d7931f7 --- /dev/null +++ b/crypto_openssl.h @@ -0,0 +1,53 @@ +#ifndef __crypto_openssl_h +#define __crypto_openssl_h + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include +#include +#include +#include +#include "crypto.h" + +#define Sha256(d, l, h) SHA256(d, l, h) +int_fast8_t Sha256Hmac(BYTE* key, BYTE* restrict data, DWORD len, BYTE* restrict hmac); + +#ifndef _OPENSSL_NO_HMAC +#define Sha256HmacCtx HMAC_CTX +#else +typedef struct { + SHA256_CTX ShaCtx; + BYTE OPad[64]; +} Sha256HmacCtx; +#endif + +#ifndef _OPENSSL_NO_HMAC + +#define Sha256HmacInit(c, k, l) Sha256HmacInit_OpenSSL(c, k, l) +#define Sha256HmacFinish(c, h) Sha256HmacFinish_OpenSSL(c, h, NULL) + +#if OPENSSL_VERSION_NUMBER >= 0x10000000L +#define Sha256HmacUpdate(c, d, l) HMAC_Update(c, d, l) +#else // OPENSSL_VERSION_NUMBER < 0x10000000L +#define Sha256HmacUpdate(c, d, l) (HMAC_Update(c, d, l), !0) +#endif // OPENSSL_VERSION_NUMBER >= 0x10000000L + +int Sha256HmacInit_OpenSSL(HMAC_CTX *c, const void *k, int l); +int Sha256HmacFinish_OpenSSL(HMAC_CTX *c, unsigned char *h, unsigned int *l); + +#else // _OPENSSL_NO_HMAC + +int _Sha256HmacInit(Sha256HmacCtx *Ctx, BYTE *key, size_t klen); +int _Sha256HmacUpdate(Sha256HmacCtx *Ctx, BYTE *data, size_t len); +int _Sha256HmacFinish(Sha256HmacCtx *Ctx, BYTE *hmac, void* dummy); +#define Sha256HmacInit(c, k, l) _Sha256HmacInit(c, k, l) +#define Sha256HmacFinish(c, h) _Sha256HmacFinish(c, h, NULL) +#define Sha256HmacUpdate(c, d, l) _Sha256HmacUpdate(c, d, l) + +#endif // _OPENSSL_NO_HMAC + +extern const BYTE AesKeyV4[]; +#endif // __crypto_openssl_h diff --git a/crypto_polarssl.h b/crypto_polarssl.h new file mode 100644 index 0000000..0474887 --- /dev/null +++ b/crypto_polarssl.h @@ -0,0 +1,39 @@ +#ifndef __crypto_polarssl_h +#define __crypto_polarssl_h + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include +#include "crypto.h" + +#if POLARSSL_VERSION_NUMBER >= 0x01030000 + +#include + +#define Sha256(d, l, h) sha256(d, l, h, 0) + +#define Sha256HmacCtx sha256_context +#define Sha256HmacInit(c, k, l) ( sha256_hmac_starts(c, k, l, 0), !0 ) +#define Sha256HmacUpdate(c, d, l) ( sha256_hmac_update(c, d, l), !0 ) +#define Sha256HmacFinish(c, h) ( sha256_hmac_finish(c, h), !0 ) +#define Sha256Hmac(k, d, l, h) ( sha256_hmac(k, 16, d, l, h, FALSE), !0 ) + +#else // POLARSSL_VERSION_NUMBER + +#include + +#define Sha256(d, l, h) sha2(d, l, h, 0) + +#define Sha256HmacCtx sha2_context +#define Sha256HmacInit(c, k, l) ( sha2_hmac_starts(c, k, l, 0), !0 ) +#define Sha256HmacUpdate(c, d, l) ( sha2_hmac_update(c, d, l), !0 ) +#define Sha256HmacFinish(c, h) ( sha2_hmac_finish(c, h), !0 ) +#define Sha256Hmac(k, d, l, h) ( sha2_hmac(k, 16, d, l, h, FALSE), !0 ) + +#endif // POLARSSL_VERSION_NUMBER +#endif // __crypto_polarssl_h + + diff --git a/crypto_windows.c b/crypto_windows.c new file mode 100644 index 0000000..d844396 --- /dev/null +++ b/crypto_windows.c @@ -0,0 +1,170 @@ +/* + * crypto_windows.c + */ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifdef _CRYPTO_WINDOWS + +#if !_WIN32 && !__CYGWIN__ +#error You cannot use Windows CryptoAPI on non-Windows platforms +#else // _WIN32 || __CYGWIN__ + +#include "crypto_windows.h" + + +typedef struct _HMAC_KEYBLOB +{ + BLOBHEADER hdr; + DWORD dwKeySize; + BYTE KeyData[16]; +} HMAC_KEYBLOB; + + +/* + * MingW and Cygwin define NULL as ((void*)0) (Posix standard) which you can't assign to + * non-pointer types without compiler warning. Thus we use the following + */ +#define NULLHANDLE 0 +#define NULLFLAGS 0 + + +static HCRYPTPROV hRsaAesProvider = 0; // Needs to be initialized just once per process + + + +static int_fast8_t AcquireCryptContext() +{ + if (!hRsaAesProvider) + { + return CryptAcquireContextW + ( + &hRsaAesProvider, // Provider handle + NULL, // No key container name + NULL, // Default provider + PROV_RSA_AES, // Provides SHA and AES + CRYPT_VERIFYCONTEXT // We don't need access to persistent keys + ); + } + + return TRUE; +} + + +int_fast8_t Sha256(BYTE* restrict data, DWORD DataSize, BYTE* restrict hash) +{ + HCRYPTHASH hHash = 0; + DWORD HashSize = 32; + + int_fast8_t success = + AcquireCryptContext() && + + CryptCreateHash + ( + hRsaAesProvider,// Provider handle + CALG_SHA_256, // Algorithm + NULLHANDLE, // SHA256 requires no key + NULLFLAGS, // Use default flags + &hHash // Handle for hashing + ) && + + CryptHashData + ( + hHash, // Handle + data, // data to hash + DataSize, // size of data + NULLFLAGS // Use default flags + ) && + + CryptGetHashParam + ( + hHash, // Handle + HP_HASHVAL, // what you actually want to get (the resulting hash) + hash, // data to retrieve + &HashSize, // size of data + NULLFLAGS // currently reserved (as of this writing) + ); + + if (hHash) CryptDestroyHash(hHash); + + return success; +} + + +int_fast8_t Sha256Hmac(const BYTE* key, BYTE* restrict data, DWORD len, BYTE* restrict hmac) +{ +# ifndef USE_THREADS // In fork() mode thread-safety is not required + static +# endif + HMAC_KEYBLOB hmackeyblob = { + // Type, Version, Algorithm + { PLAINTEXTKEYBLOB, CUR_BLOB_VERSION, 0, CALG_RC2 }, + // Key length + 16 + }; + + HCRYPTKEY hKey = NULLHANDLE; + HCRYPTHASH hHmacHash = NULLHANDLE; + HMAC_INFO HmacInfo = { 0 }; + DWORD dwHmacSize = 32; + + HmacInfo.HashAlgid = CALG_SHA_256; + memcpy(hmackeyblob.KeyData, key, sizeof(hmackeyblob.KeyData)); + + BOOL success = + AcquireCryptContext() && + + CryptImportKey + ( + hRsaAesProvider, // provider handle + (PBYTE)&hmackeyblob, // the actual key MS blob format + sizeof(HMAC_KEYBLOB), // size of the entire blob + NULLHANDLE, // password/key for the key store (none required here) + NULLFLAGS, // default flags + &hKey // key handle to retrieve (must be kept until you finish hashing) + ) && + + CryptCreateHash + ( + hRsaAesProvider, // provider handle + CALG_HMAC, // the actual key MS blob format + hKey, // size of the entire blob + NULLFLAGS, // password/key for the key store (none required here) + &hHmacHash // default flags + ) && // key handle to retrieve (must be kept until you finish hashing) + + CryptSetHashParam + ( + hHmacHash, // hash handle + HP_HMAC_INFO, // parameter you want to set + (PBYTE)&HmacInfo, // the HMAC parameters (SHA256 with default ipad and opad) + NULLFLAGS // flags are reserved up to Windows 8.1 + ) && + + CryptHashData + ( + hHmacHash, // hash handle + data, // Pointer to data you want to hash + len, // data length + NULLFLAGS // default flags + ) && + + CryptGetHashParam + ( + hHmacHash, // hash handle + HP_HASHVAL, // what you actually want to get (the resulting HMAC) + hmac, // data to retrieve + &dwHmacSize, // size of data + NULLFLAGS // currently reserved (as of this writing) + ); + + if (hKey) CryptDestroyKey(hKey); + if (hHmacHash) CryptDestroyHash(hHmacHash); + + return success; +} + +#endif // _WIN32 || __CYGWIN__ +#endif // _CRYPTO_WINDOWS diff --git a/crypto_windows.h b/crypto_windows.h new file mode 100644 index 0000000..6ab8c98 --- /dev/null +++ b/crypto_windows.h @@ -0,0 +1,31 @@ +/* + * crypto_windows.h + */ + +#ifdef _CRYPTO_WINDOWS +#ifndef CRYPTO_WINDOWS_H_ +#define CRYPTO_WINDOWS_H_ + +#if !_WIN32 && !__CYGWIN__ +#error You cannot use Windows CryptoAPI on non-Windows platforms +#else // _WIN32 || __CYGWIN__ + +#include "types.h" + +typedef struct _Sha2356HmacCtx +{ + HCRYPTHASH hHmac; + HCRYPTKEY hKey; +} Sha256HmacCtx; + +int_fast8_t Sha256(BYTE *data, DWORD len, BYTE *hash); +int_fast8_t Sha256Hmac(const BYTE* key, BYTE* restrict data, DWORD len, BYTE* restrict hmac); + +/*int_fast8_t Sha256HmacInit(Sha256HmacCtx *Ctx, BYTE *key, uint8_t keySize); +int_fast8_t Sha256HmacUpdate(Sha256HmacCtx *Ctx, BYTE *data, DWORD len); +int_fast8_t Sha256HmacFinish(Sha256HmacCtx *Ctx, BYTE *hmac);*/ + + +#endif // _WIN32 || __CYGWIN__ +#endif /* CRYPTO_WINDOWS_H_ */ +#endif // _CRYPTO_WINDOWS diff --git a/dns_srv.c b/dns_srv.c new file mode 100644 index 0000000..6d31e35 --- /dev/null +++ b/dns_srv.c @@ -0,0 +1,330 @@ +/* + * dns_srv.c + * + * This file contains the code for KMS SRV record lookup in DNS (_vlmcs._tcp.example.com IN SRV 0 0 1688 mykms.example.com) + * + */ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef NO_DNS + +#include "dns_srv.h" + +#include +#include +#ifndef _WIN32 +#include +#include +#include +#include +#include +//#ifndef DNS_PARSER_INTERNAL +#if __ANDROID__ +#include +#include "nameser.h" +#include "resolv.h" +#else // other Unix non-Android +#include +#include +#include +#endif // other Unix non-Android +//#endif // DNS_PARSER_INTERNAL +#else // WIN32 +#include +#endif // WIN32 + +#include "helpers.h" +#include "output.h" +#include "endian.h" + +#if defined(DNS_PARSER_INTERNAL) && !defined(_WIN32) + +#include "ns_name.h" +#include "ns_parse.h" + +// Define macros to redirect DNS parser functions to internal versions + +#undef ns_msg +#undef ns_initparse +#undef ns_parserr +#undef ns_rr +#undef ns_name_uncompress +#undef ns_msg_base +#undef ns_msg_end +#undef ns_rr_rdata +#undef ns_rr_type +#undef ns_msg_count +#undef ns_rr_class +#undef ns_s_an +#define ns_msg ns_msg_vlmcsd +#define ns_initparse ns_initparse_vlmcsd +#define ns_parserr ns_parserr_vlmcsd +#define ns_rr ns_rr_vlmcsd +#define ns_name_uncompress ns_name_uncompress_vlmcsd +#define ns_msg_base ns_msg_base_vlmcsd +#define ns_msg_end ns_msg_end_vlmcsd +#define ns_rr_rdata ns_rr_rdata_vlmcsd +#define ns_rr_type ns_rr_type_vlmcsd +#define ns_msg_count ns_msg_count_vlmcsd +#define ns_rr_class ns_rr_class_vlmcsd +#define ns_s_an ns_s_an_vlmcsd + +#ifndef NS_MAXLABEL +#define NS_MAXLABEL 63 +#endif + +#endif // defined(DNS_PARSER_INTERNAL) && !defined(_WIN32) + + +//TODO: maybe move to helpers.c +static unsigned int isqrt(unsigned int n) +{ + unsigned int c = 0x8000; + unsigned int g = 0x8000; + + for(;;) + { + if(g*g > n) + g ^= c; + + c >>= 1; + + if(c == 0) return g; + + g |= c; + } +} + + +/* + * Compare function for qsort to sort SRV records by priority and weight + * random_weight must be product of weight from SRV record and square root of a random number + */ +static int kmsServerListCompareFunc1(const void* a, const void* b) +{ + if ( !a && !b) return 0; + if ( a && !b) return -1; + if ( !a && b) return 1; + + int priority_order = (int)((*(kms_server_dns_ptr*)a)->priority) - ((int)(*(kms_server_dns_ptr*)b)->priority); + + if (priority_order) return priority_order; + + return (int)((*(kms_server_dns_ptr*)b)->random_weight) - ((int)(*(kms_server_dns_ptr*)a)->random_weight); +} + +/* Sort resulting SRV records */ +void sortSrvRecords(kms_server_dns_ptr* serverlist, const int answers) +{ + int i; + + for (i = 0; i < answers; i++) + { + serverlist[i]->random_weight = (rand32() % 256) * isqrt(serverlist[i]->weight * 1000); + } + + qsort(serverlist, answers, sizeof(kms_server_dns_ptr), kmsServerListCompareFunc1); +} + + +#define RECEIVE_BUFFER_SIZE 2048 +#ifndef _WIN32 // UNIX resolver + +/* + * Retrieves a raw DNS answer (a buffer of what came over the net) + * Result must be parsed + */ +static int getDnsRawAnswer(const char *restrict query, unsigned char** receive_buffer) +{ + if (res_init() < 0) + { + errorout("Cannot initialize resolver: %s", strerror(errno)); + return 0; + } + + //if(!(*receive_buffer = (unsigned char*)malloc(RECEIVE_BUFFER_SIZE))) OutOfMemory(); + *receive_buffer = (unsigned char*)vlmcsd_malloc(RECEIVE_BUFFER_SIZE); + + int bytes_received; + + if (*query == '.') + { +# if __ANDROID__ || __GLIBC__ /* including __UCLIBC__*/ || __APPLE__ || __CYGWIN__ || __FreeBSD__ || __NetBSD__ || __DragonFly__ || __OpenBSD__ || __sun__ + bytes_received = res_querydomain("_vlmcs._tcp", query + 1, ns_c_in, ns_t_srv, *receive_buffer, RECEIVE_BUFFER_SIZE); +# else + char* querystring = (char*)alloca(strlen(query) + 12); + strcpy(querystring, "_vlmcs._tcp"); + strcat(querystring, query); + bytes_received = res_query(querystring, C_IN, ns_t_srv, *receive_buffer, RECEIVE_BUFFER_SIZE); +# endif + } + else + { + bytes_received = res_search("_vlmcs._tcp", ns_c_in, ns_t_srv, *receive_buffer, RECEIVE_BUFFER_SIZE); + } + + if (bytes_received < 0) + { + errorout("Fatal: DNS query to %s%s failed: %s\n", "_vlmcs._tcp", *query == '.' ? query : "", hstrerror(h_errno)); + return 0; + } + + return bytes_received; +} + +/* + * Retrieves an unsorted array of SRV records (Unix / Posix) + */ +int getKmsServerList(kms_server_dns_ptr** serverlist, const char *restrict query) +{ + unsigned char* receive_buffer; + *serverlist = NULL; + + int bytes_received = getDnsRawAnswer(query, &receive_buffer); + + if (bytes_received == 0) return 0; + + ns_msg msg; + + if (ns_initparse(receive_buffer, bytes_received, &msg) < 0) + { + errorout("Fatal: Incorrect DNS response: %s\n", strerror(errno)); + free(receive_buffer); + return 0; + } + + uint16_t i, answers = ns_msg_count(msg, ns_s_an); + //if(!(*serverlist = (kms_server_dns_ptr*)malloc(answers * sizeof(kms_server_dns_ptr)))) OutOfMemory(); + *serverlist = (kms_server_dns_ptr*)malloc(answers * sizeof(kms_server_dns_ptr)); + + memset(*serverlist, 0, answers * sizeof(kms_server_dns_ptr)); + + for (i = 0; i < answers; i++) + { + ns_rr rr; + + if (ns_parserr(&msg, ns_s_an, i, &rr) < 0) + { + errorout("Warning: Error in DNS resource record: %s\n", strerror(errno)); + continue; + } + + if (ns_rr_type(rr) != ns_t_srv) + { + errorout("Warning: DNS server returned non-SRV record\n"); + continue; + } + + if (ns_rr_class(rr) != ns_c_in) + { + errorout("Warning: DNS server returned non-IN class record\n"); + continue; + } + + dns_srv_record_ptr srvrecord = (dns_srv_record_ptr)ns_rr_rdata(rr); + kms_server_dns_ptr kms_server = (kms_server_dns_ptr)vlmcsd_malloc(sizeof(kms_server_dns_t)); + + (*serverlist)[i] = kms_server; + + if (ns_name_uncompress(ns_msg_base(msg), ns_msg_end(msg), srvrecord->name, kms_server->serverName, sizeof(kms_server->serverName)) < 0) + { + errorout("Warning: No valid DNS name returned in SRV record: %s\n", strerror(errno)); + continue; + } + + sprintf(kms_server->serverName + strlen(kms_server->serverName), ":%hu", GET_UA16BE(&srvrecord->port)); + kms_server->priority = GET_UA16BE(&srvrecord->priority); + kms_server->weight = GET_UA16BE(&srvrecord->weight); + + } + + free(receive_buffer); + return answers; +} + +#else // WIN32 (Windows Resolver) + +/* + * Retrieves an unsorted array of SRV records (Windows) + */ +int getKmsServerList(kms_server_dns_ptr** serverlist, const char *const restrict query) +{ +# define MAX_DNS_NAME_SIZE 254 + *serverlist = NULL; + PDNS_RECORD receive_buffer; + char dnsDomain[MAX_DNS_NAME_SIZE]; + char FqdnQuery[MAX_DNS_NAME_SIZE]; + DWORD size = MAX_DNS_NAME_SIZE; + DNS_STATUS result; + int answers = 0; + PDNS_RECORD dns_iterator; + + if (*query == '-') + { + if (!GetComputerNameExA(ComputerNamePhysicalDnsDomain, dnsDomain, &size)) + { + errorout("Fatal: Could not determine computer's DNS name: %s\n", vlmcsd_strerror(GetLastError())); + return 0; + } + + strcpy(FqdnQuery, "_vlmcs._tcp."); + strncat(FqdnQuery, dnsDomain, MAX_DNS_NAME_SIZE - 12); + } + else + { + strcpy(FqdnQuery, "_vlmcs._tcp"); + strncat(FqdnQuery, query, MAX_DNS_NAME_SIZE - 11); + } + + if ((result = DnsQuery_UTF8(FqdnQuery, DNS_TYPE_SRV, 0, NULL, &receive_buffer, NULL)) != 0) + { + errorout("Fatal: DNS query to %s failed: %s\n", FqdnQuery, vlmcsd_strerror(result)); + return 0; + } + + for (dns_iterator = receive_buffer; dns_iterator; dns_iterator = dns_iterator->pNext) + { + if (dns_iterator->Flags.S.Section != 1) continue; + + if (dns_iterator->wType != DNS_TYPE_SRV) + { + errorout("Warning: DNS server returned non-SRV record\n"); + continue; + } + + answers++; + } + + *serverlist = (kms_server_dns_ptr*)vlmcsd_malloc(answers * sizeof(kms_server_dns_ptr)); + + for (answers = 0, dns_iterator = receive_buffer; dns_iterator; dns_iterator = dns_iterator->pNext) + { + if (dns_iterator->wType != DNS_TYPE_SRV) continue; + + kms_server_dns_ptr kms_server = (kms_server_dns_ptr)vlmcsd_malloc(sizeof(kms_server_dns_t)); + + memset(kms_server, 0, sizeof(kms_server_dns_t)); + + snprintf(kms_server->serverName, sizeof(kms_server->serverName), "%s:%hu", dns_iterator->Data.SRV.pNameTarget, dns_iterator->Data.SRV.wPort); + kms_server->priority = dns_iterator->Data.SRV.wPriority; + kms_server->weight = dns_iterator->Data.SRV.wWeight; + + (*serverlist)[answers++] = kms_server; + } + + //sortSrvRecords(*serverlist, answers, NoSrvRecordPriority); + + DnsRecordListFree(receive_buffer, DnsFreeRecordList); + + return answers; +# undef MAX_DNS_NAME_SIZE +} +#endif // _WIN32 +#undef RECEIVE_BUFFER_SIZE +#endif // NO_DNS + + diff --git a/dns_srv.h b/dns_srv.h new file mode 100644 index 0000000..d24173d --- /dev/null +++ b/dns_srv.h @@ -0,0 +1,103 @@ +/* + * dns_srv.h + * + */ + +#ifndef DNS_SRV_H_ +#define DNS_SRV_H_ +#ifndef NO_DNS + + +#include "types.h" + +typedef struct +{ + uint32_t random_weight; + uint16_t priority; + uint16_t weight; + char serverName[260]; +} kms_server_dns_t, *kms_server_dns_ptr; + +typedef struct +{ + uint16_t priority; + uint16_t weight; + uint16_t port; + unsigned char name[1]; +} dns_srv_record_t, *dns_srv_record_ptr; + +#if __OpenBSD__ +typedef enum __ns_type { + ns_t_invalid = 0, /*%< Cookie. */ + ns_t_a = 1, /*%< Host address. */ + ns_t_ns = 2, /*%< Authoritative server. */ + ns_t_md = 3, /*%< Mail destination. */ + ns_t_mf = 4, /*%< Mail forwarder. */ + ns_t_cname = 5, /*%< Canonical name. */ + ns_t_soa = 6, /*%< Start of authority zone. */ + ns_t_mb = 7, /*%< Mailbox domain name. */ + ns_t_mg = 8, /*%< Mail group member. */ + ns_t_mr = 9, /*%< Mail rename name. */ + ns_t_null = 10, /*%< Null resource record. */ + ns_t_wks = 11, /*%< Well known service. */ + ns_t_ptr = 12, /*%< Domain name pointer. */ + ns_t_hinfo = 13, /*%< Host information. */ + ns_t_minfo = 14, /*%< Mailbox information. */ + ns_t_mx = 15, /*%< Mail routing information. */ + ns_t_txt = 16, /*%< Text strings. */ + ns_t_rp = 17, /*%< Responsible person. */ + ns_t_afsdb = 18, /*%< AFS cell database. */ + ns_t_x25 = 19, /*%< X_25 calling address. */ + ns_t_isdn = 20, /*%< ISDN calling address. */ + ns_t_rt = 21, /*%< Router. */ + ns_t_nsap = 22, /*%< NSAP address. */ + ns_t_nsap_ptr = 23, /*%< Reverse NSAP lookup (deprecated). */ + ns_t_sig = 24, /*%< Security signature. */ + ns_t_key = 25, /*%< Security key. */ + ns_t_px = 26, /*%< X.400 mail mapping. */ + ns_t_gpos = 27, /*%< Geographical position (withdrawn). */ + ns_t_aaaa = 28, /*%< Ip6 Address. */ + ns_t_loc = 29, /*%< Location Information. */ + ns_t_nxt = 30, /*%< Next domain (security). */ + ns_t_eid = 31, /*%< Endpoint identifier. */ + ns_t_nimloc = 32, /*%< Nimrod Locator. */ + ns_t_srv = 33, /*%< Server Selection. */ + ns_t_atma = 34, /*%< ATM Address */ + ns_t_naptr = 35, /*%< Naming Authority PoinTeR */ + ns_t_kx = 36, /*%< Key Exchange */ + ns_t_cert = 37, /*%< Certification record */ + ns_t_a6 = 38, /*%< IPv6 address (deprecated, use ns_t_aaaa) */ + ns_t_dname = 39, /*%< Non-terminal DNAME (for IPv6) */ + ns_t_sink = 40, /*%< Kitchen sink (experimentatl) */ + ns_t_opt = 41, /*%< EDNS0 option (meta-RR) */ + ns_t_apl = 42, /*%< Address prefix list (RFC3123) */ + ns_t_tkey = 249, /*%< Transaction key */ + ns_t_tsig = 250, /*%< Transaction signature. */ + ns_t_ixfr = 251, /*%< Incremental zone transfer. */ + ns_t_axfr = 252, /*%< Transfer zone of authority. */ + ns_t_mailb = 253, /*%< Transfer mailbox records. */ + ns_t_maila = 254, /*%< Transfer mail agent records. */ + ns_t_any = 255, /*%< Wildcard match. */ + ns_t_zxfr = 256, /*%< BIND-specific, nonstandard. */ + ns_t_max = 65536 +} ns_type; + +typedef enum __ns_class { + ns_c_invalid = 0, /*%< Cookie. */ + ns_c_in = 1, /*%< Internet. */ + ns_c_2 = 2, /*%< unallocated/unsupported. */ + ns_c_chaos = 3, /*%< MIT Chaos-net. */ + ns_c_hs = 4, /*%< MIT Hesiod. */ + /* Query class values which do not appear in resource records */ + ns_c_none = 254, /*%< for prereq. sections in update requests */ + ns_c_any = 255, /*%< Wildcard match. */ + ns_c_max = 65536 +} ns_class; + +#endif + +int getKmsServerList(kms_server_dns_ptr** serverlist, const char *restrict query); +void sortSrvRecords(kms_server_dns_ptr* serverlist, const int answers); + +#endif // NO_DNS +#endif /* DNS_SRV_H_ */ diff --git a/endian.c b/endian.c new file mode 100644 index 0000000..e2bb76c --- /dev/null +++ b/endian.c @@ -0,0 +1,171 @@ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "endian.h" + +#if defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN) \ + && defined(BS16) && defined(BS32) && defined(BS64) + +#else // ! defined(__BYTE_ORDER) + +void PUT_UAA64BE(void *p, unsigned long long v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + _p[ 0 ] = v >> 56; + _p[ 1 ] = v >> 48; + _p[ 2 ] = v >> 40; + _p[ 3 ] = v >> 32; + _p[ 4 ] = v >> 24; + _p[ 5 ] = v >> 16; + _p[ 6 ] = v >> 8; + _p[ 7 ] = v; +} + +void PUT_UAA32BE(void *p, unsigned int v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + _p[ 0 ] = v >> 24; + _p[ 1 ] = v >> 16; + _p[ 2 ] = v >> 8; + _p[ 3 ] = v; +} + +void PUT_UAA16BE(void *p, unsigned short v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + _p[ 0 ] = v >> 8; + _p[ 1 ] = v; +} + + +void PUT_UAA64LE(void *p, unsigned long long v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + _p[ 0 ] = v; + _p[ 1 ] = v >> 8; + _p[ 2 ] = v >> 16; + _p[ 3 ] = v >> 24; + _p[ 4 ] = v >> 32; + _p[ 5 ] = v >> 40; + _p[ 6 ] = v >> 48; + _p[ 7 ] = v >> 56; +} + +void PUT_UAA32LE(void *p, unsigned int v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + _p[ 0 ] = v; + _p[ 1 ] = v >> 8; + _p[ 2 ] = v >> 16; + _p[ 3 ] = v >> 24; +} + +void PUT_UAA16LE(void *p, unsigned short v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + _p[ 0 ] = v; + _p[ 1 ] = v >> 8; +} + + +unsigned long long GET_UAA64BE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + return + (unsigned long long)_p[ 0 ] << 56 | + (unsigned long long)_p[ 1 ] << 48 | + (unsigned long long)_p[ 2 ] << 40 | + (unsigned long long)_p[ 3 ] << 32 | + (unsigned long long)_p[ 4 ] << 24 | + (unsigned long long)_p[ 5 ] << 16 | + (unsigned long long)_p[ 6 ] << 8 | + (unsigned long long)_p[ 7 ]; + +} + +unsigned int GET_UAA32BE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + return + (unsigned int)_p[ 0 ] << 24 | + (unsigned int)_p[ 1 ] << 16 | + (unsigned int)_p[ 2 ] << 8 | + (unsigned int)_p[ 3 ]; +} + +unsigned short GET_UAA16BE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + return + (unsigned short)_p[ 0 ] << 8 | + (unsigned short)_p[ 1 ]; +} + + +unsigned long long GET_UAA64LE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + return + (unsigned long long)_p[ 0 ] | + (unsigned long long)_p[ 1 ] << 8 | + (unsigned long long)_p[ 2 ] << 16 | + (unsigned long long)_p[ 3 ] << 24 | + (unsigned long long)_p[ 4 ] << 32 | + (unsigned long long)_p[ 5 ] << 40 | + (unsigned long long)_p[ 6 ] << 48 | + (unsigned long long)_p[ 7 ] << 56; + +} + +unsigned int GET_UAA32LE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + return + (unsigned int)_p[ 0 ] | + (unsigned int)_p[ 1 ] << 8 | + (unsigned int)_p[ 2 ] << 16 | + (unsigned int)_p[ 3 ] << 24; +} + +unsigned short GET_UAA16LE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + return + (unsigned short)_p[ 0 ] | + (unsigned short)_p[ 1 ] << 8; +} + + +unsigned short BE16(unsigned short x) +{ + return GET_UAA16BE(&x, 0); +} + +unsigned short LE16(unsigned short x) +{ + return GET_UAA16LE(&x, 0); +} + +unsigned int BE32(unsigned int x) +{ + return GET_UAA32BE(&x, 0); +} + +unsigned int LE32(unsigned int x) +{ + return GET_UAA32LE(&x, 0); +} + +unsigned long long BE64(unsigned long long x) +{ + return GET_UAA64BE(&x, 0); +} + +inline unsigned long long LE64(unsigned long long x) +{ + return GET_UAA64LE(&x, 0); +} + +#endif // defined(__BYTE_ORDER) diff --git a/endian.h b/endian.h new file mode 100644 index 0000000..8439ff8 --- /dev/null +++ b/endian.h @@ -0,0 +1,296 @@ +#ifndef __endian_h +#define __endian_h + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +// +// Unaligned access +// +#define UAA16(p, i) (((PACKED16*)p)->val[i]) +#define UAA32(p, i) (((PACKED32*)p)->val[i]) +#define UAA64(p, i) (((PACKED64*)p)->val[i]) + +#define UA64(p) UAA64(p, 0) +#define UA32(p) UAA32(p, 0) +#define UA16(p) UAA16(p, 0) + +// +//Byteswap: Use compiler support if available +// +#ifdef __has_builtin // Clang supports this + +#if __has_builtin(__builtin_bswap16) +#define BS16(x) __builtin_bswap16(x) +#endif + +#if __has_builtin(__builtin_bswap32) +#define BS32(x) __builtin_bswap32(x) +#endif + +#if __has_builtin(__builtin_bswap64) +#define BS64(x) __builtin_bswap64(x) +#endif + +#endif // has_builtin + +#ifdef __GNUC__ // GNU C >= 4.3 has bswap32 and bswap64. GNU C >= 4.8 also has bswap16 +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ > 2) + +#ifndef BS32 +#define BS32(x) __builtin_bswap32(x) +#endif + +#ifndef BS64 +#define BS64(x) __builtin_bswap64(x) +#endif + +#if (__GNUC__ > 4) || (__GNUC_MINOR__ > 7) + +#ifndef BS16 +#define BS16(x) __builtin_bswap16(x) +#endif + +#endif // GNU C > 4.7 +#endif // __GNUC__ > 4 +#endif // __GNUC__ + +// +// Byteorder +// +#if defined(__linux__) || defined(__GLIBC__) || defined(__CYGWIN__) + +#include +#include + +#ifndef BS16 +#define BS16(x) bswap_16(x) +#endif + +#ifndef BS32 +#define BS32(x) bswap_32(x) +#endif + +#ifndef BS64 +#define BS64(x) bswap_64(x) +#endif + +#elif defined(__sun__) + +#include + +#ifndef BS16 +#define BS16(x) BSWAP_16(x) +#endif + +#ifndef BS32 +#define BS32(x) BSWAP_32(x) +#endif + +#ifndef BS64 +#define BS64(x) BSWAP_64(x) +#endif + +#define __LITTLE_ENDIAN 1234 +#define __BIG_ENDIAN 4321 + +#ifdef _LITTLE_ENDIAN +#define __BYTE_ORDER __LITTLE_ENDIAN +#else +#define __BYTE_ORDER __BIG_ENDIAN +#endif + +#elif __minix__ || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) + +#include +#include + +#define __BYTE_ORDER _BYTE_ORDER +#define __LITTLE_ENDIAN _LITTLE_ENDIAN +#define __BIG_ENDIAN _BIG_ENDIAN + +#ifdef __OpenBSD__ + +#ifndef BS16 +#define BS16 swap16 +#endif + +#ifndef BS32 +#define BS32 swap32 +#endif + +#ifndef BS64 +#define BS64 swap64 +#endif + +#else // !__OpenBSD__ + +#ifndef BS16 +#define BS16 bswap16 +#endif + +#ifndef BS32 +#define BS32 bswap32 +#endif + +#ifndef BS64 +#define BS64 bswap64 +#endif + +#endif // !__OpenBSD__ + +#elif defined(__APPLE__) + +#include +#include +#include + +#define __BYTE_ORDER _BYTE_ORDER +#define __LITTLE_ENDIAN _LITTLE_ENDIAN +#define __BIG_ENDIAN _BIG_ENDIAN + +#ifndef BS16 +#define BS16 OSSwapInt16 +#endif + +#ifndef BS32 +#define BS32 OSSwapInt32 +#endif + +#ifndef BS64 +#define BS64 OSSwapInt64 +#endif + +#elif defined(_WIN32) + +#define __LITTLE_ENDIAN 1234 +#define __BIG_ENDIAN 4321 +#define __BYTE_ORDER __LITTLE_ENDIAN + +#include + +#ifndef BS16 +#define BS16 _byteswap_ushort +#endif + +#ifndef BS32 +#define BS32 _byteswap_ulong +#endif + +#ifndef BS64 +#define BS64 _byteswap_uint64 +#endif + +#endif // Byteorder in different OS + + +#if defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN) \ + && defined(BS16) && defined(BS32) && defined(BS64) + +#if __BYTE_ORDER == __LITTLE_ENDIAN + +#define __BE16(x) BS16(x) +#define __LE16(x) (x) +#define __BE32(x) BS32(x) +#define __LE32(x) (x) +#define __BE64(x) BS64(x) +#define __LE64(x) (x) + +#else // __BYTE_ORDER == __BIG_ENDIAN + +#define __BE16(x) (x) +#define __LE16(x) BS16(x) +#define __BE32(x) (x) +#define __LE32(x) BS32(x) +#define __BE64(x) (x) +#define __LE64(x) BS64(x) + +#endif // __BYTE_ORDER + +#define PUT_UAA64BE(p, v, i) ( UAA64(p, i) = __BE64(v) ) +#define PUT_UAA32BE(p, v, i) ( UAA32(p, i) = __BE32(v) ) +#define PUT_UAA16BE(p, v, i) ( UAA16(p, i) = __BE16(v) ) + +#define PUT_UAA64LE(p, v, i) ( UAA64(p, i) = __LE64(v) ) +#define PUT_UAA32LE(p, v, i) ( UAA32(p, i) = __LE32(v) ) +#define PUT_UAA16LE(p, v, i) ( UAA16(p, i) = __LE16(v) ) + +#define GET_UAA64BE(p, i) __BE64(UAA64(p, i)) +#define GET_UAA32BE(p, i) __BE32(UAA32(p, i)) +#define GET_UAA16BE(p, i) __BE16(UAA16(p, i)) + +#define GET_UAA64LE(p, i) __LE64(UAA64(p, i)) +#define GET_UAA32LE(p, i) __LE32(UAA32(p, i)) +#define GET_UAA16LE(p, i) __LE16(UAA16(p, i)) + +#define BE16(x) __BE16(x) +#define LE16(x) __LE16(x) +#define BE32(x) __BE32(x) +#define LE32(x) __LE32(x) +#define BE64(x) __BE64(x) +#define LE64(x) __LE64(x) + +#else // ! defined(__BYTE_ORDER) + +extern void PUT_UAA64BE(void *p, unsigned long long v, unsigned int i); + +extern void PUT_UAA32BE(void *p, unsigned int v, unsigned int i); + +extern void PUT_UAA16BE(void *p, unsigned short v, unsigned int i); + + +extern void PUT_UAA64LE(void *p, unsigned long long v, unsigned int i); + +extern void PUT_UAA32LE(void *p, unsigned int v, unsigned int i); + +extern void PUT_UAA16LE(void *p, unsigned short v, unsigned int i); + + +extern unsigned long long GET_UAA64BE(void *p, unsigned int i); + +extern unsigned int GET_UAA32BE(void *p, unsigned int i); + +extern unsigned short GET_UAA16BE(void *p, unsigned int i); + + +extern unsigned long long GET_UAA64LE(void *p, unsigned int i); + +extern unsigned int GET_UAA32LE(void *p, unsigned int i); + +extern unsigned short GET_UAA16LE(void *p, unsigned int i); + + +extern unsigned short BE16(unsigned short x); + +extern unsigned short LE16(unsigned short x); + +extern unsigned int BE32(unsigned int x); + +extern unsigned int LE32(unsigned int x); + +extern unsigned long long BE64(unsigned long long x); + +extern unsigned long long LE64(unsigned long long x); + +#endif // defined(__BYTE_ORDER) + + +#define PUT_UA64BE(p, v) PUT_UAA64BE(p, v, 0) +#define PUT_UA32BE(p, v) PUT_UAA32BE(p, v, 0) +#define PUT_UA16BE(p, v) PUT_UAA16BE(p, v, 0) + +#define PUT_UA64LE(p, v) PUT_UAA64LE(p, v, 0) +#define PUT_UA32LE(p, v) PUT_UAA32LE(p, v, 0) +#define PUT_UA16LE(p, v) PUT_UAA16LE(p, v, 0) + +#define GET_UA64BE(p) GET_UAA64BE(p, 0) +#define GET_UA32BE(p) GET_UAA32BE(p, 0) +#define GET_UA16BE(p) GET_UAA16BE(p, 0) + +#define GET_UA64LE(p) GET_UAA64LE(p, 0) +#define GET_UA32LE(p) GET_UAA32LE(p, 0) +#define GET_UA16LE(p) GET_UAA16LE(p, 0) + +#endif // __endian_h diff --git a/floppy144.vfd b/floppy144.vfd new file mode 100644 index 0000000000000000000000000000000000000000..0e6bc423cdb738d7cc1ee4a4ff97e83fc70788cb GIT binary patch literal 1474560 zcmeFacUV-%_c%Ov`_guiZh@r=7GyOl$b$4DpcH8mn!p8Y;Ia!E+v0+7SwW2&HEIO0 zf<}x52noei5Dl@UY5bVb)Vr=m4Hgh(-*XrJ{R&_9n;y~|A1!bO6G-eLX%cmli^3ugi} zuxd_Nf6As+q8oGGpoxvT_(|&LGyA(tyDZdi-w8V_Zhe=(E|L{%8B@`A)}dw1x`Cq= zcbnEA-ubz_${4}zH4}ubXIaF2B9JzaezeTMe0^!yU^qNoM(U-C=o*FeMB85s>~Hzo zMft+Qx8JbyroQ$+ze#HE8rC2Y;2ze2;ftkw*@lLvQXO0)eFFcanimlP@H;h|f^#OW zKhGgmNNgnNm-5;kb9@NX@$2P1^9jgoxTz-kyf=9riTQ=Y(KS+?*KL@D+0F{sfba%u zs6PHJ#e*g!BMlH<=s8g~%W!p$RH7QB;dEBYI^4)KeO)6Tsi)$RcsMI+8Mcg1Jj7GZ z`;Y|)Pc2X9i!mjhB5WnIz}x#fMR_Wog7fOH4q~qsu=Bjw(iC=qjJ>v!y{?tL zp_{!4aS8<-xfiE6g;OHq5S1K7E2q4hvkh@~2)H}FxVuxhdt}^wmE8TU+=JcRLrAAe zpi}Lob2LTgxJ>6{rA}?D&gpKQGf4NWK=+)N?u8WHdYNuxrEXKJ?)TlgEl96Tpr`cG zyON^UA=B%u)VtoQ*VV0e1L@xq=>O!U|4WMgZ!-P6mHPKu_3wA<|A`EG1O|Ox1`kpU z9?1+;l?LiogQwjF&k*m0fH&a9dzHd_BjXKK@`hV^@4I;##K)}pbZ>n^ES;$HO(wE&8{+C-e$V8$212sTWxKY z=WQlUH7h7ITU%weuFY&ikJ%>7ywKWQ?rmP2YF<)kPE?sI+RV#)%(r0{JFG2sdRy#H zwb)Z=v9HQvf1Aa@9*aZR_$ur1)!yTerj9>eIR0eS_}aGdr+dbq!6uxwo^Z~4!iCfc z^@S4}t0pwHP58cNLJKyr&3dBJd*YSUi5-O#JF6yMZ=2ZFGw}vC>6Z1RpS&mik~-

O3Zwjr3 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�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ß?7N zzjxjDZUcTLKLGuOb|%iI$)%7vf@0xzsxMv-QdIh`{n)r&`@q}yFyH^wh3OTR)|)Vo z8Iy=vPg^~_pX(CvDI3wi>$u3dGS;yqXibR*+pIJ2({d8^)?2Z6q|@19`> z;DNjcdozz4#{tLM@LmRHk9Wbpu+_-DBdu-#YnnPO6M}Ae1hTKHq(b_CksiVN02@zK zI%&MTxo@{a+L7Cw{!a$Di==rh~7+bG4 zw`~8c?;UTU$4GHoVBVckMBta96{ml8ZUmS+^b$;5DoSU+Beu6e3B`9>55YG*l|vY9 zM+vOj^l6D~Du0o$-#2?cOoU_&#qOSxrC6ff36vAN(q%0cFd% zVBYJppG7h7qW1N%$}d1G640Ck zAGyY5Rl2_8*`o85+_<7Apsq#NFr}e}_=INkJ$pmLkvBs0b(&~!HUAi=1sbMo ztjFRNUMv#Df$ghT58)W1ritmUs~7cFIGwlE)vQY3XP7b$RC^WlkI%y59$@GHe%);j zt0c!hh%n=RP9!rZ3D{wme*uIMGEfXbAGakYHmw7(9R7Xx8vIMYLPGZP@Najuy75fbV$-u3?y!JM>V z*K}XUEVU5W74o_O%nC$W!ZN~jv`KG#$C=-l@H*D;^J_F%ZIUt6r0#vROrCDg?GE-9 zHQ0i>+IpBA&c;qr*IGp3)}h|t41%`zA$X!`4CAf{Wpt8Q3t3?WfGFsJ`DL}%6xOMk z76rC+wydQQecr$0@u9x4MKBoeG+Td%l0#HyMyMiY%5A3WFhr{Ue5IP&gYFK)TNIj2 zYaI5BHmNHLU~b{L6&d3_`xN1?x=X{e?)F5hHG}pHB~{znfb?YAS@=w90j^+qH>lpx z^l=|;3yicPlB_LV?dl?krUzr+w(y%~5+r=>Je>kws9fPu^#3; zPMX3nsfZG_Rt;1es1e|D^}^OLcQ4k)SH9|Y$NwiDhBAHMI^sGmP7c*htn(Moj%^(( zowe?q1kCmHv*Kz@r}X`vCXs`0eO@Y$Y;+{EFYhYV{>@WTFC)LD9XN1|%e98!Kv6y5gHZ>+o?;TsI4*C5Xf$Y*TG<7K}4JI^DUx_VKh4k}(7!-9uiJgf3a( z)dW82pq;}TwR_Yq-kJT#f}mb$iAwoj=bY)vp~LE|??fV}vgT({9Wf)ZGvKSejAm*f zrylTXQNnDH)^&<D67@>?@o7Q=NWyigam~ z7i`T}My@+=447ds3Z$@oJ~rkI`KkM!gX<|E){1TADrhz(8qb#5?6)@D zgc^@{n7y%aa22oUh()fygY6^4*IjnJ)MiW?5&6+>NdP!8rMPmu1+1J=mnCyeJ)J>| z>b9{Q+$}zJ=1KRcyutccxB~X9(hk>^Tu@oT;SE?Oos-C50@}r4Vj>fKo#F*eQ6d7i zA(%5LB+;@P!f1*1;r$n6@tj~u`bR#@ZtQMuuLBGj;#K`8yS5pg*KH0gEQK1R+)t_S zK&*n$uKf~Sifk+rtu>sEN;MP~`|qK~MO3Z}&-c?_;)fVL;4=XIlGd&=lQi+&7SLU? zp*7!upb`~tzYeSHGm}ybmBjDhWrxM1;eVI%QWo>TRyW%gZukJlWu&SN5#Cj23slUD z(8pGy+MdQes2E24CrXa7RU*POy-*0RT(a+)E#OU8UQ&j5*`D#8ndIjYdP65fi8dX^meWh_yDIEv?^)dG!y!;a%dX3?NH743qTWYn$$?LjG;!nk z%br|*A8R9vUGvcK}Q1-hpPBoka@MW%=K=e>+FH>Jp<;$CBbz3avhG=ncw;IurqpdpQ@Xrvj{kMOTcZ= zR@8aw`OY*V1)Fr$*o6oCz3ZQIC9=H)_fn@JP;q;N$t?(g#;|4V(3#V30c{gj;B|My zc93MU%c1cMp+MSdqiu2gk2&fZ&It}Hwa$&NkuEK?+W}uovjr0UGIdF%ZFLUw>_|R3 zF#MwihfGxhpc|$TIoy}o*8`s{_r|G!SfIDnG(!^(e^u?)mF%4O@`rj#K7J~1V0A%1 ze3eqg#jNFQlH!Y!@*2py9YD~|C>$bx1`rtkH?eWWmv4nC0)T$^tc=iU#Go_t<1aWH zZs{N|&z4uiqpj-%jE_7xZpHQ1p|-1N@ZMAbj$AUE=f>j?U}g3?5@Kk&6i~Zi78D*b z@mXxgmD=w6N+NO320+`%K?1l7Z8u8J@;=@y6)kQ?D+Q3ELFlU% zG@X$DA3-#!lJqi{zJT#}Elb#Y)HmosiFzzHIr^Y4jcQ`?Ep5eVly0MrmsnQ0hY+ug z=5e4Rh2??v#(Vm~O<20q+8_fzm^xxy0KhKocFzR*Iu}>gAC0x3x)uf7L4m7-k`qRe zbX`*YQ|`<55Yd~gHr5RjA<%z?ufgoL48Y05>IF$gV6nOAO+d5G>{LZHs!NbT#xjmz zSUo@Rc{Ntybg{FHrnoVfUmg>WCY-ci7%CSrG@QT3Q5W~Qa-cPx=pfS1GndaVed%&y z^VM7XQi0XJqyLFCT|BgWM<7MnCsWY5l|oYcOJZHJkq5zQB-^tHIZ4GsjCM8GBSHqfDU&)lV zD9g@|q) zpTaEU!wD;lDz4*mTgbX(|Gg;z=;F=!=m)!sI&7}2(XLu>FT7USiL73>%{(8-(w|?2 z2!NjphC%$Y23!FOk#4+XL@O)>3>ZA)No9(5Ln#(opkn`?Py(CWj(x?4#v05R07j0G zI?sw{g)P2NV9Dc7Ks!BDGS;2>*U60zd=4l<2ZpVW6$Lz)`AR5sX1^=$xqs_*MQ^n! z#Tu1i?*wvI7Dy+5;@kKS&sk6G?yudfe!*^lp$^BM+lUxu(s4enU*^;8(hN|u5>&I} zl;slt?X~W$nBAaeE}MnR*N35g45DaPqw?wAfkvlyxNU>N?)$FzNq43~fO5F!zwwP# zDu>69uF8t3S(%1C?Han@FI)IfaS|ayaE1|BAuaYFruvd51)bN zC3h`PRUJ>>S!A5L*+O-@PQ~HJKxn*a0=Ho0Y5xf~LM?bzrUBG_qu$&A@bYc?(C@K= zU%fRM&5u-10>yX3XDuI6FOeZPM5l!8L(cj%NUkX-Ii6;ziJM=QHVp81fK?|n=aPbK zu)z^YZA)3bRCcS}$+Oeb2sByZ$o+H6osCYh9kT~aVAH9HqRFvo#uPCd4m1O1 z5xBWi2lFtK=|~e4%4*0QtAS77#&=LgXw36rJ8{i_4y)nyS;a@lW6Ci@@z-*A<(D#1 zOh0HgraMzdHHHZ)yn9P%K91>NsN?zKNHvqVhAmz%{xWxpASeQ?U3*cV?Yod%Qvi;4oitCqKa314S}yT?lL$%Rby6mNHxy-P zTv^p~EUuw2gyOMK-}Hu(^>5${nGKQjb-Pn~-SiXZxhAJ!p0KKReU&u@s-&yc_CKzxy&}gF>m_9Tb}Js53v}t z-KiJXxM#*U)Tr*TeU1ne^zY%u5z^+PK>dle|0h*TOX`lO<}~W(`8>8EQFw|^ulbFS zMKkzxrxxzL6*34585W}ymJT%Y`1aCJL;Iy+;(Wn(m@NL&FzOZoR<+K%axwA)4;oebRIe2KF z?zLWht-{%&g9Ggj8Q(+Ozz`hKFP_{?S8_}Mlhw2P@Yp!d(0e$)=jP=jw?>V5j=v|5 z3EDb4#j)1O1vTqEu>I~K!81;6cHj;{0g*+B%A$_Cd~#*c!HhSMX@jqm8RS*4rB{$e zF5mXp9^O|HRdTiAD4<5(^8wAZ46&fstyx(;9_;0fZD|;T9U;WQBB(-(nk+wXpUK+{X4EH?4%m~t8m!# z2sOG5Cx^F2?m=#7^|S&gf7(&xcfR* z?Az<7l*Q#FL!h>^Cxi#k?&D9FQY-f(kN%s>(6Nanh<7DTiyzXo1<$>PWs%);kYyZi zOZ?W$pHwCqVRTKe^{OP(X1qz;GuZIu)&K1-{0L>}NFG0eWVPgj1B+4uXuFe|if8sE zxp-hb1E|+!WYpLWiXUCD1D{eBJ_gm|#TLxh1NYQyyjc`^0~Rk<~cmby@^| zI|Q23Z9736x!S^kldG2Vt}<-3uK!)Pl3=i`@_QX2chDZ^rd?*Gk^@NZeqD-UPpW{} z!P*n!jMPEgRU9SIG^lmmV~8pE%$OAEIh)bba{no0@;hlJA@cfI zu1LO@7-Y{UXMu8HIh#&qo!!r_C3|dNSTp(Pf=Fj!2aVDVI83^-$@%BK39GRp-5?emBzreF*HdfMu_YJcFZ|Im|G9(ws(ZdO|BECVIz?1hrS;+AB-O7K| zE`!{!U{Ihpu{|yeGtlJdWkCXHnlxbEs)Ilem^XozDNcqs8;a!q5MH1=NQ`KTnq?;l zpE)CScF#_?rdDX{9znD|k`{f1!WtGh&oa##$H7r-95@Qo@+%n;2C5U0`gs8kdHJaisY$sQ{t!Wi{93k+JTl6bsHCH@;fGVxQSpHwRU*iwSH&@^~^gTU$Tj z!cn7m?I>@1YXz8(g0n)%;jjQB51JCk+D`@@t4xjX+g&_Y-5lLS-{ zv%O^_g=aHp^7!DV^&np(uPq4DV|tsOZ;V&KkBNR2#_&xJPb%X}i9IJkRso>9Fei;X ztOYGdL0jA`q@8X%y`*3e#*B^lVKxr4m1X028BY-bY3G?4H1q<2l8NGDGi`QyfFK6T zFk(=HG+2Jr@F1bR#o)}V*h}TgM)y(s;pYE{c8Ts`m_8=oO^5b!x<=Zp#7nXIlQuX- z&3W@74{>n2AU?CQ12t0FbD+n800Ks-RR7zvE;{mS=9LT!ingPXB4Q9v)UThzcI4Lg ztaRrM^XcO9>9(U#`<+!5aTVU%&3Xe^i!0R^(c`J9=K#21d_jGc#i@w+j!0u?M>GyY zd!|1fSt^bPa8Bnl)A^#4|2#&+en#5k>>;-^4vt#>jwpwJGERQkz9s8L;eZeVq^N`dML@^ZAP=$^?|=?wR_ zFQS&`%ojDal@5R{X1=#TOLV=)1+o%NB|2XV9`L2ebDxTQJf5ym=SmdkYWTtva*3RU zV%^rwI@Pb?-ZFu_Yv_7!n1ZUa;*zZJS^2<~HCW{yZ<}I<@2s6*t|5yWm+Lw*r8L^z z9dDIIYCsQf)2&^ZXRGyVWDwoF25hn`Ja#!?CAX)~n$tl%ft8sq$UfelGT)R!$XM=ZwW>b^Os7e%!0Ok{Ws4*L3oiuXq=*&l4Gb=O>0M3oE; zyZq*x|IGHp+r3GjSN#Cte_Ym|=qjZj9hOY$GAGPR8tbYk+U#bNZCv@D5-`$f22CG> z?)J~D$n+`vKD!GsP5F2>`O|G<_RHZ}+~(~oD_am+&E35{HfJE4v}go6?>$0R-X>Qu zXHTUGcpf@!FObPa9mF>iRAs7iAu-73X#X%!;kily-7wB52JeN1H!q5@HQD8S5Oa~b|t#@Gx* z4lmQ*dmeKt+>RGU7^^(7%jgY~I8JzWz|W)#-!gTC-)W`(+m?S=gNShKwW~{Y#w$wr z5l$BI(28PnWcUnq-Y(!+?n3QGy{rqCvaZ@Dp1H_lM+V0>8AEb|LTKMz3=*b)cW;2m z=C6qf&jXye%v>z>xZg--B=%dW>&V81<{OK;%pg9t@SKr;$Cp-pz#ACsT7fK&y4_MW zAG*H9kOI+?Nd`Jj=5SiWHubX>8=!AK0%}7dtZ7-Wi671O_VC!kn|Bnrw&|ZbxENZ` z-5>Q9ig_VguRmA!N;oi;7U8Bo)iKj|ZF=DAGLYR}?q*P6dzEt`j-**Hhhdv(&NWnw zvMs=Y=obsuIQb+0d0T}(g>(CPw#4<|9C6h)c63HN_7JsHS02P$^0&~73JI0*LHhRv zrZ}nj!s&BK`AZt}-{sK1?@*8Ymp@Ya_>hsQ@dOTPBKq3%NdB*@HZGHFj+zZ+o2zc0 zma>PeFnjHi#)i*U_vSF#;rr(HPQ7yR8VdpcnewL<6&da9a$7*vd}22un;m4u;Dok! zho)em($Q|k9QRq{M?IX+EH0%6TZC5DrCVIFTug}>ucB%tnv>bXLeg#8;|rcvREoAl zlWd{NP;&-hTcHG~JP{_*f%#C!vj+1WV)?_1p99ME)%{MB$5g`>{d6v!cRF^sfR@~f zg`>wmq)mji3eui`Wf&f4TL<4Bp|-g!91iJ*qU?Pt6kV6t1cu>l8L1+S=HNcC<0vXN zH#@`YyU^j24KA>ix>ni@V`|I|yf=wyFg1whL)NhYHdw z^IklNg}ZYPU-id&E^bNIPJlGU!X+~CQI5AJEpsS&6o}J}inbHvV)DJ?{Xzy^bA)Z6=h5Y~?@1;LCJ5-O@spa1N5Tk^;lXxhsi8G(zu^qyzq06Pbg%Bo@y&-N~4pj%wQe7 z6QX(V-yjh!92ns%V{$cZdlQ#&a|#=aLGQik z_DF*K+QK_0oFrOpSyyJi&?R1PfeLe6@vv zNXAX#ODdPq%md`kK}<9{%|L|!9P(!hNL}N5_U1NJ3rb!G-ob3q3ty9(-WXO6|=yabiZT$}(FsK{6`K9C_^k9*DW$)}xe0&TYfJ{7j0vM@E~>0K=6F_3mF{VW{^{ zr5?3=U1#0Spl zfeONZl?ED$g4uFbKX6`oEgZ*vw_g}xw<=PxC$T>#GT(5>Qa5eh`6pIT>A^0i-T$K1 zSM0Y$L>^9txI>jQ{jbqe7ZIJqae`JjfKO|IM`iZ@{8P#3e0`tOeZK!5PC|>dnt>-1 zo!5oO;=n!;S48ymG`sLEJJ^N#;V#F!Q04L_&GMdRG`(>Mas^Cw6Q{p^@Snj6c%+BS zhO2nkRQWRFk?eF$9X+C1ZH|5~knT$POE*i1y7yU+oRiOKq_1RJz(ies`0}R`CT(Yh47IJoIs5nXCo{s(2E}gPp0l||it#PaoM*Uo1 z6IJOXYFKe`@?J$8;>6`Iau&v^Ws=ngkM?0ugea*%#j^jZ{c)RAfvPxa4r6lMieCJ- zY_%sDEl9_zj+FR`0w{on1N+a$0kL)A_8A)G-y=ugt6U2_%ZCiAHSd`zF5yTngfMxH_#+&gyXzCG*=FvUlu#tOxgeu~IU8i&kRH=2N<^sF8~ zqiqi7b*;BU=4ifEXTAi!UAtO4^}WMd8QJo)AOlM81=7))VrO=AFI;>)I3u9ZjLiw_ zKz$0%3Z1T|zf;lNB;FUxIr%xrgb1D+4{ezTX9#n7@)!qc?L=;-Br>eWkW&ah%PzxY zhVA*Bi)2;?YS4FnXIf(^Ui_PT!l;I5FovKJ{(dxDFWOY7AE}2Xb3PUWUxJk>Sx$CBjm~XHN-!IIv;L<$wM6`lD{m_}xL{~em<6>k+t$|i* zrKV*WO$`bp%|=#-uF3iM?^quQ?e|YpQP6F)03E(#7FGYppaF~sJI-bD1^eKxch#{) zjDnVy3R8;Nnsui^+tV^pO8=dm&h~{gyAF@#uR)!FJoL zt3`oW0GTrPa|lRizNS_Dtv;&F%R39hjXe;n=eY+QMbwa~^9gQ%`Mc{93B(I32;Lpz zEFq}x`tf$mz&$mhtcN$BpR=5$?6qlOGI1d=3%0=|bsi4|6qUF=8vlVo#^WAe&9QD< zL>6`OAeqjdizNEE7&g`N4?`vP18*(sxR|vbE3DOpWhrA22vn6Qirfsts?&{z5IJdu z7rPDbk-(Xxq`)j$V5n{JLl@Fdb#4x5^cRDDq_q)O)PAvUL%U~V##H3DFS22URM!T- zCb}NLP!(i>d{ao`I82{pNbZj)zsq6<5a$0|MZ?y1TYn)f{N~RWXk1TjEP+T)QBGef zHYY{@HiF#&#!F-GL|K0D2!5b=jzliN4!`o>69gjgJ46dhDJ_$-Iw0!))E@sgj$g8#tlkAUL zCi-en9M?hZ7_S&4!{r-Q&j|7R7D-9$nLWY_)@LBr#JHLY0KBP{t6C`n*j&-m09&|Z zX~qd5#Yh`48h}kNHw}tNAo|R=M&WX$qNH7qCG6657~Octai=o*KpzXIpi62fhnf#T z%XSM#>S^^mYa7X$Z=M7Vx9KJxuAV1fKfLkd$n2<86GfnBW?8|cjqk7oTwxkWC467( z=?J~2-Y%OlilpDwM}P0pHJ%i!{(dj@VKWHt0BO1Bhp_L(fP#>P)Sdg0*w?BA6g}*N zO-|M9hyZ+asUxHA-Dh#{P4!Z=k>?yg|G1N1< zH6vc?+uM?h(vFOk8rr`MPVXy?bf&YuOh^1L&}Jh=*n8&qvmnWcxwc)JK}**Ez7aTP z)+#)yrClbm@NHLf~sdPA6)&0WwMyX4%d+!Fa_e8Wif|%7L>g`j!#J)H@pEvOwf1xK6 z&ps6p%lTV)&^_4a+^>|n0|2HjSNk_aIovS^K!Tr`(d6fD9ibfoPI}g5Sr!t`o?nW-1pn}l7F0wPQ->uA68tJ5A2G!;DTpwS!kvo*uPIi z+*$(}P7C5c`ESbR?zWuZXh*eV-2q6er`E@*_i;|18vPH^uiSP$xoKjPo}Q6%dFeDr z&}{hS*NlDH60P>=Z?K|4j+66d5h(E)ry-QTTz! z?>1jjc&<6^hB^>v$vn{!?I}TYHn56N+;q*vA?h}quD;{HpM%$n8L2sNM@YR%Vq-_k zY$B3A9CS)%bootkY4b){c{3h5r~Baex!claDIc607&@w`6>NBy$*J(3$0TGBWF*1lO#%hlsmlx#a)>vkB?K+{}!|UM2c; z0eJup3A>C1N~cz0He-hJAEj5zS3j0p$1n82uYh#QDky@KK?oC<|i z)*QPmV~ck`%Vg3-7VaxHa1CEJ!bb4OpEao&f?aqIlbF{g<{Ovd7}N3;)@(J4g)Xgx z5t%wSb`^bU`cD_vDDP2`UK41iHr?8uBc+y~pmdFJhw-)X5DTKiSH0HKYy#o8fyz7K z4VamR5`(j+31WOiA#*oY(ji~&DG!)smJ7ofxz6!-6ubh5e(0HdDATF7oT$ZIb8APo z8O_;@=)tB+Lzqz=t`z=?;-q`Wuk?#G z$)%R4ie#-tBMeFtABVX%jQ#Vw`9t81ih#I&Z-R~Iw0l`us@|wW_wjs4^@jg`w|LVS zMIW`P1pT&t@`qTPUpP#Rinom0#`p}*HKe9TC%FFJY|a&*GVfVX+L5VD8X>rgjWvYo z&T)xCWVXaZ6bn-r$JnoZs=GzPx6^qhC6T2CP%m;4Ip{pGcgQ?KzXD676INf){fy@kZ$gh5_}Us=sgYiJ~>cVpy&E`#eACprA;!=J!&di z=p@SbP%g?fluo`N4bdbcWoed|nJm;jUcG=z*6R96LkO7vJ{QcC?Hu|pM*KzsvtS6x zyr#?2;<(Dm{}7xT_I-2}IzgKj+|Xyil?kMh~2GZ&USpTzoVK2e4#EoXYh4|acnz#;9m z919RxgeEh5Nx;bo9i&}_OM^PAg`lqq6-QULl^6xb1o%>6bWrfwy8-=m!$>X&df(m@iftc;cHx@nP5cN)uD-?EwUT}my)?1G%Nos3doG9p>3f~9nXErTAl}mX=#j%tFp3tVBsM$wMhMQO6S6z0tK4@bB)1&Dr;K{c znfnMq$F@+`%L_^@=$v^8<_Jk!(NuRslWnB6wM(zbjU4NHA7|# zB%pWGFwCPoLql=Y#8Lp8t-A=5jT>?6_Jwlqq=u%8Z9a6<>)ly>lN`k~`q` zfdO5uRQCY)LJMWMA$ui{44h;>rv%Zu`1K#Fg$q?;Fg?t_6j^DCo5jR@UgzusTT80H z5-_MJ33{f}5N2{PdW;~%W-6t|-x;&R(6Esfb*FmNQ9vaz$ z-=$1k{-$OJirS(mZIEP9>Wh1LZeLw{2TZV+#n!Gpg)4o5bL7%IZDh%bJ8Qkb95m|B z-4*&_m$gCx2NjslUX#F=t>O4d8T`ekR-hv_KWNqYsM%B4>m@7_D}>@Z9%ZE#9yKvr0UQN>v^i+ z|A=MqV>kiPQ9^P)K^Q`sPgUojc9it2Z?y-y>+boD^lj`0j}2KYf*FzwLM&0+fuweR z;0G0&c<5>2Xr=k*ojVU8fMrU%HyvYv6#vZBs}KyUDF<2RVmR0=8=J~nnna6N^@JH` zx`hgZ1|9brfyfLH?-e#5;}aQ(P&_oJ>$~Hp#vxn&gu5LYT_td4T0H4B{ovqP+-*Lm z2DAbymzIvALtofVzYbH-L9-}62A{DqnEQA(7EBq2^GFf6mMExvZ!m&i2YRvn|?O9Likc$hSP0y1_A5Vt>@+ zTZ3d=oIuTvpFnXO&|H!^xF%eu=l{vD2QJE*aSo8YUf+rs-n^e3?!GP4mL;$udh~9ow87G?3{N>BX>x}^Xj>~BH@XeLp$TjV?XrNxDASFcC>jqioW%+KVEL}ofd!iT^0g(7(_)a}YR+Ehn`iN;3Pj->=SJmeNX}}qD)A8!oo6W;2syk`iyi)WA}Ds}|(A?e`jZvN@UT*BCSNZSCM zboNYPCX?F>$ka~V6iy)9D6)6ulXzKsxKtPsCidq{H@>wyc(86|Nz7)0iEiy$On&ca zb~=kzQ8M3b{<55tFV{hi0A3?NW{JF=ee8fEB!QT^f3T>`ndM#Z`C)D!AP z3d00k`ih&!n@a3b5WdO7mTT5-P<_Ovxg|GP92cR}c9dlo{u}HYH~tB+ zss|y?O4+#ab(#{C$NryPb&-`ptK2-m*H_nO@jDcQ9E7`nOZ+d(mT#2%BZVr5)HsWz z7-gkTV7GWMtq~t*qQ|@ZcC5hZ|2C&h+AbO%z`6a}vr>uk6F=-Fy@M5bU|kTkISP{G z<>gRMf0cbp(%nX0TT9Cqx@T8A<@yW)>Fq6{)paM`t#ilwoBsj(Ssh{zMbW7G4;qBl z_YIi8JO3*%Ks_oiDwj_r%3F4l=){BL737v9wFQv_uFX@iLBpst(l-5b*_AB>G=^zT zah=<8;&NE_Itl*jF&@t+>iv>d0{kxr+s$){k>vPE2^WJA9)jH^X2#MX7CHxf-uq*2M+C1Hw^ys49$kK z&?-*z31IF6Q!pY8(27@@yXGK?>b5#@*fO~W!qgp8vI{riu-mkji1hmuQ&aHc+rpGm zwYV7k0XLaXROMnEYW<|(bTc>w-*<z!HqOJfE67))9Vq-x>JbuCrDD0Z%ctM?V^ri=BK;_m7q0Gb*y6#gC((c?NWh3 zg{6VIH1Y3bB;0wZTA326AoSd%t1e%a&`VbM?3+Rjp;xokymSe)2y_>_kBZEX5(-+-wQ&y18a7j-t`gYCi?<<3X z76^|XB>vIe=;Bm@zec?Oxswww`+dAjz050R)t6P#34YTy9j@OTTZGnj>A=t78G+L# z`a5XF=~U*}+vlBQXbbj392PmRgO~ig^e?c=Rv+ciYVI!$LqQQ;p`o?Y{-j;U>rzqJ zDCEWYs!187k&i20e|W1pmoxSulmE$vC0D%&x{IIt&mj{tB(jrI{A1@KC!+Ln?fCYL zqM`!_b*C_Qp~&6GT(q=0lFH(5DTI4ekQ@7nkK__NP-tZ?Anl zWKI84Cy#-C^2@7{<7Z9GOhPX#h8%zN{-QHeGPi ze<9RR9ZJkPULp?1{U=K+9IP=Cn^(77Kq4UzQCGI=H%fn zL;CBo>!AQ!fKfEyZ1vOpe^9HshfJiirV+MHxV?Vr5+B24f;{uPS0ZWSsI* zxMSLQKA<>1`hy3JZy8{GGkrvpb^-ZuV~maRi!TqpJNZf(M2)IQOkfEl&%d4!N5BDg zs8ItArtPO*Ucr8%Mw5h;h)8i?Zj0e339bFb3O9J5&UCd4%$z=S;MfNg``-* zHg`6#KWK7iF3-DV0xb;F*1rw&gxy?-4@p(>QEB^5UBZTsCx5%A@Q`cbmuc5=ojjxH^VAr0SSQ- zt0&wO`NPHE&1hUVO~=WrlSj%|>oF{r?cgy-j$<1unW$7aaS$fT)a&(YxXaw~xe1wuE{j~r+ZJ{M^D z#iTj>G=XbxYE)C?g9B7Hv?(~qu)7LGvw5P%2SHxMb{1eU@r`@ee6g!Qlao}umDfEQ z-dv?LcokTS=vaIL4fb3AGN4C%F*w)2NsAqI`j-Q~Tm?#vYRFXt#rKW>bR5pg+GU4` z82uZGwv31*_A717zX-QE_<5@{Q&%&)wRn4qQN*(#Hmr@J$^~`I&TgzQBBLKUU|TjR zKt^jN(#|FFt-g zQU3NWT!#G1n=daKJ>N}&L2`yL=z5IvO=MQ5HJW%ApFu2`qlW!z$POqATF}kXF|ZYj zA$9LG6^9>phRRUUSYGOZ$piJgE{se%4H;GHDr4+iRrfw2LgE6M0?ojbd@XpyYUK!w z*lkl4qYEb{)le>p(;sqIRD*f4J`=8({kIAIK@skNib>y^aYDiQV>g&jeVuco{kUelM)i z{(1_mX@qY}1J>*dDRfk?uXn?44QllnOFr^;`|j$nQ*d$V@yv6yWD{IkFiRfa7Q{CC z%=mZQphnD%Z$)DDJAad9aASksoa09vERe0B2Eyt{tZKYJORIE5|xt;{=s=kg1CXwFixyKNaCQDLYJyoh#-(GwuI4$tB zur2>$UonVDAT#r%x#A!XSSttmxL5LO9@k^bNGk8}#ywh}uI?Kyoud1`rV!+fV3R5@ z9I;r=Aiq9$_at6e=8M<)r?$)x{Eyhdz$*?Bq@U$w`#*A>)?uy5dW0+X`()dg{0>fN zpVRMbhU;|}jJsx*+S3sz;!%7NnnX(pt$9$GF0eK&D4cBYLzIVT$ru2@S!c{#tW&yk z9#ZRG*-wD=lDW{+_1GVl#4ZEVlJ$=!YZlT^;}Eu4Kh|&iDzTV}8(e{+scfuCYXy@& zH6(hOlxH`)td_l4V$`mt)gHt(*DD7hb6VHnc8+$vj+Pjya599tFGW9=K^7Jp={3#1 zYb1|pg)3vHKH9bn(}~P9l}$ALeD8Ie=^`B zy$H!9<@IH%x{n@;mf0AG7`2`B_C2(toElmrgX(Kj_V!dnVA6`4^tL48@yS3gsp>du zeeXneA6}Qa!(2ePv}8j#}z`O@aVCHMQis(?*r z1AU7E_He6BcB3wt{P)u>S-fn!F`R=Wx!dJBYHUJmODVScuJk%SP4IwPtf>?9*)8pU zcw3=UPj;#jYUrl98DU{YE#6n{l8r(Dw-t$7_mF2ZXE)!7+457|1DGeCk@0)MrxgsZ z774;>=64X#*p2-R$=#nhu^@zYQ>EBBE(rb6!z&U8HGl4nL{@)?3}_wrH6`odqTMy;K6EwBU3kf0cf6X?-1(jViE zex2GGB!5c^%m&D)F%!o=TUBhHfkp>k1EB5AAhTxCUQl0pHNIjO7|vtGs4&(fHm&jF z(4Y>r%=1;4SnB(Z*#?ouEZ5DLb@i8*et}Gw^OXTqcmc!{K)8~^4%6OVLLJy$f2tx= zd`cZ20EB?Izw65IEy{&$jxC--ie;0`?j3MuQbi!7p^O)f4-E5;?;+7-oPfM+zmKiM z(pblfc{5Cp$_8tRQaJV@|7b?|W)R}0n$P>u>ejMO`Bl?M4v?c$x&oF2AS5g503$ zZ7wokPppd#D$t7!2fBU0ayRZI8m($pZ!Rk^Pk#Zwk%nqj-sY>KuKyFu5cOSr`yxRn{OF2ud$^`fG3DtLrcL!9}(8iemOAR+g?F@$rirc$CQ^l}C=1v_80zF4D z>dj@zedU}`QKKVUgpaM2+1M(;0pw0>8Xma>&uchJxjVw;`161_>X>8w#^J0IQEgF% zoId)C3K92fO}e|Bmrlllx;2voL3!hl$yO!jV?oSX@R*&|`Ge>*8yg8$f|1A{X)=T!xNuaAsb za4rSE3+741Ip=0Z%0d5X-Z2uf_;9NpqE`-4w2K0wSYQi9#75p4t?qi*`n!9H0PlHe ze#hdcGXI{riBr~o|2O5XuiiDp#lS8)KdBFYa*8|SAY^k4Q-&*@)y(x}w0XUHr+^j# zMa=@aEd}-=&(9pHS%^7DR{I99rta?6ZGVnZ=IcmlgJ}pCK3EyfQOMAbw5_D5cZKJN zb3_vbx|&Sx9N=HkqTHZ@jy{1CaGH?(NXDICMR_5N<;1sAGC&g~5}7Gic6sKOJsVjz z?90`yJpY{Ar+ibk;BO8rW@vqSqdV{%d(! zMld5|mhaQGpuBbW{98`jP9o55yWJm1j7nhV8$?3uFB=3T%@k`TS?vXA@NI<~7(!~* zF8YPQqs?S!X7+b5v?yZika2PE64H zv4zl>=>>^z2xUj!@=u7*-lqQZ{^+X7h>2b_1R0rn|5%@|3~84!nHdEFHT!jM{95&t zO>R|oxtS|lEAbBg8jgq7(9Pzlp zZ=P@8ycl<4hof|etzJ2GcCKnsgqY4-ElcYQ-`?h^J1lko0Y*+vUxpTwJh1-T9Fmhx z#ePOY0I&;aFsg@RjF+L)%b!!i=!{(Dx^lR=?OxBbYy}gmv8sT2LEjRon0~!*|C6+# zC7iISGk6TD{fXga;PLK^@s+{x>TBR|Oq1qgb+SibBUTV{heR&HfPiYq`58@%D9%bq zljoPHkR7pX=jG!ReL7M{-6h{22s70G-PDXTIo0hH1I=vxodEgX7`eD`@moPcQ$V|9 z-5u^eP|$mC<*(SQ0<|k9rDDC>@#5rQ6(Z||d@))#!RQV6gKe(H(V^^377(gS6(`*& z$tG^Wy~HJ+{ko{2bc)~MHIG7U?r*7g0s>7TErZEh8BpA9sd)&MUlq5_|%_7*a5s%OIU%y zHSk8VA|V_?1JHV!-D#B44=JLPh+S#lWH*5l^m>aoP+x+ASKrqYoYa1MvRg|qVMrh{ z9cd_|aVTP6z;3Tt`cUu7R*Ft#sMl!kXSKK*zM(SvuQ)2{B;G4`&D@c=-$;TXC04`S z%CyLjmMqW!M_;t>w3_)T_o4=x{D6KYOzGK`Ie`2cGLOvbaWkJe-t@6a(C#0le9$ z@|j}lFzPi0f@;ObL*g8k1y(=1(R{I6Om#5bo~q@7wZDndzrw2mKk@KJ`>(}Tz0a9t zW~kW~TUE8wY;K>porkrUn^p!kIDy9A&8H#V@c4(Bkql}~zmVQ!R#9VJ35c5FdERfX zqR!9C*GOr;SIc~IZX+YNQE(&u*{2zdOtGz?D$173zJRa0IVD{J%5_tqEiY=Qh_9U$ z;zSg3;ujN8&Ktt$>E$&`k2R?Pb_4(ob%6Ojle^G^ksO;&^{fXeZ1CKPPmB{GEtGZ+ z!He~b9{DY6(OwHg$YCBP^~?8j^Ax>ZX}Y}RAv7}_&(hTvwlbk0^3o2NP5Y431A#X* zNC>R8$AuST06>i&j!F_QNoXX5OXC4W^?Vbd8{Y^$PXGSJF!vuahN*yy}aS9%QQ4{I8&?5L=`oVIiz4(BwHN_9}V6t zJQGx0kb_jECYUZX?A2lkp-AJY(RE|7)}QIjVPRlz zjUuUU*%Ig9ani9m2(@?>r8jD?km11RaVNrLE9ad9?GmAa7eU6Dwl9UB417(I5!UK} z;*5gHWje}-u_XGsT_=X4-U=_`TL1Dr_5k2yAF*oWo8=C*^tk{8t-)%*yv#%POzD$Or zm5(@oA~t;sEwyqmto?|-X23{#W6tw&3?KyD{9UqmghUSiBT%d8A)0C)Y@n7g1WOI- zk0o$AC?)X*?-_`LI_#PQftI_9v0KSjgQ(6Dr~1$uqMvR!u|n`=^uU}W;nBdoz%fh+ z>Csc&e9hE4ks5T35H2oa?HhHaV*9DHZDeJ-RCTbHZ~-RA2Gi!dtpyjy<>Ta2rX zfW#}Rh~l%%uhpGd`ViF1FAGp>dn<*5ysRf}4)%m{O{AIcBr9IPH?h0MyVH4PqP{cq_`nhX$ndQ@Fb*A+4BUS(|b7EMh2sV0{6q|ImnBH zl8M;B5HP+8Y59l=PS)3qZr75Ru-v5f3eW7*#cy!;%=wH5J)C#_f68xrjM8Cee`+%F z2nf|!olE8)9rRHQ2+13pI?e%JJ^yG6Ftsj98%w%NQab1_zQam^xdz!6Sx2#S(c4Iz zp?K#J!u0_Q$8M4OX!s!aORG_}Yei0Jbuk63kG%laW)08FQ+%E1kWX;PFoaGDv9v-} zvJ-HMC&zM`go=w#WCfCBYKNA{pOK@}Q$Xjh>7@0T1Ad@pMLYd+`@9$aF~K|=BGubO zjq-u?jlF1$%Pb%jq%Gw~4vA()u=;6K4Y#PusTayQLA_ygjc&nx`mc6M0d93`n)phG z>#Um9E3vX&dt&}u;G9?5m;#*tV7Gh`J8DEAFXPp6kKZ*;GZ)V8Q@71-=XbeSi~m<1 zl`fClzSz=#72EH@Ir?hR$f%eTdCA>cBe6WW>v>)z+>U`=(%n0eR>IFq18PC1)x)-U zZ0>HWqiqk(^>s%4!6IYVg0&YsnFHUkoc4`SbmxwxqEJOm{5-hF44` z(nHN!5j8+q8vs|}mzPXgZS*qEN8kq=#_Q6v8Q~Ca4X-#YCR>Jd(jMu%G*ut z(VokVGHk_uV9#+|1wz}--%YVJY|xl(F(=lJmAp!t#Ek(Hr_A2K7jm`|QR{OtWF7yo4Bo5xwSqgo4Ae79RV zpT`MUo=oo!=9r~aK~NZ=8LZq*1hWKF#4`uU4{O{hq`d6MIA0zlJVXE7Lfv@E@Yj9BWRrKa&x5ilw)yu|Tb+y6^S?aI za1m_}Q}5u1ceH!TPnfzv993I#8j!mlomf}Tbt5rhcCW=cKib#Fm?rL&sgwk(xwPQ! zy(Q%)IFr!%KpE*+>etPxxpT zC^57;0L-vK;81ZFU~vYJ)lj zAm`zV9(#N~F5^GLAr?3XLH03j0u^T2YMQz6Uje|V0AOV!gIeg$^mJ>b@;dBFM5+r(Jb^TST~ru2WshusPOl1qRiHB^z6TCIgdW^_}5D!fwSwy(AEU7{Lnj-(Rdi> z3+%c=?YTYL`;TtyKAaj-GNWn(aMmdBYOw&~&M=eOIxY@T6H`EUpG$}G@0OSuoLm$Y zIQOFg!pu5fVOZR=BJ_@hq-hSgzFWOR1*IV&0$%_`4{n7jk-utK6r~0sb_w~yc*d|z7gDRDp0nd1$U`E9=ofzK#$bT%HJx6gxJJWB+ZjA5O`-f zXOXD>BeC->mxi2Bb?wXpEr4(E9oJ%MLv5!q5nVn^Lc$Y;onqJPDjfd9pUcAfQW&Nn zo47FPgGC!W2z%P}GacaJ>oB3ao!0|=x}U>on?2jP%MJA$M#oCQ3B?xKlItYYMJGY~ zOZL-Dz_L^;ZcfzYd=bG^w9!H-GF5dY4R3VQdWU-I6*N`TNnNB=GM%4rd{B7Ce;gcu zQA}?}uz^Fh6GB<(p}S=7bs|?n^K6~SU%Z%){!7TF9%eULHXQr!XQ>Y$h0Zd`oa zog#LjT4(IF)mH!=8)*O#izf@VDrb|lRwKPmN>t47)GW2v{GQt5h#}oEvU3*;{j9mI zo?%MjiwrVk+=c92$)YHCAt3fA`ms_?vF~E+s6g)EaZ3yZV2o8}Nl%WWZ0 zX2j?;atO<O@1O7ujt}UUgv8|cP?&ho9Vz9OEd=)HEB*S6*Ww!u!D~dq zZ7{%h4W}u1MK~>`}AL#-+jhNLL`^j zfoxq4|5i~N;pXWK^`xdIRo_-8j%F^#Xi)L8KNVuGkFEkrZqGRb&S{T5@49CRIT-F( z+Yf8h??&A@bP{s=(aUw|i@RXGvyQ7j34 z0{ZXIaR|^wD#K`2vA8-`F&$m~RPP)*#Vwo3lXmd%hUk-se6$%*^@9zGUVd`I0`-_c zVFm{?<>hewzjG!mk5EW@WD4*Ew~$YoP;&GbbFcd8VT}R(pS0 z=pJX_Z>poz77O@gB;wuhkQU5Hm2$)q$9Vpakk`0)+boG*_#-|Kj|h4E@Ze?S zu_tzu|I_irLjPpTtZ*T^&o@r>(t9F>FY$%+bX?2b%DJcBP-`#xzjyzz-?zMji9#0~ zMQ=Crf+C-S0uzN`^%jUEg9SlR^$zAq6mrKrd(A==&4JDTeqQUyI^Lp z>krYaKK5{ZMM1jaZ8d(SkB@4BM~C41@zN%~1k5D)XC_~fM@&WsSnkpI8CB^h{ZcUa zkUD4UZr7Dt8Oz)=`;By`#Dg~tTpD8v z4Y#52g>zFiL|InBA7N^i;>grke6)w7^l*cA)}_brdIN``Xgg(xVSi=juihYCyS!Bc ztVKw=qEcp+s5|j9ksE3|DrtjoiaB5GLy(R8o;54V&T?e|9JspMT)##{qBJRt*>~WM zluaKkiDl;m-W&Tjj?j8Xpp~!Yg8_3%C#|5M`=YGldl+Rq5ohJiH)1MhZl_V0E1lL8 zDoIp)#bELE+0w?!1A%Ozag_pXK~BO3_vW)XS454s6zw;^;n0PvewoNXYLVMiEpy_Gb4|l4#a+6y&dLAg4HW@)G^R?Aj;WvRD@HGK zrqdIZ+RWRaYDUpbi_$Z|Px1~hI0hWWQAom1OUy+6H#9EON#A>;fO9P;nptbR$^|&U zo)w|~sC|$G1w!);Eeb5fmcC9*`wrz|FBM{O4BKpWq+pAZh+dV(_7H zVJL&1B{or9{Lme{!US2{>(z6PYkaaFNCwUqCc)c6TZLkp=U(2B&c@* z)aE$tg?mXo;u+~i;7$ghg^%r5?8l8mPEYVPPtPJq$Mn&cu*9+^%5C;Hf{3Grfh-ND z%aZK-&GiX^Choo<9>hrtqBGklr|^cmXYFP_nszyxg8dK5sO`IP7HMaw_eRIm1R(^F z*T&B9?@igjQj8?(cB9*8ui7B@1J_f>K-}#8$Xzs zd!O39f%iA+k;7k@tK?9I&=H{VEP9xJE5fn-b6>5pp`fVOgId&EPybvrr@ci*35am-W3e?M|*xybK)Rc-z5}=CYeoX5~J?O9D2Hn+A@Fk6$ z?nW;|{E<=&BUEAQ>TMQKLM&Gahuwxj*d56dy<9mN1pyVsl!v-a=rz&b?W!T=26AZ2 z&{Q-+@$_KZwn~34JgzT=6#*FKMu@#jRw4%e=u&iQr>+qNI8-y`uz!_Y6?Rm8S*=lB zH(n9l9|E=HiRrv5XHov|arrd0x@mh^{Lxn1xwL19LHkAiRVuaYNe!q%)hf)Qw~ zd>KcT49Kk~7k%NQp)jpU;Dw`ibt{)1w{4G9<8{n?lIRu~g$_Q3%bJ`;WUe2~g+jZd zOMLH}FkuLYl@@q~Gl+AEtRe(KkiBqo&uFIrXp1zYQNp1WlV+ohxQr1{hACK1vAQHh zWjy?TINVK0una(&mMgq! zl-+B_ib#Q|_ki zXw|z?mlJ*(W;IR==Z1B=10ryaL+gW56PHL{y$n6B;VW&NB}J@T-BRDRwtr>5q?v&8 zY1E%}3al>0i6S&e2V{zYmlD{Q*~z3Ye8H6YKuORCcebn%+sT-bXa;6q3j37-SDp6f z)K8k~*7|b8BE32GUjFxY+aX{`HtKV5oV@uRn%^@da%9E*UIO4rx>WTuO$~a}3LOh+ zf2DFF(q^*_O4aL6`iIM?XQS6%dgyI<7O)gcXXNuJu(jjIJ?YJPXhE*Yb9iK2gRw2X z+iIFQ2^e*6T!K*Zd_Sc~NO+Mw>g}F1rfuEJ>$P5XWHOi;dDjhmi>7W4SQV^f6QkFS zu<*bGS*4$;twVVO?k7^@zGq}(<8uiyBwK%<%QriyYF8hh>Ja5oF=~vpMVGn8z+(B&%!#{ zJ!|lH_+)d9!1&@^%i@iuLD_sXB)kd;KZf5xV8T-H)O*}~-BLlB6@3$F5)RKTXhQq@ zc}Rx6CWeP*=Cofltt*=grT;NdK_Zonos7OxkwI?2Z!mJUwU;Ga6BdCi^jx8R3wms)UC!>EWXk^bmsCosm|L(f1Z1js@Y`SwS5?>+r`jHoRZA>ve3XU8d-B-39Mq zH)SkfOwfna_SU`wE+Enxb4#(yO|#vrQc58#6Lv5(jyt_p4Wur>%A0bFCXJl;uKnh= zzwZHCiLrqqoxl#y{~a4CM*v4axWC~DC6qQHJQM+|3bdMM5||ys0VYDTwd!6TaNSCL z5|UHFM<}tjkwMbAhQnf}gp)%{&$0fkW#UcVRxy!rQP9O1QMbl%KzR6MhKeN-h|*Um z<#$t;3^xM$n?{DOJQJDi(Ufr{rLeL~5#y&5vZPHioZ`cPc(Q>93+E3}FUs{OmgqMc zM&k_4Ca6csscB}K$<5%XrA>?iqC}%{`aca?kp>#IQWA;eOL$io_wBWW4>DPm9`SiS8ud_!QY{ z0g)uBJ!6bk6@Zkng?ieDkpI^JLb_4-C(ZLRFWngXrqXCIcx&WTt9^hzsl{AFD(RyI zv-lYsp5ohD91F~0J5aD@;~TD)!&O5T1_~uCp;8!U{-~!phj}srabgacm_!F#7VRXo zWUxt}EMjFt`eK zfpl%TKdC*}WnQ6%%LsD*FHUgzEw^6hawI}%=sx?P0!ws^H1m|vy$ZN?8+lh$eluei zA@BB``FBYw(k_S{jlq+#$?uh^W-?F%Xa)ke$^(Cl+WZGFb8pp`*lqZ|U69?hTa$(W zPS0LPL}&9UnsN8zrCDlu3FBJIRi!4&?8v?4c9=^|sdZM&Z5t1L!5>8pyPBvdpACF# z-f)X&(-!T;T!z()^F{vGBt-{+_njr;OO`Mb@}mAQJkSP+dHlEP;rDd_ykLk2sAuu# zuGX#TsR^T{QPy6JF}rST>*u<7|GN*$9S^V7WU|mLbnQ#6&nd}Rb|MAT+&IC!&YKCX z9B-ex;eSpz$|O29Lt@o|=O1CS8?`g2cn9l&})O4bI>Yk;^9F?U&p;Q#$ zDBU$!N@)#|X9G_t(=`DH^$-{FSSYI1a{?1rIV1mNvCI( z?4%ItK_=w&^$j7K!UGL>z~UQVKQnf4E9+6xlJe1g`SS+=;#JuYQ=K2lYl!Ys@HNr> za==FYsN-64XAb>Qt2^}JC?s-lo69xAr$Eu5x};~$^j5=wj*#7xl|r9~1m=`DNj9$4 z%5FdMivSKIEfk%63E(d}OQ`nucE;D(u$ z2$6l|u94V={Fs#K%+5AUGzxtuzPaUD3>)F}iLZf@vngh9Cq-6x@#DPOWD4hi2&m3i z;v3-`qo~@xE-VKHU`{;9QY{Hdud$`uP@dy^2)-1TK#ar$5pdBrcFD6FzmP*C-k4&| zs}dYUCdba&|L2w%8K$Kx@NpxEsk&T~m0LEpL~ZKm(Nhm%iLZb|GfNpfvbt^SAamgX znOP*vKTD$*SB@2zvkC=$WHx;-5)pz48I6memDs4nCq?$S|w&Cy6X+Noo!`&|dAuBS4&^>mjwq!zp`1hj8<$|l$NMQVgZ{s>yv zn0WfrnQtOQ)w~Mj=$N@XOqi7q=h=`lBS)yp$C_Y-Oc8yiKu2Y$vD?0&-c< z^&(>a-Qxh}qip-LrzF~(%A)dv{cKBf8&9J~8_SlpnF~OC!ya5X33M_>}RV{C(gK29)oKW~DEKdt^5Kt^LJT*G18VXV@KZHa5ap zHoNbDe(?aWHG6}8xFxrhXg7jc4dM9vH#V@l_HaYoUx`Um-U&Oj6T7S@eC%BwA$+c` zabWyqwMzXGN>z^nrcR=~x%LJD8%>>%^yO?k5rE{L^wa~hhDEyqLHnF~hQ6_s#{~o}|Uu9>Xr@@{sp$RAzQzQ`5YV~h+XYGr-w)pThO&C{gW%2#l z$L9ERORw7|CQ0IW7vTGhmT>9h$69u?fy(Ia?)8jO9H%zKi6A;>%16ARJf#nsf0zj-@}m3Ji2J)+ zlIM7c>d5VwG03eS8p|r(zN1g|N;(_jd%E%Za7Lm{NzcLv{y${k&k*<^frI4lB&a+q zsXY(#+2dWZpndBJxzSlaTD>D`Zr3=(O@MxDRJ{kZBk^ejNJDwGm5)Akmpe#(H<>3E1v84DE5v0Aw8uUlzB>Z zj&+Z%RiP+-MOnZVlAb&lOI1#=mjUtY<~({;`5|* zT!r^Eyv3OFnG|+LT_OmAjY~N?AXk3vqZy!!NaY_LV{8GQ?t;J8MO0i$UMHa9%%sn_ zc8hU68DlJ}fd!**2Ppl2d=hNYyDA_kCej+Sp*D3iiQs-8)=d-hb`A5FSK#y`LdKZV zvtICC9u244-@VIzywXWrn=ihrfXua@+!V4O+h%bi85B#3h9K*QbR&`3p@tkIMI^WE zms2=Kt{_$uN~D0&nRR)BkJ$^urrptC*Yf8zN1}|P5QfCV=C5k)AN$0BALNwh9ij3? z-f7^OaAdlNoFeMQU|zS&@~5dSDvDoAodW`D*Tij^yp0=@-c?B@)WTVz!a4ktr9$|Q zTKdBjZG=Ej@78;vjBSI$OGt5qNy9ksU5*!jg_Ibq*KgjqPJQ6$LtuTMwXi1*srnEHonaq?+W2fiTR2b}faM8+`b@cX^i7o{w zGb1NQbOoLQB=VR#%r1q(W*EQ#Zy?Jfr_sAE36gtpJ`X?B-KQNEXd8dq3rJNC3>E%` zj-H)t*_1!eLj-^7eI%hXgJVzDT_VU$qt8&vVi7oXV>GHy7*pt;#N@7cz;c?m%z4FM zRB2aLZ;?h0Z-tef1Y6;z&Vn9RxoCae53f7nVHgP%FCqE`)-_lMa3t%AH#ZSc9SQD?v zQDmB!2}W);(VZZ}?fOx$!Nt7IvaAgkvfA-4***#O)ckF8j*(;!Zi6{W4s;VX0LQ+g zaF`GBA{798xZ%1TGI!Kqq2)zt{R~f7NHeqi$NaFJ-hp(0L`HK0G>Z{%R?lqjOwUJ`Z$BWKa6tQgv98{$h%JoCpJwOSD=wo||_Q^G7i~l-f*@g;o z!r9t#e_8f|k{$wRxwp$0h)vjzjKt`$T zymo7c>%SOKNky2AQ#_O79Dj(BVYc9W`7U^{Q}$zTl+o*|B)^~&3sU;h{W?%(@%*(o za6ijRF6BMu2kt*C@84P(@XtRuQG4+ce7H(t2^$qr?y6;>_65`?AVQDZGDq$5pWhsm zUQ7_}X#NsxnqsGGG*Q|FG+l_Ck3M~aWMO~4F}mx1VzQ+Ar@^&MTrR$enT~H)ninVP z)z8v=l}uZ=$uKW>wP#L{52%`1DPGn*f#3~79!(gk4*Ipo6Kx85^Rnu?ofON9t^85K zur#?(p!Z(j0nY~8#i`Xh)?36ZkByr^QHHJ{0J?6Pa~YAI4l8x@lvknSAqISnK0zYy zfrdUubvuV+N}@63@7xb-+7wxb2@(TVYP)|l7up{1dEDrAmweoTmB2}HXtGD{P=+U- zxQ^?}kz~7Efa6s`g{TkfOp+Zd_%N2bh9$$Br$4E7j+l$BTp8 z7Tj;-CUM8kE3#wtXv}cCJ-aE?_O921ON|0R&8z`YxZRA@_$IfY@x?;#B0rD^?}g|= zgnU7bpe{q2FPYJhu3U&LAue;fK{#9mJ1>4AnPjq7mf3XD`}QKxj>{g6qO7HOyw59* zv6jE2i=T}!CIOP7u)F2%%-K&-l%`1iQ-6lwDh8u!V%BZ8YR|&X8Out{3y9^ zNn+;jxa$8j4H&$1?`GT;vQ!mE`Ok9g6gz!=jiFQ;z3K^x8lFTfyU{4%OEOwqodojgQFa*TkCI_95hEk|D`#(a?b z#TkOOcTy?YHF*6nfb*5{w(YUj|I$_Y!<0&!pP2CGmT}3RG7cF z+cDPtxjl<{gNZ)Lu?gNMsZHmv@LD_sCe;#%Xtckn5B4$Y5Gtj71(Snq>R(MgWnNT{ zOA}z7kHwHJSIcQKu3PuFuTz`pEX?I@XvQ)W&53Wwh*sr}<2ZNT-G8|!k^r0(z9iHx zwsHzAT(BJ5bucRQ3h9t2n^}4)Hyt6< zI|ciuySPhCl+pgWWZ^ZfhWk1;At$<r^Y70!IWl7_vC)p{FO$T=AgNbm03>p*iry#R* zNFyy4N~~r_-upG2QYl(9|_##$U_G&U=Dai zsUj_ByMf4EM(H;UY`bTEt+;y4t}q>IL`*Be_Vv%Cwh0W9XO?9k_o-rBI!DI|=x&}a z@bzq1P#3i|q-z78%x!3-;3FR}@E}76W34C-aa@bms1&iuw<>#B$g1EDhhc;j;iA1u z$zjEoZ;lkIw*^r)Uw=n zCZl5)O2DxIz-jELo(H=o=Pz_44Bh8nMlsZtwh@KEU$GPqa7K+mjzToAJ+aht@~q4h zkVCSj_81I6@9WZJOEDZ7j~=Ak=(`k2nn49lHW9d%U4;-1X8l_5%Fspw+>z{Vo{Leb zw$^{-eznV5o^mEqYDmLh2zXF&CMf>#CIBvKVQvly2nY(d>nuJtL9ZcErOr}qz9b@! zq;h01?J@A+1;S9^K!D%t6yJrYB~qVc3dq$mnnR;*>LA5NxS)RiHukewXgS2jt#Ju9;_S{kC!zj-x#lTdjS>GjS=+E?pqOOD8dnNf z^lqkG1bCIWjn6~}I6Z5Vjh`~BW4^l7H|sRj6t|;@*7O&8w{y>urjp~p`=W9bs&gPA z$5c7j^_x0a^j`!sYSq&ro2y``w1waWxwcxW^}^NNkwIJt3-A=FLjeg};wl}d11Fma zZ*Mj;-SJapi8hXn3RuRrp(YqE8165_L(#!xDLI2ul62Z+{p^XCoo6dM*cqeX@ zdC*_CdIg>?*L!oci+&)E(KH^<8hAg|u6^^4u4gQG{_|x^9R5jeRfkZjfH4a=uWd01 z;ZNsMedLo*h40Qdb>#Qq&Uz1Tu-kZu{be<(Jn^4HE}6Ap;x7CPi^N0}jdhlAvCr5n zjvJ%x`C>ye+FZ zWlRXN+V_URr^OlR)V2LIcAvVGGWneCv+a?0agtWASYQ>1;hp+(!x3aOi&eb2XqNj; zYg!bczo|N+-NRWJQwAuK{4>-Qh9z{|cuZKL59h8IEaX1$>8g)vi&)$EhdfjaWG{4} zQx=Qpc^cK*lr&RicwDlKi9OVRLNKJc{;9EQ_E;b{1@@Nh(skTjGi0+uv zPVc7s=^1w9c5FCDs$CEj2$_!xpn2VZP~s892c8cR^br?RCAAR|0+*$kYev0gg=*9f zu?uxfV)my)uS0$GW3Sd-zb{Stt(=jaP5pbh@g76ac z?e7`gyz zT`o7Hi2@1NbIkQAD7a9LHSysQM>_4^#eEU=(fF=!_f$PUHdL^#wgAFnhkY?b4xL<8tthN;A&i+}o@j z@G~vTR03`^a58zqCh-hFo!aJLr(?Or-^Vp43V0Kv{}7wq6rL~WpbBO!QB{+{)(Z6i z=V*W>aX*O;)N+vVHSRC;Q4H|WQzU&()>feGQ)Y+Fc$aKjk&jLe_37P6HA3J9)|I-` zY9e7F!RxdUEN5WyzBEE-!@lXJ(;G6%$Aeo<_1Tn3FGjIWL>b*bbw%K@_3|{G?zv9w>(D&XCc8#R4G9z(x1d#9c#G4^+_zTR1Xny3rKKSN_0q#ejL6JfosboG;U- z@?<9}?g4Kdp}?eom) zR#YjKLV+c$ZQ^6ZC$5@KI_c94RQ!pa)iCi;WraMc=NSxG^f%cUL$x14ZryHdti|XJ zF0Dt-F{8*F(V*LBHG%T73%mB^%D8SmjeF!0%Fb!~V5Q|~b0FZLD))PiQGQOE?aX7`a2iAfd+BYl9--wN^zit!#jY+^H_OE{X>EM?EBC1T z+RCLl)7vXaYK07}_2nie`uFIt<==_A^iQB3l<8X6Xzwz*6!JpyV^D9yYwE00w>Jw* zSb_~ZP0I$==ZyG1o&#+hY(p-(iys0q?;v?a2t>ZAco&#H4Fbl#V%$-Ku>vY}re8_7 zr8m-Fip@rv$A~)RU43d)?Y@CizA4(WJG0vW1j?@SMy!EIbL=4%Z`g5EDj=GR^>MI5U@Q?i5^7Pj z(c@}YO$cOxL-Ct$o*ZKXa}CI1pq(BiQ>Zy_WXNPgMdj+2-ZsgJ~R25ndy zi$za$4#VN1#eJ>-k}8jLL5n}n2idES} z1GN)#4Fjh_*CBM#{*f7FWpTdz&M6IuzuR83`kFCh$J}3`|3Bm8jz6N&FMR!rslGl3eJsb67|HS9q5 zUOJEq;OM!(dCYb~y|7Uox*akv_!%pRSKBEk=ch*Xw+&O>`=Za}v4!oG;{}j$iaI;d ze9$FjP|bCMYja&Ns|Ejvl+Vx&35A0VxRa&}oUA^TXDm+zf#PXKWmnVnO z5?5pv?8LX+0*z_Cgm!r^I@}LJ$H6M{6a(`vpbV=ve@0+h#JjhBGR3W{rssBTQU8~v z{m@x4ho}eb_3EbU&?$3Fe(XSTQ+6j!T=uOK zAY&}=bXw!mtFm6k+)6_3w%2b+(o(`n7)ed5>E-c_&Hni=U=-Vz(-y7G2iVJ#3A26V zx{*WWo~T?|K?mHOqZHGTPYJS#NQ=3Aa!f=jcHrT2(PVLF!li#$M?Y?F9=({O0yh4q zyWq`6g5*Rlj;N7&0NwgtkkvHSf0mmm*ORBE=(9u{;9#5 zAXSOv&w#<1xy*UqQ|c-7f0;8et`*=$5BSvuzubg93tIc%#UQbW1xOU187>eq*NL=q zsWTsaQbBYuVFk;L9Wm4`)v(MGk4b~#5eJ=vMvK#RaUw}YS)aSV2RyeHbB#PElsDzC zD2BW$!NwFmf5sQ-`XQISF+P-ZATq8^w@FGk;p=IBcl;26@WxNlJ8L=~dv|@oc|o09 zwj)9Bp-Ul3YjE391D9}!+^k6rT2cakjkm!{WB`?PAh-}suLzXmOBz_sLZo3-YcR>W z$Vm#10YQI70J$w=|3zBzJVV0pDqH(mNIO82j=gW~{54z{(wF^!KzA&NR}KbD4YpuI+FAAoRoBFaesKc z+pifz_L-GYaSnhl^&3GPh#$c!<<|pGLz|a`fC5>)GD74n;RRCwO_N$JQGrIBD zSshkayB{g(&lX^K8*V2p03__#AskD|+BmM4Jq2IuNh`d-)nXGCVD4(1RSd)kGob|m z3rI*@dHBN|cyI>9WZ}apTaGyrkR$qu=hLCU|G_|B^6aq$+#Y}Yg3m08Q~!(QZM1E| zyOQ|Ap$K43y38%6POfz-^Nv0X3*Mb_;TTbH=|*>a9C%i4b#-o*(m6kEToj;(!IAy7 zqdmaRTMO|ePV)FhkiUFtPh`Fd9{I3M3u1;TY-e`(?K{U4t;QPC@DI97Xp2;l*vtBF zCyxxtC0>LWnVJ1NAY6B+_7!=O>@wonthj%&M6go3Ewk|5Tr&QdbXD;uFw-D8@2DpE z8B&t`c#Ci|fjLOdWp!J9WK7{u`a`ad2MeU>vq@{C1Pj=l9d;RfijQNtV#Jb=_4rMw z@(I5u{)eQn+REM`YOGe@{hB2N*`EN*V|3_=&Skeuq?4b7SCCIZ5J00sl0ky>*=U{V zdWl6N+-jZn2;m0pxTP5F7C#trFd>!h3%5I3eu5#KYT{;%jT? zh!`&h+cVu+{*@cc>X#o>`*~GStQ4Y_jENc4i)lUhp$I91iHAr23kG3jCDa|S7tV(O zHVjWcVW~{z-SzVc3H%h8-Lh6_5`m6k*Vw*0^V$xINq^Vim0d>J?~T^yoMJc9hJLyk zST|J3IVeU4+IMGZ4cwHcE}00cyd8?Z7gOu6&zdC8V^zjiUvxVic2TrY+ms6ye=iYT zrmuS&{!T5B7qPi{i|K?CRlJKK2BE=01;XW5uitwo8T>Qjfye+5+OD9UwL{&lPihXRHcT0DVH-O+bSneuhZo(K z^9xU}3U)K!LIij@nYSZk6g}UXfZZbUgJamt<(b}<-+$Qwn%%6t<#&uM8!F8A7?&PD zJ%z4RniE9SK;=aY^#k1lMjQ5rvL7SXmJH!>g#of*rj zl@N)7`Y}CtavwY($=d5yv5iPa=On6qAb-_8IkKy`Cq=&0tPJqTL;H_?B3f+6@v;%r zAj0_3_(Cw1ST=oas9_C!Sa%b@qD?)2DP*~{A227htc`B#qwd&R&>f?cf{+Z%hYtuM zY4nRf#*o&$JGFvhid=9DL}tx`SV_`pbN6BsK2z18j~PZ?q%qpjK0TCY=7$_ck7kJW z$Tm_i++0-dFQy}|N1XSKWdzT;XhPgM2@$EVZmIkz8ZXFsdN0IyeKEIy-ZOC%S-HKP zCXz9BjQlxWA+(v*RG8n|CZ5ePwez3%O0%}xV^+R1YMcVY>^4WI@g}+Xx3}gD;TKr! zBq;gJJWvt*VO7vf)`&=ROZQIr8uyKG2mEJffl~5w5jFPF5JhP7>PLYcwC8QWtNpkd!EH|fYB_WSjCCkh)~9~J)4@#ErzGKm*1)jK(^=fcjM>qjD@38 zpb%L8qa@fAN`jCYm0k(jnEC#UNZ7Vfw16u9`=y)sD90cKKDK)_X*?V8zIOzVS~>{M z*Khepkl0J!$I1sTiftuxQ8*s>ziP!loMeS{%sd#RN>Qot2JEY(=tvC~gqFyZt2XL< zztHZVkO$0#*!R@0(0Tk?%Ym{Yw_L@PVl%Gh_`Wf7x+l}S3XPn5ym;MvyeCnU`9_Sz zm+2BVLls-6CFGc-o+nA~dC*(6j0okD-OuP)IFi*RP+`NpX;QKroNyUZ?+2>$3I*-; z{I?f1LjhUmFHCX zO%Sf(K<4jKq!B+QiavnQ8mI=Eqf2RgjDx5w4%2owb--VSawnW21{LApcjWuHlJ%OKS=7#@*mdOwZduRXU z8i~YF$7UL^W&Ok#nv)Xe!SrvFcgvWc#q%n#Z z_zNqu0=jm)W7RfaTX^TN+lpwIX32R|SQ-6*3rYaATR?BEiB8qa0t%|b)B6IGwvnjB zgIB}O4{qXrNqOLh%KN?Bya7G3)iJ?O=ajNs%y^t33BFDU>CMXu;Rfcz&3tDyFv}o& zd#BvTflwGtICB|hccq{)s-%fm?^}V5dxCdho%v-7?TA z+!!U=!LdgNSj?Sb1!SeFZ58%VbFiB{@}J#EeNqnx7&Ob+PHBSJf6q$dS)=Cqg!^-TD=3y8lHI;s7iSWda9u?jUt#tGol8PxkIG? z*0Lin{p7m{%43fT{?5_Jx$4dN*#YcnkiJf;{E0JG_MNjR}&_!o?uV>745i0w@RvilG{ckW87RGWyXEqIX~oHi>TdxxBz52omQ;CJ z(tb>#z3R3(u>D`a{TUF$jiG)~*1YQ$?DnxMs_=;1~iBaHcW)bA9FbKQb6r%bI6^CcT zXHCg+t?cQXX9j2OhmM*4j<~|!eegSVacUwz8GCgI!o0mQ#0RE*H5xwMj4gCAts8R^ z4t=|iKc_v#2GD6p%QwXb+>fDsYHwt49-|EGN?1$Qnj)~So8C<%lx?&+lx`(tbMRJP zbl>W}DbS`?i*5gqsX$bIJEMjpsr*ao5FZTRqV--kQfCN}PK-Oe#YcxJ8%JtH($l8K z`Kk4E9x}}UZ+0Rl%IwF(mDN9j4`Lm$Ch=N={WS+D2#~IbU@rJG3uM=*zQ9Qx!Aun#MUm@492Ws+S)XB94mF)9V3V)h}ZN z_T%eR!G2Tr^<1!!(#beHTHS^EEeFcgfpJsNGW!{@6>h@(2@`;R>Qd^&0m1li^983Q zCkZuzcW7P!;A&~{QK!VtNI?NHngxSJY}@6sA3W4z6=f+ zj!NeGVRn*re5=mQNTpD5u{ z-`l}#b)9?(KIA%t@Rtr8F<^qRfP*{h0l?vh971{NR?V~+a=qLJe0qdfJ zsh@axqY||>*DEn5qy}-o)la$V27Mm+p^_RO?0cf}1+idY0b*aR6MiKyGhi#;q;{$-RwJ|_zNwMmBznG|7` zt3?#x@)zq-n}!y0j>D;WB}i6~@(W}FuE1^E%y;YR8?7|RL5Hd(s$6!) zFun_{yg`=;IC8eizvZ~XjA7Ic%QS0X%Hq6Yv^xoM0gTghkG}Bwh$>A-q z*nUcYFO90e?iNBTk0@c%w5Tf$VCEXN7RI`~RGv%@1E``60ZB&Or}6{#GH-QzZs{{T zWTNFeNl-$fvgyPDfXdEQ;~4pqZsb75kKHADS*=zy%83tH>DKiXy9w0kp|nn5KO z8~S1K)A1wBY*(yi6q=^L=5j))?-~*EykZRcN!Hl_ z`lw*Zl2XK)SyR+rT%{&`OHtY|4LR=+M3d~Dd9z8o+Nhsf?)S7Z?3OFscIh5Jqlmae zpC+Uzk&auKx;!@X30NiVYz@PWn+eqG9*BTk#NxeL5YmTOTp~B}+PskI@*JlGD0~Aa zK2qosFy&^8F-->XKD*4k@jMO)ATSsZfV&I!NG*h6eH|HFBn0O=9}AZcvP<-b%yX%fXOtD1!uuBOisY4GRPry+RJ$L`KCTu~v7G5^!#Y?xjmOiV z59EsXN^F8+Y2eXQR**Agjgm79fyY$!AGB-fQ}c$z6uSZAkamh#VeY#IgJAmu=*=`U z>?KypbPB91z?`BrYHs%=q!ZOJ{w6bvp+4CLv*_Sk8y;om#mBGJN(bigG-bBoh>}a_ ziiKZ!HCExz7GxO%Z_EsA;+LG;J3J{eKaLL@cZ{JP#-%@aNzK$HH!nc$_cmPaGT zg~1Ao#3oJA0~;0c>6S}+{jExND%IJuNkxRK2}?XyaVd)GP~tebWNv;j%A&0)Q{(ByjhRboctKUGrt`oPvb@R|cNcNJwS{0~fgf_D+O3n}cbjK@{_(eq9a+2I-D} zfs&^R6(M-zu08FvK;rN&yW5T-2~?e>P~PBIhL==-{xl8xegyJz@)u->HYsVSdMtn$ z4`vBKZc*N;2S5*|JuNL*%63=C!spm%j#KPlv<%nvotj^{F!a~K+((mHvwrSLthkj> zSvn+p)uW%LeG!3{O7?H&ZEgeHNascdz5l=K0ltI*dYMt-XZhX+qDSrx3q6?N#)(7_ zdz>G})n+?7h9ZP5oTP*VNJCFYh=^m&81_1Qum+h%H{&D4s48Cm-m!X*QGdvH$_f_(*)atUc%;TL95px8w7&LP5SAL%f8 zR9+cXY>TaAXZ3J{=I`l<`MM&V0i70h7ck#nyUpLdO=8k$w&M&tpN^W&r44loR2$M* zC~=u`N9aVCi*@KRa|l(WPwYKr8}=lg$#&Ii_PZ@o2}75~{OYT}V1^4=N3`;M9I)DVAn3yr~e*R;1XM z>#~ZD&TjPjwNKm8EQn5zrQI;X)<5(i+7K5#x~nF0GCk6;{Eay2(Az;dabWz{sNsh* zb*T?vbkJrC4~SiMRcN=^!^YecQ5|Cy{o(Nt)W z^hTjdf)GgN5nIPvw?G&HK?+SE0{04K0B#;FHW7w%8)D`@+FmKgs5c_h@>dYBl?g>s zn+e?ymg7H@Emp4BkJk1R;LmYEtRHgB?uPLsK@?Ri6Ngi2rx{k3)fweY>2LCaBzG7Q zn;AfmDu;@LD2r?*S`N5(?x4!({L^s`2@7})dB;zxU`*J-O>TPRlO-z+65e`+c*gh_ ztG>Dv7C56@ET1B-{RI6QsFrPja++g+eGQ!WJl)4aVnPY3Em1EY;2)4(5V%n7Tc-n) z@9b8rghIRpt5V1xjaV}I`NOw4w;|5Zse#g6r^)UkC!I7q-+CSNE_gr(FJGl}SQ=z5 zzcyN^x#5sRDDovkvI%U^`Whs&mM6{p#||wPY3y5p1@14-`4M8OMGH$^K6vBx706eK zR}wc1e4(Y^qIRt*LF^9~c20NyNTeza&*xy(ApzGELz)(t1cW`$Q9>fUA_3GzC^Fb{ zi_h(@QUM_-f^eIWqNG%pD# z+MTzSak3*Cpv(XdhlJ)-?$`f!kmLI(gwiSFVBf0dvB<@ukkA@;K6eC0#(C`*u)eu7 zePDUN(!O++;RNp(VDjtp=nM7+t-YN14Xd4qOH;iBDH^9|0m%Kw3E8o?^9=CId^BSV&RE^ib zPO;-*>6TSZ+yWG+Qja&63^Zk?Md>R z3k}L8{56Q^&YOCm9f~pHjS5p?zFBmSq%5%tv=jOpa_@42NPINcgb)!X+hC?4#`;#$ z$|=|EA&FEkvFh@7W~plTPJNx=p^AF<+Vt}B)NdG+5L#$>U+GICb*xaYLKsH)<+L}zh8iLV~3-#Mf zDxEnARC8K;wy0W|16vE@+xjE?Mp#kD@^O8J^3*h}ge_MH95m2_ zFe+v_az~~^Fp|~_bwV->Pc1C+?cUSFMc@dyrso?t5+r` zAp%~8-$KqSWcY>$m_L`Z`*69EC#idGTc{L3<^`XF_Wj6it(bn#9hI=>oSr!9;cE*Uz>gIeb_!#2;dRyOTyvjs+ribc zc)*>``Q;N5fw1BAtMZ>(-`}zy_GdF9oVw9f4! zdIiK3oH44V2HTX|$N>J)4Kb16(z6%6x#yU@6TF=C|HZxvdLRWsvWBBX)=(T@>@P9Q z=Q$MmLDAGxh+r5j48T2Gg9h3P4F79^F|`OB2rA(#*eV42!Y*2wPL`O297XP$)YC<@ zb;au1jHalfo2Gn`m=cPZAz#J%dp~Pkx@9@E^6TzmV6;2`MN$UzyMX(Bz5ZZAXM5}A z_5gY%art17nINrT?_-r0tS-)+cE)J9i-qe3+0EQEYURC5XDfMDaiI)y)ZCa1l~Gu@ zExrGT6(qqf#O6Area>p$b)6Yul#vB>itQ3F9&$yBrC*Ls?lUym6{&rc@p^@<6|vP| zBS|H12a&JP?D0c$Nn=&LJi72OAvVCf@;!$5+`}tYqw413#v@WmJ)W!{@E^uLPUU~9 zM&BqK1noFsHi8xV*1!+0^eXhet0pm=U}=hyQp1R!_b89Z#%23&NHR`d@o(ZCvkc7q zBmbbi$1j2%DxWEl>b9X61__0@gJ#n(TvaFQapwpY;P z%pTv}#M(J%+HngZ973)36g?$SVlO}hS5CA11%kn&zi3_kk!sa;=IV~ua7HyzNnT2) z_~TSMmKam)#GA9M4{O~B%s_Zsme8}|!-a}8d!VtLisE%8d}$EY4A38VHAfvj1uf=Q zjJ5HP#>|kR`?R`&Yl$m)9MDWoaY{I|tZ=`2N_JTy9-SDKS(BQ^1CY#D`c9ZmVaLj40PuJlcC zsjW4UW{AzyZSytfSPN+q0rRd5;`%$O&k*$&(3$tVmby{QN^y(N@RURy37uoL*cqAE zRs7J;A(-Va+ZKl|T!la9MJY?!?ITDWuJrY{yu>RQK&Q-&p=Ufqj9UD({{TNgz`udE_GU0eeX&={p&CpScKOSF4n}rt|H+13lHfU+~Pb(26|J zb|odhSiHp2kqoNp63^%q+~iCu{+}9C@mZ(i_?FmLsR(7Ehjeb3H2xQEHZMrsF+ZVrd1f9rskE#Y`Z<5=Lb!^y-vF0Kdozf957KdW2fLata-Hr2RDa<&fx5Rf=$8rUiwOCn)^hJHI+=pQfO;~s zk7<3>aB@2o>kWZ9LpNr7`LiB-Dxa;ulSi^JS3f&p(@ddW=CZfKUWU)BLNCp=L3nCj zFWA=I7bUWChe*deZ?a|od}qG<>1kS)k&JAN0;xBO|0tSebHX2jxHG>?iKF@iy6sWR zX*y?}b7$TRfY+4)Oc3jnYps6!gvR8XS?8j?I5wQv`_dZTPXUV!bF*8 zkf5q5W#yNHcZ+35u0oJ{LkPv$*Q^jr^DlE=r3V{$HN!v-LINNT&XFmaNVdBZ1Vi9y z6AFUOC@v&W^Td4rsOg(>*+>#@}ZB`kj8O<0PUV*eQ7H#WPtw~`da zgf9l}iXJ{a8xN+k&4?gH3vS)c&e0HjXKUksoBH2+C)I`~)UY?v9&YxpLHf`gTD9mw`*xlN6mH zb-X9n^skcls8pSi8$``u+cUzSp;Yp!QpvV};^&h2TrGMU)vvcHe|WsvaZ0s2z^#nC zm31Tr8-^}!U(Lc#MUpE5l3R|f>VmX=#EflbsP}U$s?`^%7bZXLM6%Q8m0}~v*8~)* z=zL41#<%C-#p+5zklzRy`|X=!>j^K$UcyW3VSE0gM1zmNFy(lo0MX0DDm&63J{!e@CMO7GP3qs>5vVBcXxAkS0h#tmrPxzK`3 zT5Kljo83Gg*Mhhh_Bn;~toqma&XkCBp)_#M3?GD^JrHXPGt!PBJUyqqe((BFi9z%R zggVn_%MYO#L05$Z20D(Xq+@#v?@0J^(&R*1*)w`ki0R4)tlv#f1R}>dQYfEv_SwtB z8~7#|VTCqgn_cC55V2McJyU@dsRBZ+9AR+IHO@dd6Qax@HuQ%SwkcqaTG(2ZS+ z-v{)ScgMDLWOs9$oB76tUB=+*C#&bcaXt2j$nM_Vonc3?F_9CRKv?udj5!4l^h`!= z6jHCwlZ{w2!M>V3VAar|EbLDN3`ma`w^H4#C;YO2x@$Y0i*_p~$}VcfDIwKp)M}s- z>{VkFj}t8Rj;*vnZ^qbY69V!>M+iYYdYslfNDFA$RqDm1zd*a^RJy+novxN8q&i+4 zOls=Jjv*>K*r-RZlm)9cP6*GjqypV^HX!)$W3o(Dkwg=$V=*Rv%_ zyXJRrz;1qdZ#|Cdpt6u>-iAL!;DORNG&O6%2xH>I9>bqB8=AU|R)!}%%`KKs+V|n? zi-|yrn{Kvi@lgvYKP?1a9M z@++`0v&(%M;fmI5Qa>rJBV>icc$Tw8-3*H;rtL{RL1^C~-r}*F6F-F~UUl7CuY(Hg zRJbVx@aUZ{I;cyRudb^SvQ3zM7{tR-O7SI^6BZd@DX(!&>B@lFB`PmRb`Cr>p_bY9%esZgLsS%#&6gCS)9C&?2J*nc`s~GguucG0lHe};Ss4_?vK@u8$!=7$TF z>7qW>J%A?IwWNH40DGxnLx_i%OGZ`iQ~+@VXVUoFFT?u=|-e zhRU_&4W^SAR~G&?gS=chjiTB%<5=Lzpy5bTaCct$*!}qhxwJ(X;ICw z#THKl0SA#kfHDrY3X!6365_R@xgUaRM<;L2qcQhu6CuK)>4Ko{J*&MQOc_TLb7IUG zLjT4e>dG#ub^%&_ZfxMXC zZIl{$(S#^`JapgpGZf^uyJ{f+^Ggv?P!M83>EtltB;*#3$i-wb*@%oN! zD0H`ZGEBrO1|9<%hOZ|4A0O$4jEuhp>eU;o${$aaOzPCxh4?$5MFOQwzur>kJwG}p z%<=L{R|&4kQ>VE|X3=UGJ6!$5>?u^-l^~*cC4AJrjCpZ6uv~04iHY;89ngP6uJz0@ zCBV{0b$@$bKX-7=sZPXM&hu(BLJL#z)n~m>YDFH;z`)E7>vsscW3H9~YFMzK(QTB2uZ*i@@IEC>yiu^l0md|y9U#=Kodadm z%hJigryp=Pz;@3LAc0KV#~-^X+*JjmvwZ%~RYF7vI(j=uf8F$f4;ZZpL+Bl8oo9F&6vy3%9!indEHB2$b9M#}D!8ap zUJlO|Ib2vDh)DJ%7g%D4G%N$SI3T3_nwlf+65#|@6W*a-@KVl}Byg;%;3RsVae3mL zBv=%3mW9E}+iC1m=FD*$e-iK|DJn+FqF;b`2)6G%)6#4;Vw`ODZh2@bM$}0i)Bj|w zaAcjDiO=60FvB+1mLF7GNW8k_5sf|$%!@L>$UNE5!BFC$)=mkL;sTNqCf)_$?hqkDR{$ho z*^_FG28in0!+AN9aWr>a8W{)H!4M*qTSXPx@hw(gw88fVY9H=EA%{LI5z0qxe8i-QD7Qo66kCVP)|J|7V5Mvf^tf z-M&1}(lajEvZemKe-vV_IJQKMMOWm5)%Vz^NwJ_rd-j2cfz2vWp2@Jf_8`gY=x2rgb3G@W=wI4yb2-~63n@+PHk_4?U~9z7sw1+w=QaQg>Agv5hKoUAY~)2K%r-h z7*eS=5d7dGhdKTEK_O)q?}njo=S~!rNJjJY&XZJ5FLqpr5}^%!6eVhyQ8n1m9R`v> zMA94`K__mMx6JFEo~I&wQR`4u`FyJ2+aw;kr2~f18^47{i_3o`OM=h>q&cdluRE`8 zdk%X!@`%Np8{WwKgFET>m5%j;L_%BKI$Of&HDr#}B^t9O9 zW#nBOtKwlXK#yNnuw!05hapL*#Byma4`&=1>P#P3vW{^9n@l$aZbuxEeL$Bu$ojA9 z-q2)~IH>xM9%mXa4r&D6=Xv%YpfzV5oi!Z$9t7OT(;5?j3OTaa$Hs*_+yJ|`t1pJr z`4gmhB^!V1b5GxIldyySZv{vE7}(!XM9>}I&=V;0gWxXQ8gR9wUNA9?C)?)Ms)0kh z?W`l|Md}U882ivZcRLa(K{x=lPEZTaqg7b%vYUSogFWv@&<#j=`sHYoyh8jr)T3SV ze3dbSX0X0X#G*UV^!Bzjhcf&6O5u>(BaV#8ER(m`j=xGnbqeT0h(Tyv4cb0fkY9GP zpz2-oO>8Fee0rBWOUsR=B8g`jG@rl8wYy@_jYHejZvd1>%8w#_V-r`?V2C80Oa>uZNn&tf$(#3;$B6h&msGe#^Mo>J zBzh^Zx$Mk~+)wXU#&ZS?jn8#-YXUm8-AbsNBDM@gx$)9bGH4mjqkyyIGX? z>1`umTp{+p-WmvObfiB0SEM$(Wa~j5PEGK)W!`CT%$M)m6@!$6MD#)0nZ@BaX&l1Fx1 zH#4ZwickASyd?~1mSqex!cknwW?BD#Degb$FH-Tsslu9D)304Ev}H<_5lrxvRNFx< z49uBI#-kurCWonpbs>arSA)uZ5gUtPMq5Zj)^L#EczYmV*6$uz`{=YOZHfpzyh3Sn zD3tVbl&j4V{w+Q&oHhLn>n%Ht*M({p`1Ar+2fXHmJx`wE)O0#-b4&)CiP#=^Ivr^& zg4;1)3!9I4FKi5I7|OK2aTew#96w>OMqTKfKDTU@0T zSL>6%$dwczEeVBz4!LSXzkz_Z-}xBTV-T4N{w0XM|0hqmb&mzuJ*10xCAT^d4i&ho z@sq*=K|A?Rk|(Fud`8}W#{e!!6}m<~e~>`)oUoa??1!`~Z3CGmD=Y7M491a_) zhG+Q(qG(kOE2 z_$NNmzqScR=^TwuBGpVzX&FBpuUu9uOiA~46_;Q>7o3-0pr#H!k>uWA=(m|XfNN$U zHgLC1Zdu0%Dp#b)9eOf~8qAb}I2yXiQ|2$*mM+GZ)~)29=9(1{Wskcz4QzrPJl5Ov zXJEfXvFnL+nV6{~G5?YLpvP$=Me2O#KA@GB86ZCX<#4YrLj`^vCHDg0hW2lm|LHvM znzs-RHW5W$cy}3tM?6;n%u`~z^KlNHDkKzm#$x$;J>R}synVl>s+_4Pr=Kh;+V$M7 zdKN#7RoMGT{T-*Dirf$EMJyslj2$9PcO;1#;KA%72^VMKoo21P7u8WVOdE>0Y1O4h;5(!3^ql^dZoCvm@Z@Il z3xIz}EBDrZDRuN(;QljsVVFSaNa(fBBPIu8wxh689YQgkiU>>251RqqA%h--U+?EM0y(o4dE1IGl#nUgMc4{NvkOv zR1=U)Xjp3RP;ss(D~eNbit;Qu5-tKIO1fYVTn+#MGIW*4MRFxmIAvv=88xEF$s<3n9U!i4Jn7tGnrFcbQ?7&KA|cWXdICE8 z99Xa5-TS-Od|StfRpBxs=uF30$!v~1!)hbK21 zn8`~<1E2tz``EP)Sc61ttB8TKRTzg>A+gTxPTIs1hkmI0k5}yZ_KrA1 z8gbyv@tN&&+zU z`f_ouef6@@aET@gXLW-qcnU3M({!dmE(@^V=a+X5+xCs-BG(4iemkO;32ciot)1?D zSomYe5TZL1FOwW2x(kNwKuJ}SQ-kU9NG4tk6EqHJaIwIOe7?G4|LUMhd~lnRbA9ID zsf+cVhn=|2ljaK3Xvmo%j(Tx=yl;16eP1Ij8pT)eEd7S9k8CSnLcA*?D<(Xcw6L4-K}1)i0XZ=p!!vHD75B86|TiF)(-DDA=?O7a1~q+GvM zyE5f}Fz5oRP}i6GN=8*2WYedQvPG=7=rI>6QbOPOcdu#N8&rn~UyG0*{Yi9{7UG_A zm+?1&W9SqKnEX9C`i5-^G4BaS(1|+$%G8bm>1WhWScj0V`c`&k#iQJl(r^}^i2BzT zA~^Z`n&7`K!_ZyFllAVIUk;&BzUtb8__A5Sl z%nYj9NuPqaW;sz}rN@n^efj;#%aq)?H$JDZJM^JHKF41MP{CR3pm++B(^}UGG_`x8 z;I^TMV*Kpyamf8D?i}OUI0{M#SlBhu%(l3kjc|u=UV0?hZjgs9jKEdy5~`7VvF=@_ z*hh2-CTH$;O!f-mEa=l)n?Cj#xJ&;aa(OQRL>`Dg!S!|`KK zNR$O|%B?arWcdr1I2PIU*!{!bR*<=S%MR>RWNl^PpfAGsA!eKKK(SRQ?}lkh%wwCZ zM-w1&gRR)puI*jrpZOxn@VqRprS6lEVr>62kP838zP08h-UF#CdT+&prJe_}dbeW< zEN+(jC@XELT}wlu#2*usIJB%n7f+_iLYj%1Tf;X~!j3BK?$WJ;Cyto~;@M)#2|+rX z+*IVp|N4HD!s1x`m4q09t!TcJ0Hu$Ufyk$EVNo+W*{|~M|C&JuhOeTzmJr}4-FRP6 z!cJ95JSD$Ur7;Uy=wH0+fY_$JG3O~UX!n2I06WqRav7N zJn9$I3ffA!Ykq(c`9Wer*5{Xy1aN~^jZZbgkaZ+w?zn>WIVcLq8}0=g9{P-G4?@xD z_Ii^(qukxW`f%MzmE{jcPWH2DWx~cM#4cSM?JsBO1~kp55mOhD{7`Zo%4ZvvFt^f{ zD-AXkfNRl}nDXIn&Ql>{ylhQJIF|w4C595F;Z+|qIJG+Z>J_K<3VPm415$bKOemrK zQiyhs8G1`UBq-O+lan?4b(#cyL?46A{z&aDNmlR*M&=pQj6Da3HS9mL4WClY>4opo>+4sAAgq9u~XfdG*cS^`~i)ZpQmN>_AnY4bBi07S8Q#e zioNL-C9d6Y`bjNo6eipKZ1*jf)M}}6qTszjGc%ASsNF<6%_jG?Q6FZ4QjId2w7Y03-j3`L6zR6w zl5VYJ@a^oM7<8XvAy$;TeaJ~9uoeq0D1U2A51gG0zr$J?7Y}aZQ2MLJbn~YHvjg}W zNzS+U5$z$W%ILO=&!?45*~6x1 zpFwiuMLk|VscfugpMH!pJwi^Am}f6<=nhMRn~+_k{4G{00qTEy#s2y&*MWBk zP}_)m2%)>DUq~0*IPj1X-|U<#oT4*9V&d*oMXnk*Yz3F5bq(X2`TJH!DW6CMTC%#G zp1SnJyAJe7@y3crfwUD$#E^1!>|Lz0HBbo{qhnYO-3YSXa2K}a?70^M%i<~$aoSsr z+sXfgZ{m>voyJ4yV^I9g-I!4+E~m$pW7fQz-zlrr(})_J_1p&>>>=~o`FJvh2WsFM zf5yCf79h`KQY38r^u>n1!jWArdz`I_0zlWqSUl2dO$+SjxnJ+EIBOZ16|Ry-zSLB& zww5r<`9#pDle_`f3EP5I|A5XNA)ik&nSD(louBC2F%z*Qce2FG!6qx{z8hpQEpflQ zXGX<{drz^m2+)B3AFCz{G8yy=W0LiN@|wBpcZ9k3_6-hO@^5`2xXkw`afDrq!aZu4 zT2Tx3IFerU>h@%P_4E>;piQGifT-c_#P+M$Br-Eim3|X4KR8)EARchSh z1W`J`B6w$J-f3V5RrP~vOBRWp(i?l!-6_kkO-@}54YR0 zd7}TJEby^)JAA=nAZ?gf6jzotTkGcx%4*P{v$Hc>EVM= z7U<;9-9RY&DHVve#mX+pyOlS@xZ#R_GXJ-?^TVH`n9K>t)(y8MF;l^QbggPv+?_%e zJhrIXAMSSU*2iGML zW~@)yLbs5!Z{MMJ!Ywx9hKM}iv?Rlb@6l_P;4I|`q1I)7iw)&BJ}c9|#0w*2=jztZIb>b_b1tZ{9E)E@kWCD2W;pL znRIsmn;*vWgLuE4u&Na&Hy7YstMVyE_Kp~&G(OO}hpwGD*T>qEAulKu3Mwlni<$fx zvl@gcCZHyY6Yx;TE83D76s22r1j}DLQOf;DgNy0e>ewlLQ*`gj`@B_m&~97g0pcE2DwFm*gGG!}~SyKb$MpqGfg@L3oZ^)q|<*Y@ql(5;y~wFK0kR4V@`4-It2ZHkF0P{ft1l(3)^e;ydck;p}}5Rkp(| zkU^&ij&QW2_Yymx0KrLbo1QiG1DrkPGiagv2C%iV`gHIhwjoeeS9-O&)(-Z%+7_^k zKJ_HM;f-MC2i~}hWc^y zX*9LCp9k=-JTugRVbi|{E4>V6_jkBbcIlG}dP%Y+=O1hkXIKVt7B`?oLo~shMz(1h zReN%gnh{x_1{lczaTSl;Xe@xDEz>$jdj$SACEYTMXm*AIeQRFY)#FgzkhdMx0n-Q6 z+hl++{%DdZdMDRsc)odz?(3@4z1*)FgaOAgu#KQ1xIT|Mqmwa94Me26!vg2n;UH?e z8GkJw$vnxro4Inb8j2L*t6a|n9Hp^veXfPTr8V(PuTXi%ao<+k6X$h!?_ccm}(I)cUy}5%kXdp+#9~z4PZdUiPK?hY$;4oms z>&~CC;m0Wum7Vsb6(}WzTDsNS++(SHqoA_6ym>r4rfsw1&!S+e5sQ80*)=4Zd3ATv zr9nz{hiu&-9GJaHky-%>ddyzIUWu^rMamtSxEqnU`aSz!DT10TrSRm_th=i7ATcB;rtVeJ< z402SkRLlfoD?~boLl7lVovaCnCI)P@w-AgFj|9q{CYwWcd1mc9vfwI{FyW0M1%BAs zSz`d|=rRJmbtb37F{KiEhXShgbSnnhi-!O?Sj>iD>_)zz3OFER@!3B^r$JM(WH=L? znN$f0^fxA-;-Q>zc{)NB{gBzE<<7YzMiFbm|IAyUPF=RkA{G_>Cd01T*4Oov{w`F8 zT*KW=Qj9ftvnVn-d=gunWk5BzUP(cf`A1wrD`>V6tu*cITpIj{b(##9pW3tMv3hRR zK=5I)&nSdvnsHk>!`^Y}0@J3j;HH9@Zu`VnR3~bP!5Td|$pCzubdSK%zWQ=yO| z-(b%!M*}kjVpt0ZJvXmJ z)=veqHL1S)uOcFE*GKCh8pJtROY?96j8gVliO2-{mr5^9YimKJl85Mg9Rg;=d*hhW z`cyW^rXWo_9=?yTMXujD67KQ@&{=?yHjHX*azfp_Qt^Q@kjetf)J)efmX1PYjDbIF zGM}QUTwA;Wih!{tztL=oH{MdJDCGRj3%%WSOFEQi|rzknQOQ+mB-fgd47g z;TT$`r=B9DsCKQ}jpfRw2aE4XH@kE)a|##q5&Hsq5Kz?sxs6caOVKZ+2O3o5a6*zg zP2VbV_&KZAMdrYx)eF^NoueN(Tz^`N_spdDK)}2@TX4# zQjc3BW<695Lw%oA;6^gxa3w}n+VP1h%;m(4K`n46IGO55^WxI{RUKYi-==|fxbP(} zgN(QD+z;Em_FY=4+aIu8Y9DSaDZ134eYQ-D z*>)PZ4JU+uwRhq0JMtve9?D*P5d!l;ny-D6r5RqGf8NH<)n%@0dQ9TPN?Mq*$bs}m zvslN5Xr##Vzu-YQczk?Cp;NBmzZ)HvMB}Bry?iNTV{i`h`}hZDADRQqDjnQ`*U70< zjEUo1Uk-yuVxNyFMttE+{Oz-4qtEmMq%4f*C<@O(apmr-s?lOWbsivErrwsE1 zOA$2~!EXiES9*JwB8ERQjkz()7FWrT6GZJEwtbVVFjH7D@2^0aczN`SR;Gn-7S=3- zjMm`JvrdAAZn05-Yd3~H#^=aFl}w@q-Zh1WqOD)xWLEGkNsET{BYXn#5Vq`8`6)wX z`FzD>dr_GKJJf+bRj&g`mcJ8qnWh2&V!l6XsdJ|CR zU4QC)dTMLGe-qq)u3uTCN|fts;wBW#79U_sOCtOS`lRp$F<` zs~Cbb9Cai4b@GEz&?CQjn6xF(`$CeU>ohXG7(1d7p|=K`CT_3a9f(+0BcM5(1fT`M zS%-x-*o&dyPDFH~eRa*%OcgZ72RHSeR7O)fFc^)gX(4lXbN$x2RMLi*+>zRKC7(hB zZ(g3U4(m{j2jrlM3l|){!DAirh+s@e#4%I9#4+fr@s8V`oKM*cl=vrkk{*$JL;e)hgvJ%Z&~ zFovuoUBo8}H6rc+F%9o&{LoWEf9iImx4Lc|Os0giD4RWEno|%#K9cJ7>7}DDRqt3W zWM@1Lp4f!Z zEJfsl!^LB&CU>-F^?b=-TYlAQ|@Xbr?gva3w6vice@lf4pGxfqj35ys9Y| zDVL2?>JXda22{Ym40RHxjM+8rbR&iWwx^{RYnos?M(I#37_NU$unB6;h=r2`=4(Eh z#j8eaN1sUQ17-xc4Q$^VTZ$Vehk;np%~R##HTPj_FjEl6+az&NI7C|7ca@`|tG8X7 z#PIevIu^x-rXjJ_w8FWaPY2Gc=@*gq#dp4a!jtP!OIr;n9E2yHOVe68aubHbz4&KIA7|gpA1K;~^pS^8g zG*B{hu+EHqxd=h${A%rw1jSAIbk5CXMTm1Gw|sqal3btASIuQcVj>+`hmEn!iDHd) ze=B|HChxW_7NVRgp*Z@A!I9%N>EH@q$>M1*`6k1~k#bN&LS}F$sZ71TMhy1P?Y#=e zZ2{+-h1pE>@IsyS{P1b(06HHz0JZglng|E$Eyqo4Fi;M(W-r`=W!R}7SC@C0c~PvmrvBdxKEZ z9ZUKdFyEG(UiY8uIkT)t%vC8rSJ&fY!3;}GR#ynHnQIS#(ZFNLdFph zSkA+Fp3+0g=3_5ji5{OU6OLMp!s*YimiRvwtpFW&fav9SF!i`vXa0A@fFN$Vxw#>N zWCkLjAfO;$lR$vkji2t@ISSS@-?uej9E}TIOTMO3W6&?NgvD2K;DzS6y=NvA(QO2+ z26%V>77uS9H(g+b5K^EgChnjlleS`zT>1W`Nl-OgTY5q5$akl6KpdhjOvjdpuSVv; zge~ypkqq$O-P~ zG`^XJ{wAcMgy!N}%?f)95HP&3j-l8U{p&`G3W;C7m$D-L9?w&MB|KRV7jhKblN6ca z5uF+^83Ai(}~M!0t|)_I23flEYq3A=Vl59vy8jJ0N-i zr2@k-Gutv%BSf7_@(z;2((}7?$7HiV=(GiCbp@r{KuE2 zz_q*FlS&uLE=N=V5c&+_n{JRr*dS>a`vnVmu{)1*n8uZFp1NjKBO5x=J|GKC!Hd&Z zugisvInNjDD+Sf0rVWjyvKN{4P|UvtgA9byu~j=z8PM+ z&CSYqawfpqlkcD_z8*DswgE6yHT)CtCD?| zrHYoxp#rjH?PU~4f#A+p_Fdme3G@P{5_C-!&@ZpAiaQT!tyS*Fvg=yihxFWGJN1n~ zg~1W;`Iq?3Nmz`CMz0AtK!%p#XTJUqo9*9!II10F;DT{`gBnWMqbgv(NUSm#hu&9o z60zlgCm^Qi-ipL4(<@Dr8A2phb+!>;_T{!4Ys6}*EtMoq1{_{Yf-B;xv%F2-?&gW?{##<{E+lx2e6M4pg2~ z28+1XJE%jG`?FSmpcWffS|t;uyNWF}21DBZ1P>~q!XxN1Z7v+X9Z5Gz)7HO*bL5iJ zLhKdrZO#45@reA;l^w<{JG7n=*({qGFfA6S3VP z3E2p@m@r-lQdH&Qi-*;rSb=d+9>N}}s%lgY>sJAD+=bUV^J+Yx$4X7PKYAD)il_NY zFy>L@DnS8vJzfaYPFpNT9L~-DbHQZO6o|3b{Xaj=gix(rHrEIh&7{500)ppiif&+f z9%*dL3xv&}6iKLL=zb`-mD=z9QwxvGibqq27obI~gJ~2%8zXU(N=jbsWU=L#zik$O zq-n?lVz|kHbay~bntuR9Tc{k={No!ztOntYr_;c7`=$F>{^dC*JCHOLG} z7A_d)a#?qjj;pB)o$4Ouhe1+~&zV~4LXPnbP$2>OMc^NKjkJ&}#=bcS>dbQ3QCU{?RGkJWGd#?xq%lfVwg#an6W#CE zp$6+|5b|eUNLx1o0=Lk$|*H(QKO9{@@eM6x2aCcvy?_xnxxDt`N!9D!8}7*TS5 zSMu>tnSX3+;!16)YWe0Lo~M^VFN5^5ehAy++5@W%iqNBl!iY&+#+cld;o-Vv(FLEt zm$385S;;z#apD4!CU!5T)CJUR8<9y+PerV_#mWn1-9{gw{Ko~CrW{yDGGGE*=KN}0 z-$rUAqwp#_1tAUr^68>k*=ua^DdiYx7)~dlcL8v-_GQnU0Z#%g_`5{dXZ*d=M>aIA zP{=Rn*Wzk0v*iV9xTro-OTbCa<|_s|sdT8=lHePS1iy{THLH8+N31A>;c1QBZkNjh zslA>M5@<6@^kZwI*An#$&-oJU-E9s}2BrX7OFC%mi#C~C58#Sj|fc^R0)JMy9P7y4qdXv5fk}g%(Kh?9klgwCqjf{z$PMy ze3a83r&2Qd<=ogqhE1_`X23_Weg#C3{9P8})&x_(y!W=6eM6TES9gOs1Q3^}UOU4{ z=By>wX5|4yA8vg+umC_mG&z?Cg_0Ou`*;>w$(}#d0J96xGr25{tjZvORI@-3h%Y)_ zNt~Mz&=!>i>XzelTm_|^qU6k4_b%v_em{C84>Lc+so6ZX;SCi%J|85KO8!J1J5bsv zBdSzr*&`)~7hvtJFqL&6XQ>R?x{b(BojM$8>W^Sk1aL)%l6i4%9>J1;7y6$Zu`Zs? z#6dwLy7ulyB%aodM{ql#pJRDKhzF>#un8=J+W{Qq1jvn;p;lf_=oZP6tFI28b(=yp z8bachxG&?oCcMO{aq1={pry=5)DN`*jGw_(S3k0LR5oScKJOnmtwXDvWFL`dyU5Uj zGXCf?NX~qu3AJZWFjHdq zhR+Z9WHC7hDO@-MNjY7*%ZELgY>nET!F)gGvI0gOH3l*0KEn&BDDyWuG5$3OA1yE| zQGc zckCjcMZEb{2u36i6?khOYUF>stV3zL^Mxk?>>E=vKLRUiSN{Ko|9XF_vLpUH4o{yF z%B;GA=G0U;>Mi%IEVWX0V;YTICQ&@1bC>fF<d_-O|<|S{+SR)Xqp%gq8Ya-c6QuI7u2;?)o>fDTy>N)@riItZeeX;u#1!#YFQK>2OD^*SLHln^n;8H1pW3wy1t77< z$9!I)99q-mtGyL51+~$mhyX^-*ptnMS79a3u5rUP7Ue6wudb6rx(WLaco))eL$PRn z{K&d%hk1nQJwFrO!$1~8c+xNNsL~qf8AGO*W*L@sJ6?68il?M7)=lCCv{#Q!7onms zC@6M{UNA3xXFsoQRyYT7+>9>+X)*0IOoh!fHaI}G+hV^uf}f9lbxLia_A6|EoYCc= z>4ipCL-fbU#vUtG$Co(%JzVJgMOEfzdNb&HmZfAn;y`Z6a3FjZXvTBZvy{pWkFiWaHnbbG5-j6=(r zLsV&MIX-*I!s#t|DUYKEpYsQbjeQpD<$QBaL!c;#Xt#;8aYoIBGQ%Ihn%1uoAFG!! z`PFOG`qD|e$F-E#UEZkHv{)wp-j>;q0(mwJKS|(L3ek`&nWaYQ!Ww&AOu!ekwJF(x zWT|c6%)QNV1A7{~k5Awk+p!c<{_8d^MnV5G7%#SBX3G0k!!Jii*VMVK@u=sM6|7H? z`zcwB*mP?3EKBMl6qCBV7XuNPMjt!&xem&xgcAoEq$54}=VD&s;5~dTqkp-G(?@}9 z4%z-ebrIXilJi^*fO_PH{8JM=Ma0^>&G=_0Kxq8?noUm%{LR@4g$OKl*%uj|6C#(i zym0eMkQ#Q)V7Iz0HNUark8? z4BrqbB<~h9?I(sQPv-*i3UwZ}S{@a5gz%%QuVw4Z^H_{!0}z-Ivj zLE!+S*83sl7n11Bt03a2k-UO>g5z zYFdF#ozoVAJtLjEvzR}>IjP&p^6C^&fXX8hkN5edtnAP-5&vuy?Ab^A#%ODy$r$AC zY<>%wwsL$&cSo4>3T^U*V|%YIr?ocWSVCb85q2c82VyTGZr%XY!*^!=TQ66(avz7S zDv$i|;yu$@5B19%B>-7KroRP??`41`BYA>_GH=QHtL{2H0o8Ijw8s8* zmjiDDLg^Gi?=G#K%?kUn|NkOxQ9&Z}Ch=jRvadcCJGC)dn`oIN4$W$Ys7)?g=c&X$Q?giD|xkZ%j}5kWFww2t=te` zBPi>4hEmoaFkY3$6GvQ!4A}){4M_E-%9%#;vZXZGumMje=G&+wF7dFo%dI}Fg{<-! z*xv+1&+FXu>hxo7(-%Z=6Z#z47m=vDZu&aW3r~q=d+TF&i^}JMVucElt?lRBaYY3aM_@0Q(ph&AQ~hr-;VBPBPokc*XP_XVD}a{_q_p3#y4!r=Ri_Ce7D)mf)W2=~$?PbSJBVY!!N&dtF< zVLJ=ndc(xmre}%%HUd-v=L1xUZ{8^U>hVpup+}R%g>JO ze(cb94A_$XYNN;3EwtNRq4VAJbvk|I5{k4m%yZ{pLc zd3Q9X*O}}3J>S6lYW>v3+Dep0$qve1-!f060s^#(NZG7|9gafY)kE-efeQkK2jf|L zPswmG_ptCGR+`!o{2e$5JvisabPHZ*b6+dk;WLsRxEkRZNo!$5oSXW9Z-m5Af8q+( z+W^H!RR+3joKT0ygCfx`I%MXqwayQ#2eb!0mMFgA;svRMqn*FOAF%v!h{40+>yGR_ zd)H37^muixF>xuz`Ws&4u3;g{74(EF;nLH(8hj{rL?0R%kBwmtLD;;WM5g!&V1y4? z`j{hB_O}%CTXpPF>n_sx6VFFGBuZ!^e-GMI!@@E}-qhpaJ6HubAe~h-)2KtYY z^OMrc;<~K+vpV|OO-7?pQ^({4-v)}!mEHITIg3eM$i!A%^-87gR;n7~(o+36`p0a8M2_F{dgI~3W|0OfoLsxAZv4E8?=Lwu7dGwgaN#Xou(bkqWAGs4s=dmrs5FL|3_hRw z?f8V>b%PWSO&;k}tg%EdjdX)5PUT-vh;QP1;3FV)O-S%qd$2adTz;=euWAzCbY^Yy z3fJ3M|DiNtbp+@EtwqAYKL8{|anoW6R!;T8AdiOwrd*QDL&T*B0@O1^Kp z3y?6jmUtL{j-JqX#UKAS{9p>V<`0V2vq^?&m~roF!*3~VpWLX}ln$QV0TW3@Jr0Cd zHNT@o?9}G}QlurwUUq&qGp`-8cD>IfBA#KYwIDb)n+4Gj57bglU;OcmTTqpA2vqK5 ztA)pR!E&8<1=gVCbrrUDNAb=2k_iRlRBd?rS0TI#1fe*OzQ=th1?Ya{ zi6zn$&i4E`=WeD0@OKHhznCI??rRwAHvTq(kSqHT#;CIW#Py+_uByoyB>cE?#9O4J z=Tjkykt7l!3A}c(q0+fsvYjoKtf4FiyQ?ihnuNVkzF%*N#lzEh6Dj zavFD{I@RX-Rzt^#4gtpExq2Pl!u_;LJNB?=PiIJydKY23{OgY$xvys*X)9)|t%Tj; zd_1j#|8dP7`b;;t5)n! zmr9a{Z`eHfXXL#@V)j|_O1TE=#v8q*t>71pV-nW68Z)B=|V@How@)QCn=!1JOqs)2#x zUJ*7k03Ov^sZwaamRZtQO*eu(4}iy6^@DJA1C=9AMX6*+H2(h%*dR|2eRV!wyj)3H zS*e&qihftuTz9^1;gC==(to79NX;BJ7*}&$xr{l+!I5%$c8V(!fN}|+#PI41KV6N9 zY-~1GL3@&PqNASj4ma1ge0{cgfk8hEKabLm86A(?0gt)#Rdg&%c~05RT9t$o&@?(Q z^L8LGzO0F6uV7UMI;|;OEe$K)b-46*_kLEb3)7;SWi&Tj&<8MWoURD!Be#}qyuL;o z7aKiV-qZL++23T$cm4r*Zd(~K0)!Bb0aQIw3W;sKczE}a-grNIv`3ebp>mjswh>q7+F6`s2XohQRd6*^X> z*V@hF>k!i&`{=xd@5g4>9FW0c$cAH9__KrsWh_z|^h?z>j6b9??4a|3-T9Qd^4t*f zE)1h$Pmcbs6!!`zz7u`QWI)^%K&abGUFtF+!PP4kycoj3bmYpGTzRaUQMKm7_a{K-Nx-R4@ezzzdmLy4xqS4{S_U%!#TA`%EkGl(2(RC*S^Asq zAivQ{7c3D$kfM(sN2zyG@4)fG`}Eievy>=L!3SE}q^lNBCl5kyne@c*9h1dF)0V`4 z6VY9Tk#=BE?9Dtx+9QQ+t3rwIptP^JVeYeqH!le2eSO;$k6mvA-?_d_duP9k(C9+e zP}HB>1iOxUy4x~lwGZJql7wnq*;cSm5);yM;}6h-x?z8((6b+0Og;j|H)-{pqx)S z5*DuD0#Sc{$hv`YGTLr4Ybt~)s!Ey0hRxLuz=hwAgzJcndng2wtOzCUIz+p)%7#w+ zZNja)v$M##e#T{}LnVly@-hVS@CKDWErPHHPMpRS|DEZOw7L`2EGvp)5hy4A$cKkG z3wM5O@Gi^jtDKO2216}n#}i}w0l%Wn%fGKs-`rLPk1csVeT*_mTOQQz83jtxKCQ^a)#OwMKR@O z2#~;&>@+~qxn}>i4TSp0Kct&2v9nc0Me>ZTeUNDL`Tn;Ic2WMEOu!U-Wsbet$qxeY zKxqDjZN%jzNW<7q3VlG1;VA7;9DT|;R9gv~Jr#1P*3E*Tvy33H93&*zeQ6J{^Z+Lj z@Vi;i4q_$n$$8IP<)Ys$Et}yi(R(MZ2>d>Con*asJr(Ait>l zbv?W>Ttq@K-x~P%AJ#7&3mQo&8{zo0qkq@T7N^juRKGH}V&;9mNefqiq@v(Dt+O!! z^>K`;Z&?G;to5Yu7`3Ot9^#0X`QX8?q;c$sfesM*Jh{t8Ft5#c#0ke#6OOGIf%2oFUemnL-NdhP)#}v;h7wBjXD$iasE*}G-`bKo14>>Bfe)?YR8r=# zdO7#*YC-R*j0LwBR!~7oh0X5RglreThg9m#W)u&h-odu=KE8-scR>vSXX+}nZO&hC zb#8RoVYMJuxql5L-tZON2{5(k%^%0cObU5nZDS)wQ8G2@>wKmV-0pHb+g!#51b zcQ0}nZ+}emSeV$xz?08Zsimd|cP@QHE!jtB!={&N@cUsk6okPO@l7pfLgjyiwD5$Q z?xca>F^GdwH&@`1XML)vh z`QbKE2TBeAXt=acQbo$5A_uuav`cL|Q^FWo0Itdy*{%f4xv4FuF5RBSxQ(F#cBMJ` zYRQu}H-;0V>Ep-9`#HefzE9t_d9}&#jtkQh)TW5Ze`TjK{7>jP8hgs+d?}flwTS0w zbcc)4S#&w+d3Jnab>Ab!e~Umvh*A*Wj$xS1d5enzt(2_}kP&J{#Ol)CR2D{U&!yMg zXY>{*F`?2zh;oH#TIDzh@~tbdw09-!$7RG8DVx=Y72M2O3@0mbY0zAu3z0ICb{yq7 zZ?Np8KZbdnSyd?{hDe%UlepyB4q;7(SJAHi8@Vmbj*rFbA&249AkGI4C?#>yZ-}hK z0{h(OnjR~v-$91Vwzhd5(VS)LO#vytjuk!{+!UsqI9%Enggwkf>3<1Hs9jzxQlr^e-@;q~az8P50 zWS^ge+n8#NquWk9!uNZtL+KJ}Dq`4Yd5AFnI+DLicy52@EK3IB;fJx~9U^88l0%*! zfa0Auf8J(pZ0e#WFEl@!vSkhp$P)Dys73BffiD)yi!d>46&eUavfDK7n(jJKw5shG z)HstX;gn{MBUAw@3RdEpv#U?B);Z$(S&}1#YL982 za<6GfoDy!_*y?fBpBnkrzR}htMjLqZOUc z!`4S{A?PCjRtT$HNgyw*ab#l%n^r}959h|cv!^Ko!>?e%v;>mX#F0>F>=sGvdKq#F zI|Em+IF639;xAqB*rDsUa6EXrcfs!91Nmey-CT5BN;0YAX<-pusU|egY4`y@aSvx@ z0*fn`eSMBtPZlw#nLU;+oJLR8<;28WCFaR>9q~1Lxzz{-VB|>np>N^i%n=s-?u-T| zSI5)xS9bXv6gT-Ll&7F;kZeryj#(g^wX+i4|Jxq$+hyDFVyU}AV(T2zOk@q9?zQa- zeU>A0Pv4i~#Vz?v zdp3pYizhloZxXe_8D zH;1wh>rIt4SS3~%q@%pzNweYgCQFS*52>Lv0+DJ*!`K9-xk)};=<&%*5nN98b0QV+x^nF!j4x5;9(#+tu2x96gB&ZNRqEe{ zaF8o=`%$xTpDdmir&f5KRXGf%aJdWMKyjRqp7@QVmT z*h-kDOC4o6Cb4IMtV?7!(E3V78}1Q^`sw^-3Ek{ zY>=O?gv>>AtnthM@O18-B$dYHR-@k6rmUYz6(Wbj5O?ItbVDG(qg1CWG<^>7+aaf% zSCGDFnyl?!OzOHi+&6tn;Gbw2yK3iwNP1;m70`Hd*!qP11>yilMiL4NYmM&EBDC_B zoKOEkos~DAR-LhuuG}YDenr>%PW_V?by709t*sXiR_wK@Kbqr)qB>qq?XG%*u-J(U z;rRLpQj;s{7wKacivXN;d)cgL_;qKDSbyp&R0Xkh0J?bm0>D5rL~fHSuu1B$dE?DgB>x1_spsEU3?1 zmIp3H=`s2xr&00vwL#$#QNu*zQmuDq_wDr=KP5%pmwE%r2jld5WP+-xO3fn4=+DJ)2~WHnS9x~=N^oioriA+2x0wstZRHmh?{wK?w5 z+r05UpT{Re>&!4i16Z*}k^%`Ofw>;ZUr3Zyv!F(%=zvf7=SDens7&w2emK&9G2oGo z5VI!_}f!4o$$8ok-`Y`IWM!=6l`^xMaT^)WX@-5zhtPH?&5L&R3w=`MRWx7IXP>Mz!U9iD+QU6x)8PxDQA2M zwRKDE0*Z1v7FeU~5|7c-w)pqANSwdi(S4C8`8ZerS*%HJ3DnYGqB^NAE|VY4gn6_A zrJ#%5^F<=v>&-bk=(`URv*47$*3)jahFyEB#ki00u%O8I>TWB(kjuZRKXfZ;>kN1(%PSbn zM@`1A=F5%R5}ZIOZ{CEpDsci}zEu9E-}u(#jh6W&{Hz50%@&UA3jbgD+>ZbTV@9?& zvz*zrK+_uax`p7mZF@O=G1IIb=p#cPP+{LLXYB0sB>NL#@}0DiA|^@GpaKgyXI-8q z;b=S+0L;zOtPDl*P{))$jDDHt>fVDTPkRr^D}fEK8RG2JY)qY|<(YaEV;=Ey;!$9bkUA5D;XW(|4Zs{nW8&eU9sOn2P zXs1drzxJlhXZ0^Q@z=;sU&F!K4X%A-DVtY=6ffoP3>9g82Ja&)PX3mSekA+z52W6f z!TE~O?slL_t!g#g`w%^{1h}rmI$ft})C3`6CiK#l!D!HFLRi_5W?2C3Ge>b1Kd?-0 zT)X6Tv{?L-bL?>eVeybjCsrCjm3pKs+Ov61IwO}rlo@@k@^V9xhixymT!!65z|+!R ztca%NuqbZu>-KvwD=mIDr+3`K)4>t<7mYEv^LekO05xQe3rSZujt~RJXph%V5V&2N74B?sqkcc*SI~nXjRAL3 zzVfPoX|I*rYzj0dCD~VCaa?GOwCUrF!f~1OJbRDeAr3>LKXzlTz(bY7`tN8bBOWzG zY#^;w@1)eM6YCM7(Hnl&&Ar`P+2}+z7XpU+RaeZ!W*9tInXGyG=GH>1bi|dU=m#Vx zq{-cmin0hAJG_iBl~t>kTy~;JB7dNg6lOMf)_!hBTcv^-u$4-tcr^+8a)*>e{NAv7Cbn1fm6i3g}J0flC^$Z`d^81HCxkFH}kvEyLAK%N7_Vb_yNv zaIP{fmNq>mYy~k!kC$LT%<}OgLPEFIF*Q8~yw=>;Kz%uwTF=}zsd!G4Q|d9Z+>}RE zy1Qw6Ca5_2JIX4TAm#m{(O{|o?VssDa_nnIhscGc7aAJ3$LF=m4y$*3l`f<=+SL>DwWSfvmk9z)+NnX<(M&3Sv$P4Bt# zC1ii^wCUTgsa@4^iNBIQWy$D9?}ee36M!jYi2L}dPzm1MsL6}O7#Kq;42H2fMu?9f z?8uTY=JKl@DRUE^NTVXMaplzvkHTAhKw{AfU%pXCQ(H0qH(-jvs&U|}qvO0X=eLyt z;X2^*48)0*Kfr?WO6k6?D4k6tXU~o&=%S$p;z4vJv?Ar95v*YbY;nrQwnv+V#NrV} zVcUy;(VMOPbS9gAO%>~AMpmv(ejOTkFn+Z-X(kup3VPfbYuXUu=zU>6=NDI%DUZoQ zKqfT%9GQFvkxX1l!Sq(8*B{{)sU`I@A;|`BJ1yQ~|7u$vOez_}R_o0|KDV$fhqZT? zAuMriW@GJLH9TCXJ2HMWIDGhhAY?MO^ixHZ>sw&JFL^j zwHE7`rN48R7k{&YO@8>o_{&c&P0F{q>pvm>RE&mN!jQNz->|UlU`X{LE1fk1w%q4N za%=AKa9r6Pvfk4Po~+;?POa-QdZaezb{iq`693#55O2YwT#_~#TbzJ3N4A2x_R^0R zW2xF_JOZ+a_i^SGQmUp>sBgc<0DrB3NX zvG`ghv(RW#_##QkC;oy7>&~GOAWCM?^Ce0SHyV(Mff0f_pfviJVPO%>)csqR5H28j zg*+76ji{-6H8yc$uvQ3yMoXs&Ao%i4tZZO+>0&&+!1Mh?@+S1FmX$dm&$=`Qv`f{w zdiWQf$eNqjRVBm)7TDkp-PQPa(WyfWYc@$kQa}7jP(slQ(Ox8oyRM~>-@Rna;wR(G zx(5@rZEMACQFV~G7kt-VDTvtVb}uk9+E&beqKNfsHKMU?=x)OKB@+u9!M_a#0>Q<)tXCKV>{W=aaj);GNZ77>5ALL`{ zMr1WIX%mJ7PzzP@ykAXk@oiH$+&5pr4TxV&Oti#;cK+Cgr)C)84>7`;jC+I znptJivde;oj#c-;n5gwULA3QU5%D#;@t}W+IO3 zEEVB!%_#W)EAs6jT}z9d+>pLF9wiLzq{lb@s>+g>^$-aH!0S5cuq7a}l6kS@u~jqm zr9ThLla+6+u-!4}7E;BGwuKhg<*@d#tr1g&TY@)$^u|{VwGa*+szVxugk%Ak?5(C8 zavDb$m!Is*@YjQ*22|BtM&<)yY5cirRVzUesWr#={UoB@u2>)l<@>I}X0TV|vaHm59Y$hdasY{t^TAZjs36Ac*3LuX**g|Lru=h(H zT1>iU@Y#`_TXSTELb#XR(*^>1wGe)W+@epa+m#JUE@~x+>0f(Le7S89O|?88JG|XA z9_Kf#Fx5_RYtgVs4kN0Pl=YPf6Z_lbPyQx#_}V3FXR9V!ydX&~(?v zqQ*Mj0Eu-NJZ}z$Xc3y&tHII4CRR(j``v5x`M(b~C9Jd_$gqW=8n2cc!Pnl&4Xg|N zY6lT`;WwdOV9{d^306Wo%iQ6&mcfp06u32uI+2g`BK52vhJa)F6<Dc^}MEu2+yG1Wa=Hk7}Tny>Tglvz-QsaPStF7>olGD(*m>NYnvJ| zM4%hMdzqmo;Abr31bDIa^D?YN1Sqc>OK~cpZs4E4by6~Gi-p%l@jham;w^*B?}lL2 z8e3>toxx~rriK4yYYc04YClyCE3nKL?+W^n8(eNhW(KksKaYk{G1pZWWuFcVX|L zLO=3}RFXDBt&89~jz8+iIeg%tl97G}V3m$R^bitUtB>vb!I-g0cB?32gT|(rWB;+7 zqls>nF`~3pgx?0s5UV3M;KH$JKc}EZ!+m&A{ay!{*nj%s7Nnqkc>}s`JUZfuQtjTF zGiwi3%SgIM!E=2nlH|YdkarMRKT=RPJusB9Ic&<5Lv~ms+Nr-5oJsRRLV0s&D^!$S zlUv&wuX3hmfLH!>9ow31csj#^Q|5{A9jVeOcGgI_%8$!O?!j|y#mxFPxq01;%^`=? zI9KFi4esbY&eJcL@JbWb7^oy@?8(l5Gbc6pGn^w35pwQeo7U{r^VT7wrVxSlML^*0 zTsuRf%EDerU%kz@W%D(n1!A87zinhq=7sxN3hX&OO6(up&LtVLNmYtQ;#M);qX$)A zc^;;`=+|qK-DH%mqO;tlUP2LZWiL!o*al86CqV01({6({Kg!C02H8a`ZTtQ;R9JDY z;F4#r8ka=F{J8d;jU(2nt~w5Fhn`j!rGSOfD2;64>@HeW(4yn}i2OX%+-Q_nQU!*{ za;pH0^}**2D;tq=h+GpWlNf4iWFR<8{qlZqN`p$*CvB~r##zGPj2DKXf#JQfzr6RB zmP&7yuT_`M0-2(0c4yW>xcE0I3D4uOlZo?g?Z5XY#v~$3dB{Ipz2sdK|GKOO2a@$p z8t_xr{o8!j#IB=jt{t8n>ApCR->bblk5^7rnTOOC!|C$g+-5j_L&2<0auV1PsF)s;w>9$lVKeR{RgRLOh+#0AO@I69BeZn zWK@hplqB^*+2t_M%|N4|`oqBy39t)j4KT zcjqr7_WCBi@z}J3=$q?+?TKY6Fl-AFohEe7R5>Kiq#m@qpGC~&e5@?PWs4h6a8T$tAkbp-@JGZJ?Vc1Lg-}wT~2jte17vyJaCWU6g*5L z?B4{qo5>#N*DM|%PzDQc_BYb|Hb6z7Y#wr10*yo#7@6GyJ-P~}%3`MiEdCNR9%FT$ zG!qKA#rdE3`gl`RciO7mF6A|5*v#4vM7T&P<_dz}`E}0d4@za2{t1z-()oGG&j&1x zy>1*d2{XX*Xci&_4bq{()L7|gvva=F@ybmaXe+~lHHxwNwqx|o!gCfIN@7=9Jh6rL z)T#^&{}XvN$(L%O@d-bl26w*N-+bgG7Cf$+M{L+LQdR=AjtJ)HYmB5V0`!qP_(N^N zCLGLTHHvL}+WUP*4pF=r9tyG;wfVJ132g;X0^SU`Z(cW$EkYYyR=`ZvzfnTb*gg%{ zm2J=PFFIV+Y=HVrYF>_Mtp+L9&*!Y#=O~mP9h(97OX*heDB{e6+G!yQm$nRJD;-pw z>wb5o)u6Ww2)zVG2d|D+qpU4IEQcv|>BYTjyQaIETHr!^o;h(@?{7zd&+htdr%=v7 zsE^#46mtrEF6={Llg}aVFd4gBtmC9a3xlZzPs;=P8VPf zHJ|)xX}c%hlUa-x(a7^WZ+W_vw78YZTon&^`tiw$JH_D{zb5-%=6XX#%g`aGd61^} z{i=O0)(O~0Os-whIoP&}07$Il1mo^>%8y$^0r%GIj$OX0vJpoI*=1qRyOk~;n|~Ga zLI*m5nhzFO9eImo?)bYOYO8rD=a99#iJVoV!DxG*qYl0C;HRv1$OKU!7uKdUHEZ|& zLD^CdC35(;tXF;P#|i1E1(C$fI<}m zTtIJskw6k8GsoDbnu(eV%Qj>uzcdcL7aX4vLEtpjmE=WU7c!(g|=?EeAfeIK=w_=kbcX{`2|KPXVn-Pz^>agycxM>Ktp zHasf7mY~C9TNg4A?zIp`*iWBvbKpR&UOAmXqX|PUv!K7!5o}JUD6KFPv7lg@M5dKYWZg zqV-T&8}U9T?m}saETxxk&9Sk-hChj~gG*Ie2s_&BaS)BrJ2sta--&SsbC_uH0JIfS zoCu9ejvBG%3?FR6wDjb#j0<7Y^*#KN>~aR)FIDpjiYH5BOe5(HPO}8qL@nhy=Ks7U zTNdam@&BRnhYT+4?2ln6(K;eKSdkVt2s5qBo;nErXlIJIw?N4wlM^70tuSZV$%)fQ zmUB#abKsP&t^5-PHl7aLaunFSM+M9xN@15Z*fk0CYmDp71b2FZ0gD&_|nE640F1YzFsRlbvyE_S8nYxc+GcHHk%U@JIZ|M9sQ~FpJ=&~nJ<-s` zur(L!DU-(O9m6vHLs1xfG?6;uV1h%Td80#eI1{9m9a9#GU*aCTmO7$k^u+`$LFxcuBM|D%A`NNN zzPYfx%-0&ZWgdNu*q*817e+9b?o|C|z__iiln}0=tT^r@ZuGVw-ggRf=a@=|Ml4Cu zuu4Z&Zub%?sZLemXDNX-`6>B*%)0;cY4Dq=)WA8b5@u&&XsNi9wJ8=m`?#@@^pyY5`6|7Wa1b*}JxErn*5znNg!t6}D?xBw#!x>%nZrP?F2KCQZK8Q~-~#_vs$ z(R41^GzRHJIYvac=+WzsI;KSymRh+`XSnxNX0{QdLysiZfWNE|#Hz*vvgm7Mr^UKW z@;L4j-!3emcZ&=2a_<@N>`B?l>(CfKsxnKY3EqH)Jk12{SUnhrA8@`MLno7*(s;AB z$|~vH8|w_)9ZZn-^SF}-2y0m-HM|KEfe^?zPkC8EL~ORo!|~4*1hYa1TgpsmCaXc) z|8t70B0&f{6?ucP;#4OUIgB*KQ~$bcX)l2@4Lz0B>Rf%gwSFou2Bc=#?Fa_ zvVK)NF_fDmvt&S%{vnVk^v36t4E|{1PYYhcrOWtM5oWD1ntMGr12T*JHp}1r9)(dv zhs38orzr3`FC3G2eT_+0y*|~TJBKAH!l~QoiaWasT(QLCGs2QRx846CH-$>R4ID*4 zQcDAU_CeqZd4HTojkBCh31;h<3pC=N@sgcv{jUNrt0 zOlK=bl&tT32D{Ad%|p=JbRb@Z!P=LrA$H-P#qo<6INnN1O}A3<9yNm5mJbkrG|8HS z_~n$vpFOcqFC0|$jh?omta|Z1M%iV&5!@6|MaQ6n+S&JQ_5aNs8~E|c5Nw=>mi=7X zCXg~!oV_ETc<}&t!Jnhddv7($$QPp}@oI-}Y@vRz)5%Uz}U>2;wZ-iEi=D?ww`b5mmJ(;c^+h4 zT0Y|-gzZgQ`rK`91y;aT2>Bc267Oz6b1x4g`hm|%?C)&YwC*D(pnDP-;3|BH zd9#D1FhGcL!jINg17udB1ov0pOU{mid?Wz}k(|c$y5x=ZFa09Hpe&{CXf`apsMG1~ zhlSsYf8(Gll>CC_xQcF?2a_b&?QRqMnWMG`UD4aQ4M8C=2O4FLC* zuAwl_)QhqW7LJWHi%pHhQ!m!k-PoghgUvJ#3#;Y zH|0%LNSCh4tk+OPP1BjQBRoQ4nsqD$`2~sn4V4a`NoY;pOF5V91H;4?bS;C%RB4-^ zFq?%Pd{EUJgZvV(tc&TSj#^?-yP6m*4lG$#%*Y%aXFNjH!KC}rTCH}q%X1jB!&n## zODKIIB1KakaoqaB0=P04GLtupFtlsbzYFu+TP2GJnX@BklQogvqOFf;3|hEp2E?*u zD>Q;fHjw@OrMOIYAA>*mzIwx$O8vFYOb+q9R;DyM6e~fzp@3?pvDC}UA~2OPR?GLE zP=Gh{vPWe&)M*nv@qd0dyxu0iu1@LT%F;MflqW zc6?1HXpxzVgqWaeVUKNeJ)BO`MGkMf+p)nrR^2l-g@%%7`3l#`XebV69zi#fz6`hA zZGFATRd@LItn%3ZYrO9&A%$bP@sUj;5dt8wnGU9tv6d{i+cN3r+}Fg-BeFD-CXldz zv7SUoEU?9Zv=FS&OyMuCkno z@2k&-vy_?F8(E5f*RCDL)|!->$K3h1x$&AW2Sq9fGX6aFzK+vH!;1$K38C3I1OiNL zRSj@uTal2yj|nT;x!e+ILX*xq&|@}t5dn9dmmy3Y9r7mlsmhwU9lFbBA*Gx7fs;g? zkN3*x*Z+G@@YIe7nP_LV^tPc@rV=#c4TFgU| z_)n6U=z&=`icOE&2VU}N-I2)e@I<*Odhg7NCbBt+0odNs*WY4CxbJS^zPKw(3s_Xr z5aoXjpZh;lX2SfTbihaYz{$QpA_*_+sP^h5)ianYY?c7=UD?%}IP$`mQhgI(WRbQIw#hsUhMQ9LfM=d}4 za^(U??_r?|!3Lx3Uvd%C&*jBBvY~IYY0t zye7p~%`a*+QI$9(*5lIkK8!in%RQMTjn87QEgDh>kmP_?FQGt}niiT{01u+B#;PPr zQS~OKjI#QJVm&)Xp1jc2wG|C^EjyuJr*Rejg&qp!*paZ3n$)a*Fgc?I#(=$TIcg(Q z^a%Kmsy@o8aZ~B*o(7*7U~b-}`<`dp3Jdq)094-Z&JYAQzQe39WK*$gSZb`X;8-OT z;R~TBt=NNfclQzqk4hA475ojV;4Yt1@a7?~4SkN(#z+KyvmFfUsC;6w9^mmija-)a zYq;iC;S$-)E^a@K=)CVEL;vk1&&YhCd;3t- z%kfz~WL{aOE~fzGiaBHaE#>3S{iQ+U_k+XoQ`!}1y%A|{2ag$U*kQZ0r`a8+TB5IJWntaEl|DeCqdov=YuAm6Ma+>U zcn<0*sRH0t{Nb*lo5Rfii@lz3eP&;P0OgON+?_rOwWu95^ZYgVi`dtR2@X7tV#s}x zFuI!$MyWOOG1=Io21P;CdIo`a(DVd|X=Cb`bMd7(03 z%$>%5ekuzYHy73>SC*sx@JV24IK|y_q*V-mpz&SJeEBe+Vzr0ATazjoB=P)?>EQ-1 zn(vJUj((TE<>%TExyt$fggmAzJoew%X8Q_;D;oFhkMzL;ns^TkF|^qNMI<^WFMpjx z9aLPt+3{=`#AhBeCn0JBS^=Lw`ecYHIdd<8pHyp%yx$NpCfW0+0A__Kt@&5<9nKK z(}QYw@_<(F*HL~ZiZ_WA{^j?#el@Rz_iFav%>}dNdhoIa#jgAiw-D6BKQn< z8}0kLHUo7xFPHt}$@QsYN%u|SAX4slyvaj5S~5_VRvnMJ(onNy=wqvDa1^sl3x383 zU=OBU#FrZ;Fy<+^CK$qmWgFP=w}9tX?clVTN;zy_XUmSi?EdK57t>`ux)=X@cT7_W z7uI+S%r`Yd48NDHxXUeXGH?hyJQEs|j&w}xz*|anFd{CRH1PY(mGL*pu67&@lRwm9 z-c$VcV8ztod(yaS*xKOAnsicR&!3}O#XQp7ge{}q!ZXE+4s>oMfL%mNd7I|hrT#R9 z4J7|A?Q3jyCgo2m_5THJe!>W+nUPNKnTc}~ zOD2b*I{@oMv?vbj4;?~E{?g(8&s;KnDJ)~Rkh0hFa8penqo%|iV|0$dKqY^z@S3#g ztX=y=T_8^`5a^ZdoC34fB#`-{`w8yAdx#{dbeOpn_n){$RPn~QOM`ryCW{XucM3il zD;+941>LWizw8v794J4bJdDvPuZX*SmHZ6OoAET~)6IgN)Y8#u z95{=O3gyP#7UX?gc@!f0#b+_O+zu4zWoRC3a)n5kUny-sv@qzjV7+FYeVp?H%;D-W z;sE5g9kici8sL$C)Tavo3&Ur@8xSALwl~Kju}6f<RSX-nLSdfg0>@2^;uzW6i2pun2z`~g1xepKnISgL^IVh# zHYdh)aixS>)6(hSN9nqYDmFbh4bQ1y{H)-7hU3ovQ7Y7MCAc5?B6g z0eLaMX;p&pjV{J`*SkTe6h83Uc&XRE^9&Sa(ixqtj2#G{q=2&B+l2`M+(Y97Hn0`+ zU2l6x!nC+{Lq?1C^8Ii@J}LSoP24BIo;t^{N{%;>SKuO3oV3iT=Ko zp=Jj)8N?wN8_343gt2dx(Sp3hf{0X>`(U$<0YfY<$o?kX$5sKlP$i9{Z|MEq;fDSc z9ChyI*^MrZ4thXGuPLZ-B{|}Y@SnyLAG;xL+lmK_x9H23Tn6l?jN8D8Mv#Ya-GeK6 z|G(J@N^1b{qTEW{OI?&}89BVbZ1IN`>weQ~Wy;b_zb?Je{um1ps1%wJ4sECMYHB}~ zqgZAfveBeyA#b@BqZww6`Aoop@l`q5r2o|l&+n4ZkR$9iC;8&nq5yUQ0|xlG@dE#S zh5>n??~Gn~Mg@1tZMUN#Ur{Uxj;0Ct>HDVB+y9C>M*a~|XEUZJ3gUZB)KJ9?t|Tq{ zM_jEB^H{cuTt%!WYUgZXp+&n|F<8dbWSmP)Bye6>ZU=!9DZvgm$TH58&x@PVza$U8 z!Gf=CDqXsv3}Khtbn&cZVfbEieT3JRrwvMo20dRwSZ(I3`5JyZ8boVtFDCB`#4uk^ z8kM3BOLs%@FkN-#N2`ad^h5uMU6=Bc2zdS4j7(IkZ-a^z!K?oMV!2H@2p!R; z%#14>*{g~lxch|!pKj{4MvWFhW!9hS6Ncb;!INw(EwYQ{(Y*Q~=yXHhrhp;s_VI5eLCq|4a1tCQWa~sEc+=Z1!kKXe2ar zg9APvyVqYsx|G`hZ*G~fu&tgtKp634lun#IE#eq-6l2UbbqyX+WFF2-uELUD9@0=2 zJ6zkw$O){#%JnfD#%d_@pshuAx$dcFfz*{ZdXO)#5PIqfp3SV$XZ*c79i^F|W2da= zhp?h5oC=A@A2k}Qty69JlJ};gno5QsGKy`aBg&tj)iVkOR~lC_x-!0;D~1zhT;*_OF7B=^V(_Di2p-~6UBDO7V(}SG8aMA zT!CNex9sc#sONz8ts+^{ctk-MpNa^H1HVw=l`uR*Dv1ox=f**dhUbtL;UinPniO)i z(F7Q^5K#oceMpjY8Dc+dE8c$yL@cc&pnsm6c~O5t7J^opBDW z$m=t##lGM+MVXVuhrX3F!@|1q$rig1sI?g}U{eJawRP9urA00}RsMhDD)#I+&dJ9w zpuIQ}ma%`TReGjzU2R=!pauAd`As*^>4RWwIyf}GCL)?7sq~I%&#lr<$XzqVgBWdrNSpqZ(bmY8Tn2#v9E7+ zlP=#flbe~u;qQu&BNEKV_i5BkhSz8W6i%^+Em^&aN_Yi9A%{0Yfw7e7Nw(N1^1HO1 z4m;gq3+6@jnHZD!Dj4ibi2y=5l?hEDRBAM5zRK6n#MlmK6=!jbB)!s|Jk3)lu_hZy z3+g*P_As03&k+Llr=$d_a;l9YvHK!d&TTl}PFQE*u;tUJr+X~Nv;A{%PU$=F{Ot%>A1} zKP6RG`{NZGzo74pnkLSy;$0qMi)F z*UEo}piH$h*~fkp*<}h>!5;v(=%e28;yuGM+9s1apuX(P>YJp@0hobvo;&;Dr7)UY zmMMa%aBX};_Xx0W&sB#rSGWc#vSG*Nw3dx|K3u7_Z2fkbq0-3yGXi5@bzEjnkS2GF znQ28UtmS0MK0%cQZ&IXkE*VG<9$^m&AXQEek#xGR7^4dghW#G&gZa^zR2Lntn!bzZ z8A#t(=@lI@)6kzEO1TV1{c%zc-ZY(eA_*%bnbkfd1T`Rid2bQjn^2MN$>M;{btxA_ zT7xcp!(LIAJN@cA^qO zi_H(NI zLd{DW$#{d^COn?l1}_uN{r17^pTPxeP=5!PgNbUayawX{ zzmStMXFH{s%d}(DirjeqN{o7KrK{|qX~zwbqI$~--kkRC*Ef2|+*xV*p*b>iz07}b z#=b!IFuNofX{6ju4bT4_!6)=kErfa5&OH1Rx}1u*RZq6RA|gu3oEkm$On0cCgsn9F zXEk$J2C__?zHE*({9U~9UkGe&<&zyt9k(_ zA-c0y_vlLDD?``5_Q}&7*_#YrIsOEccxh^tne}G}g>vu!E`I*#gMtI69VEc#i??K5t;U-Caz66@k(z;88`cw&Lh#cXZ-P`G2J>0+aLz z=gp7@BJz@E;2y29^m7OOI%25zHN~!i`A{!-svwaztmV{9Oz>!hX9zV`?>(vit#H?o zrgNAN8~Ii8UNWDaH8t83?L+#oDSE?(eNNUy?^C4MneDbQBxn5Nw|GTPq{%VwPU_*n zodGyK@^9aPu>7RQ$lC3@ylme>qK!9PhV^{yPdgsK-6VF!HWdO{ zyClr6Ry7m|Z}2E>PEojcZq#-du8hxa!A%?Ud2tld&eS0?BY0?v2HPz0q}zz`5CdO? z9mHN=(hQ(?c-|6wwsyh5lF+xry(=5yH~J!DuN|C`mEetd<8h5oIU*F??~3P6O-rAg zac@nXo2cl}{k{|cUA{vL&O^GscpI2nCflWpcxhpzeT8)A-is6&dGTYPNNa>F;@!tl z!blF!I6kvg)fEKEEy!p@wZY)Mm`GwimO$SYy*fny-n%V9AA?d0`aK?{jSr&wgcc{- z%@xQ`y3gBN+`2UW$7k)dFXMx!{nnE8A|%{CtpK=w-u+*uLn?ErBmiAmUFRO8aXkp3 zKabqUDS7U2<|InELOBu!(GD=!$^I@HRM+K-c>JZaFEAhLNVWb`)xJekxBWqJMfYEF za5Do3rS{~A;mm`cy6*zoYtaNp#=&*@>lT^5y7wPRsAbnbeUsv!-Q8)txM@%R^WrJc zGqW`wYhRw0It9uEE|pEK=osLZy%FJuwfJcwC&iiKWFfIov`x>W-#(PPRVzfJI zKJQv^?n=`8)b-2wjcP&7_HIgu277mI6}4W?H3ILpoW*Qo+fBahao2V4dag-78oqo9 z%l?;SU5+Rt8lKld)DCP#J^MNDVA^ znBETO@BcgafGjVErn`^saUre1Iy;hp6%4Sh_%E#I>urlTiTf{JU?CCT$wrK+B}H2X zVd~2FczA$cIqVYeZ&)f#6I8QYcz+|hXoDDBrP2 z^kk~oTCQ;f06HSx0{;8dQTYeNYYfe>9I?F4eK}}8kKEaWlm>8cg!{^kttSv?;g9*C zA!@d?O9zZ%wpqI!1~v3L*#hTHj%7(#ogiCrkIu9l4ti7fn*y(w@1My;wr_^&4@L$o z1yd>C4C(9f5=pD z)|*lmk~PFN_XF2uusRFQ69@M3lH&U}jVc7xA080%!D%2`nwa8=*|AnOe}^hu5?Ea{ z)rURL+at#M!|-sI=-%X;OyVR&2GS*t{Vb{ZsWgCQXv%VxjoPl7DvAq<}V)7-_9ni-g6y$w3f}pnJ#{_OD4q% zRAW5J-feU17IsO_S*1Xl1EZO0^`ta2>18#Dn>eAI@vvX_|J29n+EC<_o7>`Z8%dHp zoVBB3zH4#Lfv+TGzUWmy*6&?gMquWRL^6DdA35nb4mBqpByq`dXm1xWdza{;9#NOC z1%4`aTN9VZ2f}8K2}k6ehbDt~jWN*c0mW$U84+y9ZWW}9@e&uX%{9ecr}w4$=Fe=T zj!i{o)Xg|Yyk2+EzNmH~f zr*bA8KT^6UE@=qMQt&g9GDB!IRooZB*MF_3N32|rz(#Y91GJ($UBavU$}M~wim8<$ z@yXnRCXcCH0G!plzbE}-a=lcALF?hB=T7KbeU5<5%SKns6NpWLm{%VmMv)AF_ixiH^PD*JmjPINIFD5ECS$Tg%4He2A7YVoq+_H({L1o$ZiZCqb zBi`(Eg_{>C$f;jO{e9F?a)bJj`s~5x@Ug4l=<(~%u6@{OEvswGhGe+RtGZysUkGS* zcqs3B>6nmx63#{aoIEAWT9eQ3|4LTsLjcvv^VmFh;^Uc0HyBl(KiJbp;qv)knmaEr zh}JcAl`kg;Xk*Nh?hf7+o*T=ugCJd>H&4mq%+B;~I`x<5vH zwPa>WTsH$==&m-n5wnUH6OhB#J}`=Yz+~NXlwCxOs{5efC?JcrXy}N8;}JC%q#F^u z1Q*@Oks$A>ifNM^?us;$F`4-HLHXb>iEJdNQA2E=Z5# zkdI6ot|K#!=;u9#4&0x?oB#JV1hccgFRb#Q`>k~pBFb=z*hqk%%low#P(+q47B6?) zdgwefoKiMH0W6z#Dai!%{);>l-jVeC%F`zMP5*SrQk{UA(Wt7uC3(wbINCRsdMg6* zlAoCk*v~;Sh&?{ugF#$W9WNLM9Z@X5+-H zkP^Fc481-`qV}R-CSnocU;Kg0heitcmn1P(7ux@wOD?(u49fwGiXe19|*)JUo zv%Z<~d*L6LN)eVx5*V^S)bhvk>FK`*>XcSRmnbkwB%5gQ2BRx+A>cfm{>SfD@Or`s z#Y?6#fJI91Dby^jrMa~cDMprKQsHery#876_ZD0WDGvsIJfy2|u^o5{_WexG4UPYm z!(KVy;v8Qvt47%>EJDG8r^#$snn+d@x_{tXib=8Rvq!utl|AKQNEw4?#1fEBzg4=$S2>faKhfVke^=)e;08g@ ztE9mBU4SL#t=Gq}CZuwTGB|QsJvaC*c8YPz(GgXb;aWcdiJQ`o?0!dnak*zN+p-M9 zFkmqRZ$H&6YJ$12Baq{LSRE>{c~N#jwR+>Rn!h}65r!^lfvAv&K3}naYD}7+{DgS9F`6uvGAAJVaNW{>_akcmi97SZ22UM?pCL6?5Cj9_J2LHe z#3RE%06;)7*^laiUb%KPBoz(5Gh@0@6vC*~K}=B8@NBhdElcp=o?q70!AuQZyvmf7 zILXx`een26iTx_=av|v-@?fqK5;Dm8Y822MgJvI2~=3o{pknl1mSDdMV-RYuoa`7b|jCocCQH)<8#Nwl=_4x1PJ0pu^R4u6Gw~p z3By+#_TMt^4>HIip~mPLCJi0K@TA$?toe?&2r2gkt}Jg5p0qfGP_wKcB_hmoJU$kmA^$SGZ1}68>3aA#4Wz!{s*iko}=J(A`^EsF6L&|09CB!Z={e5jzeH-g6Su)?bWme_A^ z)^#37EiUp3yS4GVHyAS53G<@Bv}SPx9l#&6tiZVbYS6%hxUYZHsapDFuyp%8AZH~c z{QXO)TML~g6mbY#S<&pJs%xyOvnwL=9fCg09c~snoewXJXbx>Igfpr;rH){Pkcb~< z(l2Bf4jGAV2=2_pB|BCs7Xrp7$$re6vhZ{^?plWB2_O=dHxI54zs0n(rc|xU)hER< zkFqCBMG;4NIFeuG1`*KIg~SD`a9HDXz#M8%@MA!*M)ETL%gY6d5%L|tvE=MRH^a{1 z8{sEYek&Iqlj@L%crS@{W>|IA2@)cdW>+*;+kJ=H9a4<@J zGG(PXFsbbZin0bxKnHA?!$H79L_sc_Ddflx;EWG^9|%m{V{^Nw7{xy;jY^X7su&BN zMBRZGF>8cMv1)Z}pbV8P$FQ52xG1dFYY;%lw&VDS%ykkb^i?keA}h=bRxsunVL(`VmCVN<&HFu}DB)=*Cj0)HA7TgcEN%ObD%M16-f!D@Tm$+ z`M_Nxi(fsa%g=QBD9Mgmvu7{51sT-u;o`4UHSWz zZBu4mILP{y0u?&qYA2C}@s_AQ?H6BYrVM5RVE18jGz$7~UPEKxY^4j)cF4A zzewk$mk~Fei(D|bu&%D3lM6>%IhXrEv(GKm!+-2SKkmqjeS1pFUy>=68Q*CMatrJ^ zNrL_upZfinp&fL@(M^H8eMT}nZ5C6CchTzN27MqeUg2mV+ ztcET4s)Ox~!N=sDV2WvQOv!sH7sTm!Npc?p-ynub%o4Q+Pc`m35}H%%Cd}(Z|6myqYm|`MJzR2O;4}RSCq?h@TR%@mO3wily?OcD1(% zUw$<9=FjynHg276j2*Bs=V(k5Pu;%L*Q zh;=m>TsW0#|DGF}2T|#f2Zb#5B~uX11L)(I?-n*s^XTreaeO zz;F?Opn1s`AzAY`-Q-eke(2R#K31a z5;4Yt!^b1*6EwWLL@!j&=WYrJJ;o!ufr%pGj(HYnAb5CEuPJCbO59up@TZyagTtlu zK$(QzB8C8pe!=;W0AH_mrCGwzST~qBvl{9CIQn_SY445hi}cPIbb?|c>pss`NoUhd z9)dih^~SMGxu*+^P2CtbFx<|JnJq2CF+Lw9y$T(^RFsoltKX!LCFA8?RjbRNnRP)L8eNG3?&` zKCtpxuTW^HHRvg^f&0X&E>H!Ii}@83)01t3k(CLkMwnz|A9b>jLPam)dZxcV2aR9@ zH34`4+XoH^Ak(Sdb*YWkDdQgv(f&CO_@V16q5~K9M&hn@0o_U-;`os!aw+~lozX7} z!qsD6qc+rI%XPcQ*|kd4AIYlb##p3QldzpzPBS<$Q79%SrO8K1c8l;y#%_9p(5BKI zFXKe>*vEE1&UhM9f_v`$cmnDhFIW49ikrOKkH5Hx_n;hC@78gRL6glrX|XPW1}ZVR z^1@p*Uh&@i>OCB?ldnTHyjMay>TRxH)HS=Nw-?j~47oB96F^-Lv}pOXU%mVOmkB?l zQRP){u`0?jA|FT3Pa_i!k(5ZHkz4iE?U+kGG8_Hta7^>)Lp6Kutcnv#b=@U*8F2D5J*>XLt$!Le)+SLT4+B!sitKnErp71#-7}T|sO|6iYtqpQSN-X)%b~mPAcsb<|A(7|oM4IH7&c8y+Z;ne3JeN#<)~ zBoG2nSlLDa=Gjs0H;cR7vr{K`GnfZlR<1Sq_ z>QVfZ3;nCt(Jw$T#rNz%!CP9P?osOc^v-SKG-_<+&%Y8l$S+#7N!A~zHQck-v!bG?Jh0ZF z@ZBPACJnNk5@dkImiS$rZ_wSPIYlf&umT$zVK+TDbEpF<&%U-nMKWv1u&G20+ugKU zpzbXap~QH#(iX5QpC@-|L0AE7>d}PCJAhMELYGe;%@)W&Tu{ugNcNC7`;nP&rx|F6=e^I> zaV7I1=KU0k&5^Uo-@0Z6xdh(iK0P?<_}tHi2H7Z`sgB1J)nDpt(eu9*3Gk0I#g72gJ0;qh8I7*5pJRaAAFK1JIG=#o;SfF2NsHj}$c_7LLfPu62unNl$ z3@9%5;g@>EpA)`B&EkkA8JsO)edIiG}oumSsO^)3jv5;L7UvE~fKftx+!A&!LLna^7Csn%d$~e_KVUAv%gYF0zJ#ljS8?JwZB~ z4!VQh&JH%|T3|>icfQ&5C0cJSY zj!kBL-*iBIhO5kx9N`RziS`{n6KS2+`-giZJ$&G1l~=e1_w?w&5XglkLIGPPg<`=Q67m= zdt@vh`))tk(3@%q;q1#TpJTSdms!OJ_K)? zJHX?TH|39>!yAq=z1~TpTA~NgXfY%51R-r^ zzZ|~@pZo_)ijGJDGrdiw!~9;xnzL5(687CWC|PIy?VF7D z%SR&4+`t2J(n4OZDFfAf*~x}95*#eQosBl^*7?=Dhhuud658FKVB^5vP6^8RB%}IX zssu#c*>xi8`+=~a3Hzgo2$}l(n3TYHnMSpuhtCCs6)4qOd#to^H>&Ca=M*C7Lx?(E zrTgb9Pd&4`Q`zffi6Hp+xVPM;(uYJRl?sT~IG*@?c^h$y1^G9)tzGq9!zOZRPlH-Z zAr#@fh>?*`t%!9inNQ)cEA5c^Us{RBZ&++EoS81?n~Ir}2CT;ihO^Gyi4$0s1Q?~A z|E}601*{SfT9qLmpm8jyWiqbdeGU-~lB2P24x%3nA|tb-{Is;2_p#b?%!CB?%o3Ur z8Wrq!?p5G5$paJ=f`8%a2oE(VLe0kRVu(h~4~%KdgHj@1i;%r{#1cNBJ4mDAv6<-& z$CE`?UC)KYR(dcNcA)R4e7P5PW8Jc5(wI_PP~s}VFwcHrr7D?iObeL5Sjae z#w!Holn+b+S>{3TvmJ(gLede|^uCZU|uOZ}MRQ|BpiY|z$ z46Pl4H9n*6ULSp&Tj49G&qRF$&Mmx~>PBH#bR@=80Q7(#t`@x>ftz&I)W>n>{fX|6 z+#G_EEm|=E8^(=N(^$@K6b;WGVFHph_l1>pJ010C;g|@sO>nM)la?+ABS@%bSkMr; z*}0=M3zJFW45^iH{+oDR}m~q@A{DuOMR^&ETQ=>QZ^?2pbclL9!bFG zN00I5`C1B=4QOT%^T3UlBznQ_tAi^At?vq*rbJv5@(`qxlJc+S>!{EB4EAE{I%| zsSHE8t*fX5kt4au!P5qeJ$c^N=m6`~Mh9~ua|oi#pK?d`?VGc$L+)h~F4%5ooI|n5 z!XXoQPLs+dpqHX+uR$%c_b7*h^N9{jFqSb%u6e1X7;_Jy;ZKaD0M=P)jj!S$zs4B> z{aD*0_vItLXN~X;B_523B+%u_fbQTLKP+Cj(IB6=f=v(ibhBnp$2lurA{*W3F-jW> zdBIalLRT#T#J>lRC52n69tax9Ob@x5KAd@ZL#N|x%D?@RcI&#Oaeh+3;QtIt%6j6E$KD1 z=r}b=MJ1EpfrqcO&s_qwKpOC%$rpljD~4@wq87vM8Q4&Eoewf99hMDk9Hi*^ceP=a zQ;^}MFHD92a4U7^md55c!+a#s#|11$$NIqoK{Fnv88h4VT`|_f*SqwJ2Ix8?c|YRI zy}Ug=wt|B@di4;aAlrNTBddM0GwICuJM^DoN)ko)jmY*N76cp>N0 zCERg}-2c1Tg#3_Sk`{=14N~FU`FdKlN-XL}ynU~mF%QM&o~&QN6x7|L(rfmGD*xQ| zumYOev)Q|qywcyAwM;^SZOetInPA0`G@8^u;Uo7pyjIHm9;*pa1FY*7LDr6SPBj!` z3cG45H>CGEn`&%4!z1`+EBQbs=q=z3HmoUu0)PvghOs4%x7U00JdjY9 zJE1f7x%vk;V`G8Iue@->r)#~u;1RCfPsU_q>7zF~md~M9UBi14%PP(V+iN*M4be}f zYKg;TvZj%V)|W#99C7TgSwz@*1~i-21&hcX=UkET>0;xgMLJ>Gd@FO-f35JuYP9`W z0vwUsfB41U$>R@Ml`>>JZcM2X)oQgrw1gyZAaN}FIbN#V*fGXD8r8qbGxpkwTS@J& zL!<-W6)m6s)pvHa214?^lPRR}h$@P}Zjcxi*iy=5Bz&pC7I2Ogn7Do7Ra8-bAp$9k z=*NY^A%sym_`qed`^dua_n z<=rzu@=!j@6W|8Ak-k#k7%Vks>!Lp&ZHAAsG9PJ_UPUiZ=XE*n8Ii-3-5A>z4bY2} zpJ8mp%tbaLhhgy%MsHW-wBBd+<;!@eLMle?8~AbWX1izDD6HLpA+p=V;u1L|&fyfQ zu_?GAGeT_QC?R9Mc`a2J#=AhSY+@ygixpT;xnd634Rrt?C|uT zmA2PzX$xy7*3J9i@4lewG|(t$Yzy=1anGT(*g*)r-=)m8@sf?FAopkqc)N9AzBTG} zC5J1CWX+uy@p-8M?$(-)V$V$LiGGCjY`S5NzHWehNPC5hjk*kyzH5cGeDO@Zdg-hk z(;eeU&lWuvT)6x=%jpPqWI(`DdU|2b0g0Xxi2k_@VVt`sVXVvvrxK_o!~w(kdFeAP zRInk0RlM^HR#r`x(HrCXRfMkSrH|?i1@=^ia^cDf<#!3co4YHhfR@Kv9p0bP#?o2r zafQb~(VswW)O7Wx$h=Lip21^y9@_Y&gmtHI=h4XZ#oj+!y<#j5)6CrqM~(M<$G3P; zvC!eRap7o=Uj<`(_CFm%>@otq`mg-o*6`Rlr*4S@hoWGAi{>BopPNiazoD?l?`rwZ z8jY=q4zAGF!2%eCfh>4<}gf+M|HXDnpRP!zTdsiR4X;qJX z%`8pBZ%yt7CjiW^Z|gHPc=`kZQRRjA4vMy(vLMTfb>s}8c#r4a3t~%{M=)CY5cC72 zFZ=zDuNTiey4D7u2@}yWq%iT8SjvhztGmd%A@mGGz&ai>y)@*R_Al2P1=q7sS4YXW zW;Z}!@oU!j+)`m_&GUes#Z^1HsXeK+^F0FJ^=>=5xmbRc$7iv_vLe{XhkonPF7@)h z0WyTuRw+lwq3^>ni7+~sKeUMTat?x4Qyp(K$NkGF#Zv$BNFuk=YXbNt0{mywFwRn! z^)E|n$huala!2mThoRQOzjofrNM+IJyrEi$u?O*Ww;l}elo(6@0 ze8I++taDnOEb2gvcl%V3pAc`%v60hPGZ9ca&^ym6^7M#7W+Fpxj%>^zhA$U6P05vjllEJI2n-;XO7kZ{TchN5E@A*IEsKD`^# zhw%|n9nTV#Bkxfq)DQ56ZQV|vZ$T?wNWg}05iSy6BC6V!ZPh(95b;kFiADId8?Y&Z z`$ay?>UIHFyx*{v)6%B{cn;75gXtx11%Awv$zdS0td_7s#*5e~7M)My^Re1}S+M~A zTvMZhy;Gg3F4YC$o!Cyc5Av(^-SHEa>^O1nyg(!*|18t>XzC2HSceJ7Aa1H<)#PlD z180rOz3hui1RtxuRo4%%u9Fwdnau-c3BP{HG@DI!SwP0}LtOl-*)PJgSz^s%E&)8N z!rzs^YirFea&QUDAZBEt z$UGW6GxK^WqD6~Em`$&jDY>jLc;|Zg_N{NATI;Br9DLIONd(Lk@vAo(AD z{;J&?Cs-zr5Wwgv7S?7RQLYN4XXBknZ`G+$MyJ*5=y<|%0k+{thU(UWD0ojYB zHvpwo0pt0Mt#C{=L&Ho`Ovvw-iXd2uRc#c{8ASV=@m4eZ`Id1zIP0sJXvF=%n*z)+ zmP<+hb&3j0EPvPD@gS?Z4>=mLMT~Yo(QGrQjAW^HPic+RfQxEx$$;TR4UR9dgRL^` zqW@TS3FanXWPFC_Mg8uE7We;s!}3Fw9+{o_l!vjU?@7&zU_I7uZyWb^Wg={rqf@&I z^1+Ask1XZB_G>8`pJS$=KX*@?GLWtaU!f1&(iSfu?jY zs00Iw+Z!XrGm|83fF$FAPfM6F!A3`ctGxxv0vWd>GEs5iXDam|;#=h3m-YIFFp-0# z!(^0r-)QUoQ1JluW#;eaFDt{GL-@ZfRuc5J6!>dLeqQmy5>fMlVye$Wcxf7gpDaGo z`C#QmKKb;PVDh!l&-W~)zSEf0s#O*KFp8qRVFN*B;OV%877?mq#kV58M^GiS$p%D> z{hQFe0;g+V+AX zk4S9IZI8<61Y6pNt+|93&UXWD)RiN=DqIFRFXPh*z=RSyd4!$CL%n;J6+8oaPnhz8 z`ff{`YKJv>dLuPI$$oRVAnZWC^cgz!9!B)0xvVpf{@I5NAFFCezeuf?p%GX4eD|7b zTp(B_O7AkG#v$eDaYlzTgcZc@`Fy>qniw_!tP!Y@sBaB1)nGM@d3n&J3Gh3buY%gM zIQp9Ez27-nY6i#fB&S@sCNgOsUrlSK`X!Jg%GX}@STnWE{{17#m0RKv^tX4oV~}GK zY7H?XwV|o}&#SatgQGDZM=cWDt){XiK~ZS>v#REXoo482 zPhl$a16}PK832Yy9A=byEvq5WJyLkr6}&gXxQKd*H}OkjX^FthZaGsXYtNBQ@Menp zEZrsD(*e~ObD|RHli0ON()g`PX~%<^f1_3-6d*Y14QB5+Nn)Lje|oWOyg3AE-2@ zHU8(BeE=zQh(Uttk&I>tZzlcewQJvLd`?3Nrgu?Jm4TbPS1VtPzsZ=|9QvD&s&J?s zFU06cE+3Pax7PU|SBJSwo&6eKS+J#!XqLHV@F;%1u0D8fu<|-khYdAaV@9sY*#IL^PlT8j0 z?wGAp-!oAvW2jcw%zzD(BlSh}EN~>gn4G=#zU=cc8M-CDQsonw=7l6TGYl^~!pB%Y zPfyWU9|8hfP)QxhtqJJ8wwmz;`25&cTon^oSk+Wh&G+>*>Vck&`*J{~q5g9N7;&5d z)wL)S6m2q-+M79}?pdJ2qX66+IXsyGj!vD)^F!*|Y7Fj{gS#)eqxns_!HiK^U1xK- z)k9nh&44fEjUXoVYRv^17V}rQ$K>_cd!I(oxYd1`nP0mpI(NP^uY?I?1obz9+&m8> z*tRT8*AhE4ayBglvAPbFkUD~tVVmbfe7T&U?Qs=ONQbumySn@bf!Y z9H6EGzGPi7}xXr za8M@z0}%4c1ougemxa6~bV#uMEPw!r_^&&sAl2h`z}fw%k-TR?#)KT^n!3KH4!sB3^9)gq4^Ls*Yy3TSzl(7 zMq7K%ogu&Qj3ti)IvfCI&hbZmW1MsPq`Kr;Kzj8EttB>+p^mrm&A@U%2i5(xV1vDW z{A2i!!FiXsHarvh=NY#7U36D**kTnOwi<;VovsPQxROQX*I%kaBXitv_4@WcX_rL_|K#dg-#SZEe1=J-Kfmuy zsO2ZvVU=}=E3df2YYUgArbG)4`@{1Liqu<5um>=s0w^ZlJ=^Ulxz4q(UA)N~cm77@ zF3#mNZ+c;!))Od?z_jmTHjeEk)JBTQohjYZ{YTDDwI-S=>6ld|wu1&}H9qZTFzJWI z>#C0Ky-%7Rp~(8u$^u3^{%Xt_KUK2*Gmz3xiIK<2{NR+3rtN<911&c zrRJH5WOYYphQoyB3Y3OkE+5^^LQ=BLEs49|ooi4u-i#y0nZjux$&%vB*+fDTmU=1w z>$+H~wCK8TEwCU;C-7u~iav61c|1hajcF0QNY94T@mi}@0s|dohABsyF!@#=qfI&k zo?}Tb{+^u>D50=CmF`A(tAH(Df_54jmh5|p8@t&CrA2nnBHI#SwdrNITh9;)2iEj^ z1%_^~5von^^)Z40NPubQ_;lUdqRA0)*I{$U$j#`4>-SQrV|DgwO*PG2lwt&qr1;Ht zpz%Tg*4Lb3|5>Ixf*pjW`E%C0Vf4(Gh4myu#DLt*%*2n)3%!fPBBL}I_lkJ8arZ1V zO*NLcPzL4hF^85S$vIHm=)Jq5jN6m_<$#h`l#+RQLi|U*x=#q|?E*9a3oY zhJLaSFu29+=}^+E#Mtf8)0wkd9aT!L<(#Q!MtNE_WB{?9FjkOV3{{e_YVhIR_zNsZISIXRzVY%% z;9|23&_qzZI|mKbaLbD)(arnf{qd@ANeJqA$;|~ZL=VVvp6|?f41XxBkBxtR`y1}i z2Ds)|c3NVfxw+Vk!>i*6u!~)N&7OLVCfvFoe7q~!F)y;YEc->`Xl{si{`G!L~?4V-u*NJHh*-eEqE$xmf zJ&7Ja+s75lxga0MY?I-~iADygl_h6hOp#tTuU^6*Ai-^Or+GLg-Q-?N4XWG-M^)%OCp!&lB`}KO z#@a9fGvVml&%ViGNMZU=m05HUuBk)|@Sl`GGw{=;TTmrX76sGeA#z}Pgt1j4T5Iksjg8$lrj&nygF;FxY^VD4c_Q2>xHE=aA<;8lI0mSBPI zqEP+`p$WP13qM^t`RiQUMG{q+(AZT;q~akAr>#+fF)V_r4-xwQiXMo}@^pWh%Bc;;0_jc~B^hT-Wl}nw@d?Jf(bjKCs1M88YGxaoBh{uB3Wu7TdHRJzEX> zO4jHLoU=AFm^QuRIH*w@gPM>~OPwSzfq1{(Wpz2quP&8V$GRP z6RDIH101^f`=xQ))pSNty~z1Ke40<*+22~1X|gBJiq9vV&|IvZZ5b`+QRbs-rWR{9 z@i2hy931F-wU6dp!pYk?5NcIGpi!6NDC<-B%J}6%V)*hVTxeO`U&<0)18w?lNp`6? z{dT5RILJ(qWDJ8$)rGq^+($kCDK&x`=b%8zaK!&oly@X@AoX}$ih}O(2UPsw>?bwQ z73uBUKFH*?E!D7%@zJ)OctdwFtEMpWICjTlDeiRTnrae1j2-1WM_=@h3!CN!DO%a% zP~nVi72!ILCu3cFjk9T5G zsv*t)C~b7_M<}CAN1tTk%H!@2g2YghNqCg28hphuU6$!s&5LMxYgv1r)?jUR$Ig%g zS;=Z>0PVkV;+^i1GLZONJ8JyeQQB55|ADNNrU}%_r(-C`$iw3uGz+EE>8{1k3=SGu zJ7EQ%Oihwbq7enxYXQUrB^vvAZRSutGe zO|9f97E3llzK|jANp>b1*B~9^El=inNwoE-`p`^4NA7{bW=(yQL)Pj2h4?KC6H#kP z-E2h_E_t6p)%D2)Bl&VZ%rTKPxero>82Nn&87S37{2S;QVQ7pL-5aqTtO-RE^VUXVje-Ko*M z>7f^6T9A_&t-afV=c+p&CyFM(jqgMlGxk9Gjdu^C>bWe?x&3REUncmT-xhOAN3I0& z^3UB`{gAlZCu2E+b2}0oU`ffag{%+KH~Ckv-e+3N-MmSZeDG~ie^bFpL08QfM1S9p zl)MCUF7H6%mp{dT3n$tH(*ic%V?ejoR-8kiL_02)gj&o4=(6Lf-sSQ`dWk~#R`d#0 z85-uxyEA~U-59VW$araDyg5MPmIYPhNv1N=2m91+@WGvam#yEn$Z0c3n*!Bi!8HB| z!(St}h6JSSMDfZ0v)(YEmf)GB%!OZ(;<*%&}C%Ij=x3r(dc(8qANFSJH>&!t)Z7 zHrQVf%d>){YZ<4=iE+zGs2xH&ZEe7LA(~4wW(g*oqnKpkL0{w(XNn~HH zJKV*rdhLWpgVqz~i-J-G=Khs1#+d}}?G7hjHwJ1Xl&E8B-Z!nTQjZ16?}&Ju0DG`r zC`Dn*emSo}BaI32Ff909B17NuJo8N=5i0R7R6!wv%l1>PGl#b!Y5Xo8zZB8H*HK3uN>8$Ls%*<@*%{UHEl zPG4h)81?1Sx;l2fgCc;Z{iMnV#eP$^sd>hvz-W?mDNUv?U?Go)CY<1tB3h_*74Y(P zic21IuJwY_^-L)oh4Wldl;mjoShu! zDp8w{dpV(f3lR!FY_EoAQfR?v*!^tE<%{t+rqqyB9VA}OQ`rnQ;&w#_&BN`2s)0F2 zpL*|L?O3gnsITnMGr|N$En|?q!=szM(zW~C*Xb#WT*_lLO>*o|n(>_oAQ6~BX#?K; zp2N_5AJ^?Mmp=#^nwHJ)x-&ma|WMZEPNN$~n8z7Y)#5dtr)|ftE z>mxsxa=H`e{~x3R;pIY|af%=iap9j?38g;4__@)lL}iPr`j>CZOHf2K1{Fz5y^`6C z3P*yC%hu?_lk&uXZ)EK$k9*aD$#Ni4Tv<54$3RYEo@uXp#8fuIpfy+cyPTPCatApU zPsT!Pcgkg#i912x{mD9tQ)=q}qe))1_WqQZ%cslRxF~DR>t%dkB>8oR0Vc&@@bW3t@6?tf3 zHE}83>R%FM>)D7%akdg0Z=H5ct22X3SE^f(CHM{C%-m@QayYf3RcSSs+T*A+g*sO! z-BA_hj~8J0IOYvom-_}cR#=9U+#G1rjI0*vn93%xNj&g?eFANg5z6rdD$7sa*85L zw5rs?@jGwyXT04o6!tEXymmRwlQ~i}iM_00zAM6(kQcKNNc&)o+)ilweGam<&iT=MWU8llHV~z&Ar^Yt3T``D^Z+@A3>Np7sgO% zEk^K}KTMjH5g|WmA9k}cfJE*H%R?;qVRVEy#3ZyF*2eBc{p$wn@luD*VpXo2a%wKQ zc>ra}G?3c6TAas&g!h~YQSR09l_`sBCx4rMMPNM72as8SepC^hp_%8>>FO(Vot9-9 zf}bE1fTF1~wxM*K>eb=LJ~O0*-WWi6l0==IINx^83ijsll2mE+RM#-a+Ms1Z?pi=C z*Od)Bv>Gb^zb%^^X4IMcUmYqbZ&-3JHxO`cY!Y1mID-%x5}D?HX*p@CH_k4ucOKg7 zGZDFWpVu5!)GWE45|c;oS9neY*pF(F+u28>ltRY@@&VYCnwsJff3PaPEh*DhSZ)M<2AN#1)%w=+P4sPMrkGbX3x5= zaDsbp^ZC!@#=piH21qdS{{TtX1vJLA(2O$GxWe3Fz-cF$AjoIs96UpW^fVCpgP@~k zCIo&}Ct18nlHqhmuRvGCv8~xUmWBUG+Zo8Lw9n>><~;F5#x63%3_?+?eC#_AEFkq@ z(%^TQq*LfAr$4IXoXbOcLcpGLt;9e<;MZMsAmhZ2VD+0oZ7rfBo?dX}M}VmPB7sCO z*X`?}Cq8gFg@PvHOPBGeO%oLi5Fv5h^S2_ekPwgVqeJYK^? z?#}Qo!$wUzy!pjPJnsfh3yQ8Fz&i3cdA2zmAhMOy_fx>Yy}gsU3r(_6#0EjlFk|G88TFyUWWUJ_q?UvG$oeqP zeSAm)|IdF??Q)%IV5#xxqDEp~XBid(>>}?zKr={i=V0`eo&FL=`a<|S?@eSiu~{Qd z%!yaQoAW#x*a^r^1rqAGS5iJ^X!%qy9~K|QpC7I3v_05r`_=Y`r+XuMKBFop1$4}c z*x?{0gHd&H59G?cusYN6;4Ff6(DNZ=AM#4{zw`_@_E0Ro<&VU~mxlA?tYs~$U389Y z0qp*_fqR^+-hx6cROPP<(sAw$C>IiL|c|0=!EabaSfsTXi>o|QhG$jqb+hd`hG9u!+g3$8)T$%ZIZ+%?^u z6@KC;_3G6DP30d+I11L7s6QMd>C!G$L`WhG>7?F`@EQSB6O&upCj!B&SqrX!rNRcZHYMaq$IhJ&&2ungD3cSq2R_~kopl@_8H`RW}IBX z-h&TbX6-T+-J@|nTo6zoEdb%tUj}8sM}64iO$hMl0<0*7O(26(+{{k2)b8K@f*!u& z3$&n@rc}a1)dsLQCdxqeVP_w^ed7qlUehX;WR+FF=m!Sm|LT*c4CfsqYtw?xMlXK2&OTA zrcP9mF3EA-vdnL~fdclA7XsE|+;eoMIl)lP9MnVW@p#`iIV2(!SqCfcEl3~SNB-!! zvl}Vi-8Qisx=izD)Q?DN)Ah0%wpN=7Dq-cDrY17%tPa+0D42haRlXU~cFuXspdsxc z#Hvi3)dhk;LN4m6)fEQM-gLi+A9Z=RM@5-}PgC~U@kUB*gt3i0pYBl!NFgF*7EY?* zBuu00DfljVdLQz?7md{g_O8{;hbQhstzomKc=iu{X`zM^G{s7= zOC>MB7iik{jUJ2i%|dbxM?@^Mz63Dm)^d~>ou~Jb)mQo_)+1QDPSI-i84>Xq%N7E0 zsNp;abM8e62V=M(T=brGT7HW>&a95g9>B&hv6IA;Wz5&ivYic@rt(kHZ4rk3q*E5J zVUF5hepF4r$GlC;#VJOh`0Uuk5IEho+^S%swmT9DE*5=$TJULkp}_AG7vs6lTh#?o z;Rvh;Q;UVO@6yAOlfc}MO_XGWvrBR*?McF(a-Xs1froJnoNCu3p98JK_0(7pt{fPz zyUM&qNxUZ?X62R{{ubMw!QBIf3e{kzW4*m4?VSnX@QGgJII?I`t8NZ#S;P&p#Q1~9 z=IG8Q(bdQOAZ9JCr|W9fh|?dtIlBKpH2wm;8UE$0Td6~)$k93?Nb}5vK=a^ka5bH; zP6nI7OBr1?KVZ@XPF3qY*vx0fpFJ&M$Yu<$#_4q~6dUaR{y7NgIx zg%?UWaH&>rOMg{@3-nSf$5)3*q>^#SRAAJ?z1Lm4L)Vt@2u4*Ri~v{DP6=h@%4KZZ zr2}2`A4Yv{)E525o<4nyBF<&0l4=M|2VX)Yi>^5yB}&8@)-w(DyV`?8 z+v*0MLdfH@A<{4&LpL3^2X~nU;E~3Hy8F)yvw|U%|I{9y=6;fX0h|Zgsz3cmlG!F4 z>-gFj^D%EY48;f{qZE3kv4MtdVm#Brgh{b`n04_>wK}B!!K4oOkV-B}7@mgTy{r{i zKO&9#yg}S5Ejx)EPi0ZxjQ5E!pmEwZk4j7RUx5jI@t4T!R)~qLB_IMRG9CsgH#&gr zt4*q66~Nc$?b0MR9M4qv07va9;l4B~rfO!z>yK>rXYWCGT8qeaDjo?U5BoX~pU&qq z?b3Wh)q5a3wgqOI!XS>Pu-1-O3o9OY-_Zgu2e0uC1POOQf}~l$-GCAwJMR01G@$%5 zwW$<%6L0xS*9nKa@Of8svMjlL)^g!0p27rw*-qw{J%gYZ{SC?cT*~G??E;00m#6nY zy$+Q8Kj)1Ze5QOaF;*JdLsoD=qHVA*Bob>BIyX8|n zaKA+MfndkGQ`NJsHB$cM_fLTH5dZP9+d-YTWjOr7OW$cs%BhJWf~e`|6K#5xpKk-$mVlS-BTLRVyc$ zq!(Nn;Pf_xkNpXcBvZAs_~p+a%VKryyDBuMBQz(so5{?fS5zy;c?1Q2$Qq8osisS>dudI1<_Np~D5xYH|0d~(9kge z-;K`!AqH(8Hy>V>Dc*eA^xLMPAL;wB@dM}+AvuCtkL#S>BhF5DX-Xo+s2rM}1p8I! z7FH+*Kf6eFJq<)U5ezYKNQG=B)Zw)|h7*&F-Fk^sbQ3ci#Kbx~c;h7wh!({oW<~VC z#h%!va{R>R3^VR1D`e8FqqGUR%MPml8b#XTCnh7);t@m9_o8$@YjEX(o9K)%H{IC| zp8;B_#G4!I9YRRC1(Z=2NwYC2xSvic6BXFSMBn+YuPG&(MoMp3(Yzr#cKlQw4K14i zC!XjvX}EsBA1*@C;iT<)eT?%BG40N^$qQ05omrRtk8sn$Ux|{Hwfy*9x^ev*d|qN5 zM6fQ-27u!%RTuUuWu+4Eqviu;rWG!E&6f(-y`|N~F`pM&eFj*QZ2AjWna5tBAHP@VX#8!XQhF zn7A!U$w6L`qHAudQq+UBMF;>NbLQpkI@~tMgD2K5`)F6V>DLmE)R@G`ILoLNpB5 zc%o<=+X8xx@pMxsR2cT{+hYjA)pq2#A0r>$|LBw#S8dL>QNRWIpLR6+#PF7~oZCCtBb zv!DD;>-k)a4KkNH)F-WV9QP!D;0*rh5O$-~&K%1Dhpnd7t-$YjkRE&<+}xia!k*ZzrOk`E(Xt48#- zjV07mD%-J;!ltQ}Oeh<41`30Zc8V9z^#X~T2-w>5yq2&{3Rum$P8v zTk0*3%QL$3mQ~fKFpkh#k|B@K-yf)RH2#3yE5|c$jJ7_P`avIHnOA8|bVN{EMvHW{ z72xra{H3@JERWnOen2@RinePEf1SdMH)f~xt8vDm2{8t@pS&7XO5t64)diQxEsl5Z zT|$BI(Jk`U#kjVJGf0S=69$}|+!R?q36*%MWqZY2{tTi}wMPk;Qg7SuD9b zik%dNk*2)xLq_7u@q7g6OZvFpXml3jG2peza zuCS)ZYOEvg_z(p5v%bPE0Le83t?NQ$Cspe%jYA(-6B|X8X;TAI5+CqLo97%Y zEE*j2PmPdFJLAw6PzgNA65**bvMkB`tF{ahST3^t2eL9Mj57bBl==Pko*?{UgnLoK zPxv{NH|3OJF>XWjBXzvH_-9>&c->rf_s=U;)=b_MKRp7$$I^QGRSEn==^ASxf0k}r zd*Oe>h1mL|VBZiZ(_2Zci#k+)vv$*x7=9x^j~}!N61H>1ZL8=U8BrvO+iYBMi}}DX z>*3^Vm1VW_L5qQ6*n2?GkU8;mt{2-|nU8p|gRoPw-3tTGOAG7=Ch)T1IBC0($z^2f zNP$cDeGB(Ix*I7smH}(IZ z?Top|fiM(o8M23J*Zw9lflGr$GV+=_-GiXKc;Fr0#B6O^QH4Qa9tXO=`WM4~95jZq zGrHoAEpX3x4U41ZR;-sGCP4Q;j;Z@Ep7Ro4cFOAbu@VjslB~C&-=}p1l-#o-#Z)wg zsCOpVi^zo|P4r)P(rF9%N0v_NFO7Ue%UPG~-F4rrF{@|QqODgT3imbi8BlmEdoh^5 zVzQ%1k9XhtZj6io9?}~3#$s*E?&fqE`7|yhqa#AvrS?h^;L`kwC3!wmhV-$K@p{J_ z-QQ&?N}rt$hbj*NrkQxWr@8S8t)!;cV#G}9>>@Z6aL&QBAE=^-C3LvMD$ak2NR))I zHcl<(&RcmSB|@lD4J*h&>XvaNffC%rBt#t)J~9`P8(Sg!Y47*hK}le->28<4>d16$ z*M~|}gq@p(o(dWQJ0ugb<2H0Ism`*F4Ns~I8A)4~G&uyAl23xv!3wb66h|dlaytR~ z3tfebY=m*sFd)z~<*tgZSLX?-Dq_B}q|FNt=*BG5Mmq!FepvH$bHcUts5T@8hE!K>|$8=S* zB5>|r|F%O|g6EYb`R{z)UeO^P07J4V3<`*&|FeeyGBT!tM#Yk8%%rSGg%MyQ!#~$zUL_q9AZ^&S#=ApOSd^k~ zq@jt_<(s?<8H-I9CXzAajsQZ90ilApHRP?BQ3K3$U;6Fw$9%~Z5rCH|_w%Z(^Yt((2XC?=qoqAfcackR2fUR57hhpd z;AYUIjE2wrZoU=jKI&`6kzz}^S$_rj4&QZ+3RDlH3>oRF#GLCr94f)8v3uX~6Ad40 zav~Zv|J%j3)~t%xcfO>0gN35}U64|_A-TIQ7p*t|gbjLuKj_ZzZ4mQNktXyAhfFXi2Mq9IgZ{@Q7$8DBprAo%)uj|VkW~p|zZW=F z(qw&aF2V+&%MXaSdVb!BRF^%z=41Y_*PIwHK#k*mAv+q2UdsxNPDUhQ?V8&~Y7H_u zs0S+OCBW=eUD`9Lv^_b`p^#OyQVC?IfU$c0VP)HdtH+8lv|;$EKe+Ug zRZEAj*4>DAH1HoQXAVXt;{(O44ZtZdZAq7R@VASp4-+dC)^0(vzdKEB;lba(xpcZu zf-_pDz{+k0+#P`MlGj8`cGVN}jfwCJi4Hx>vpS2zk}x#iXF%cXO=+&hz816++c@vh zQEtx*f)5CS!#Iv4D3^I)HIF(z)M3oH8pLXRhbZv+^09}Rc&5NL@A5Et=$~waA|R<- zVA-bn@2b`zy&HO%&ImlGP7`M35BTOq{b$ujc2C0W4U6Tu%Pk()P54~wo14W>24qi@ zu+>-@jYB2B7>d6qU6YDww$~3% z3my;~A`nf18X~Vr^|gQaQ!k&dqftZt-RkowI2>g|ICh~FXC74PZW7E^{B@7gdYbjTJ*h}&!HTwHdaQr=kJ@cim1%# z#=L*cL`$}Pw9w12Fx3;c5D;2COb9ox^(bqP^buWg+sh|6!LrF=%<5~$<+_SsZjX*C zEHDD|0L1)c!EXlR%xHOVJr&OUSFswDA3!yRMymeytNmD0gHK3=_YJ{kbI^XqV9mm5 zYL$B_)WlL2Sk+X=BFs@?%k`&U$GG7K;oO_S-t3x0zh1Fcye?eZ@)qy#v* zZe)Y(zvsLU0U>vDG2=lp zkI7>&P7G@O(`>Y-oTDhMJ>f=b*PVY;48EIf)71-h8OA2Sc+*6Zr;DY4WdGKQa_mGP zEj!T6dXlf}BJ<-lI9F}C)&+!y?-L6VZ6FB-;9RhKY_`|s>VNew%{027n4_!>9 z=>gfLg#2C>zd&8p*r06U`f@5{G|R|F^2fg@zPg(Ct9YrHn6}KX>_XAEbED_jC@Sm@(2J z-FZESHWF^3i$I{Co~QDAaS~;(|Nb<8@eX=wQP!9(0^CeSHY^Q-8m>fD5QjY=vc7j` z4?ve^+drp4ug5$-+_D8LUC=4V2UNzlaIgU$kdsz?+S@IBv0ey6gFCWhWdy+58lKTM z;{&tGriL{2YNtklv~=XA{@xg|l^4jLzaF=Isn>lUGF&9jez>>4TJAWv{%#F$ZD9Oz zVU+h~iiBBNYrdz2QbjYhOO+h+3Y~O(9D83Q?AT|HNJU~pJ#USjQqJ!PexdZhRsqyo z{+w+PExHXWI>OE(ei(H3!1W-~)GgC$1g3e|u=*J$80Gbrb%KFWj1Do#RQ?>*Ner5>9)@~K=_orv9{e8#=iN8B zBXkHfw6>gW44{(|x!vu&iHra#@#%)(d$D>Qu^&S6p#R8u@UyK{YlDpDE))CpdSz&T zxo`Aa%;cMS7_#HBKw*Gk6TbKYkMiOKuN0*lOV z3Nyax{)q&CU!IfIwvQSkRxRjC?5zgu-)wOp5*cD)5;WiM#iMjUMw87x1Ov~$n_~C? z_JZw`LG$P&7m{pi0-aI@D|J9mcR%cmAWPzGhG2LR)-VoWDjV3mWXs6H9#RM2Tt`yB z*D2bd3q+s=X4rlb7~x_qyS8B{P+BHZ!5`VC4ERZVbh36t4kyV2*q z=clqAqnGd+^h6WsWy4r1zzSSa4{JnF@tb7MP4_D$Kj7*iF(#%EF#a-1q1 zZWjQ^yh!$$lK5sdPK}JCcPUBlCa_|gpH_#I((3Fec4_`z6dFfyigJmZiKJOCvhmw< zSKo|uYJ4D`mYSG1I47B|`9L6tv^6MlAC8lIFo8oWg-XpoEZyCJikV?EZr#!w6!F&4!VniBDmb83)QfU?+0;3Gaid8n*d za+cpI#N2x7lxSq7yoUR}xG|;_2ORXR8?Mm=gX@?VDZKbkWg^Fr!wlhLxuww9h_>i3 z*5Kf1^;$-ZkF$}vG<_d)KzBP8|A-|=@wX5R?(Z!@%PXymYSlSd@S#iew}hZ|xso*qOopq`eWGfylcs zjfe2S6w4I)*ALF2*SZkmcyqr|tP&eYII!ixNU6|lPGg7H%&dA#v@CnJ8|f}bOHi8T z-6^16=-p9yItka6WekEFEw3@kKYq>eT+ZtSw$6d8YA7 zVyvH05z!RA18nO|pEHvHcgVbDv5M^gi>D2EdsZ8d|F>~%T3&0YFT^Gwd~y`R?<2s-r*hz`Y#j6T+jLqyt!5L@%6lAYTe}q9o1`0l=jT%O?P_(a+Kll*Tc-RFx`s3PTX@NB1T#Z{b z?doT?a%A%lF>wx=3=)9&Vi4-ly&-s zfS#%;Qa)&UUeO+^uz8Za2ZdP=SsT8$`}vZLv3zZnS4y5eFbxifPqYoE%%Kk8Y*cndKw9HIu;C)z8a2R(#cNAhlcE@6;MRf~g7V#09|pelM)5N|7RXmg(~qL)9N$t_n0XN~8@hw4+f@LfDr(bt z3=Hgdl6WZ&HngIYXDJ{iH&or|R(rAA!7%lC{Vi1sQEkS(%A?j37*@C#3I!tjS|gtK znO@d>BqfNB9cE8ErEeKi(@sQ_qPyq9&z0_$dq=*4S(Cl zIKA@;idz9Jb7by@_*a!!(>Hp5L9p7<-yad{X4^EIJj@cmhu_z?^6s8St$6!!>2*xm z0;?ZB6tFFVJn|4u3AH`!K}D%5e9l9wy|GHd2Wc8L^UYkk;5=l?jy+8N8=`PUEMa;d z$VZIVl`fld*Fr0dH^r89v$y6J_FI=gFChR;q=`1AJ72Xl2+f{U5XhPrWyHnlX$rdy z9nA;Ws^I)K*nu|~eCL>ai7%?T0zxi6r|DLoj4o~>UKATA5mS*+&@{yyq4r|Z1-SSo zWL2q`*R|!34w@YFkk&<7tDMktx=p{`<$?GgHn^PX5*v(jdQLQ{V6PJpM|~rGEY75d5Rf_L;!@@sFHP?j!5;8N8((P3tvFP>aS1EBXl|7iU;7M_7~oP)8tj=(iIwXzj) zp#E#;YlvuTb9t}Re&PcNpz0+~%V^iP17Xc@oGYUxc>Yk_MGDIY?mLHfANG&<@y-Zw z*_4fRbZx_Z9p%t_?5!5m9zKou-_pY$aKjR|hW^qk^8g87!y)-xV|TX_A7+*$ejVho zs99t`R57%2S%7?C#s`Eox`%5TIydXOZ^({gCh)K>k6zYP)l4wkY6m$O#k_W6FUbYX))3X_~+jO1@VC3ud7_etqC^rUH@QXT)QOle7+k_%VC8 zhPaL6w8P*TDoPvD6<&X~C1C5gII6Lcd^c1*HiS~=ok0cEPy-o@I?GxXL^FG71lYfKr%!&yD! z5Pk|;#!!baq;XbXC6Qu9^ydH!@JV~FCoqaP_hkwAKgJj4g-Al~``%iTbOFbN7n+fr zDh2Qs`KgIZ-^*&hRe%5dq|m%~E#*Yj3$QB;SHl&L$GtcldV>_Uok11z=SKG>)3vOY z)J)(d3BMyniA=7TcmmD7D)T0Y&Fm_ukok0Ppubo-`qx4AvH{g∓->%C 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�O2ym>jc_uWE2EsKERqx-RX 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

)uLyps)yT2^GNYYEt>wxU1 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�Wq@P=U>x|` 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𝔶U!0IhQ=rtQ3?vS+TF0!Z|t16KT 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

fqzcgYd~AE*6>2aztgWpNG)Sm-7Q8&x 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

C*-O*-hxJNvKRXNzRWDw| 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%0Auk@j1@E|TDv!UIM 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%0Ar{+7?Najsm@7jBM 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

VLMCS

+ +NAME
+SYNOPSIS
+DESCRIPTION
+OPTIONS
+FILES
+EXAMPLES
+BUGS
+AUTHOR
+CREDITS
+SEE ALSO
+ +
+ + +

NAME + +

+ + +

vlmcs − a +client for testing and/or charging KMS servers

+ +

SYNOPSIS + +

+ + +

vlmcs [ +options ] [ target ] [ options ]

+ +

target +can be one of the following:

+ + +

hostname|ipaddress[:tcp-port] +or to query a specific KMS server (example: vlmcs +kms.example.com:1688).
+.domain to automatically detect KMS servers via DNS +for domain (example: vlmcs .example.com). Please note +the dot before domain.
+-
(a single dash) to detect KMS servers in your own +domain.

+ +

If you use +ipaddress:port as the target, the +ipaddress must be enclosed in brackets if it contains +colons, e.g. [2001:db8:dead:beef::1]:1688. If you use a +link-local IPv6 address on Unix systems, you must append a +percent sign and the interface identifier of the source +interface, for example fe80::dead:beef%eth0.

+ +

If you omit the +target, 127.0.0.1:1688 will be used except if you use +-i6. In this case the default target is +[::1]:1688.

+ +

DESCRIPTION + +

+ + +

vlmcs is +a program that can be used to test a KMS server that +provides activation for several Microsoft products. The KMS +server may also be an emulator. It supports KMS protocol +versions 4, 5 and 6.

+ +

vlmcs +generates one or more activation requests for a Microsoft +KMS product and sends it to a KMS server. It then analyzes +and displays the responses of the KMS server.

+ +

vlcms +checks both the DCE-RPC protocol and the activation message +for correctness and reports any errors that it finds.

+ +

vlmcs +can also be used to "charge" a KMS server. A +Microsoft KMS server sends correct activation messages only +if it detects a certain minimum of clients (25 for Windows +client OSses, 5 otherwise) on the network. This is +Microsoft’s futile attempt to prevent running a KMS +server in a home environment.

+ +

OPTIONS + +

+ + +

-h or +-?

+ +

Show help.

+ + + + + + + + + + + + + + + + + +
+ + +

-x

+ + +

Show valid applications that can be used with +-l.

+ + +

-e

+ + +

Show some examples how to use vlmcs correctly.

+ + +

-v

+ + +

Be verbose. Instead of just displaying the returned ePID +and the HwId (protocol v6 only) vlmcsd shows all details of +the query and the response.

+ +

-l +application

+ +

Request activation for a +specific application. Valid applications can be +displayed by using -x. The default application +is Windows Vista Business. The list of available +applications is not complete. You may supply GUIDs with +-a, -k and -s to specify applications +that are not listed with -x. The -l option is +used as a shortcut for the most common applications.

+ +

-4, -5 and +-6

+ +

Force version 4, 5 or 6 of the +KMS protocol. The default is to select a suitable version +according to the application selected. Plese note +that some products (e.g. Office 2013) may use different +protocols with different versions of Windows.

+ + + + + + + + + + + + +
+ + +

-m

+ + +

Let the client pretend to be a virtual machine. Early +versions of Microsoft’s KMS server did not increase +the client count if the request came from a virtual machine. +Newer versions ignore this flag.

+ + +

-d

+ + +

Use NetBIOS names instead of DNS names. By default +vlmcsd generates some random DNS names for each request. If +you prefer NetBIOS names, you may use -d. A real +Microsoft activation client uses DNS names or NetBIOS +depending on the client name configuration. KMS servers +treat the workstation name as a comment that affects logging +only. Clients will be identified by a GUID that can be +specified using -c. -d has no effect if you +also specify -w.

+ +

-a +application-guid

+ +

Send requests with a specific +application-guid. There are currently only three +known valid application-guids:

+ + +

55c92734-d682-4d71-983e-d6ec3f16059f +(Windows)
+59a52881-a989-479d-af46-f275c6370663 (Office 2010)
+0ff1ce15-a989-479d-af46-f275c6370663 (Office 2013)

+ +

A Microsoft KMS +server uses these GUIDs to have seperate counters for the +already activated clients. A client that does not contact +the KMS server within 30 days will be deleted from the +database. Emulated KMS servers are always fully charged.

+ +

-k kms-guid

+ +

Send requests with a specific +kms-guid. A Microsoft KMS server uses these GUIDs as +a product id to decide whether to grant activation or not. A +list of current kms-guids can be found in kms.c +(table KmsIdList). Emulated KMS servers grant activation +unconditionally and do not check the kms-guid.

+ +

-s +activation-guid

+ +

The activation-guid +defines the actual product, e.g. "Windows 8.1 +Professional WMC KMSCLIENT edition". A +activation-guid maps 1:1 to a product key. However, +neither a Microsoft KMS server nor emulated servers check +this id. The activation-guid is useful in logging to +get a specific product description like "Windows 8.1 +Professional WMC". A list of current +activation-guids can be found in kms.c (table +ExtendedProductList).

+ +

-n requests

+ +

Send requests requests +to the server. The default is to send at least one request +and enough subsequent requests that the server is fully +charged afterwards for the application−guid you +selected (explicitly with -a or implicitly by using +-l).

+ + + + + + + +
+ + +

-T

+ + +

Causes to use a new TCP connection for each request if +multiple requests are sent with vlmcsd. This is useful when +you want to test an emulated KMS server whether it suffers +from memory leaks. To test for memory leaks use -n +with a large number of requests (> 100000) and then test +twice (with and without -T). This option may become +neccessary for future versions of Microsoft’s KMS +server because multiple requests with different +clients-guids for the same kms-id-guid are +impossible in a real KMS szenario over the same TCP +connection.

+ +

-c +client-machine-guid

+ +

Normally vlmcs generates a +random client-machine-guid for each request. By using +this option you can specify a fixed +client-machine-guid This causes a Microsoft KMS not +to increment its client count because it receives multiple +requests for the same client. Thus do not use -c if +you want to charge a real KMS server.

+ +

-o +previous-client-machine-guid

+ +

If the +client-machine-guid changes for some reason, the real +KMS client stores a previous-client-machine-guid +which is sent to the KMS server. This happens rarely and +usually 00000000-0000-0000-0000-000000000000 is used. You +can use -o to specify a different +previous-client-machine-guid.

+ +

-G filename

+ +

Grabs ePIDs and HWIDs from a +KMS server and writes the information to filename in +format suitable to be used as a configuration file (aka ini +file) for vlmcsd(8). This is especially useful if you +have access to a genuine KMS server and want to use the same +data with vlmcsd(8).

+ +

If +filename does not exist, it will be created. If you +specify an existing filename, it will be updated to +use the information received from the remote KMS server and +a backup filename~ will be created.

+ +

-G +cannot be used with -l, -4, -5, +-6, -a, -s, -k, -r and +-n

+ +

-w +workstation-name

+ +

Send requests with a specific +workstation-name. This disables the random generator +for the workstation name. Since it is a comment only, this +option does not have much effect.

+ +

-r +required-client-count

+ +

Also known as the "N count +policy". Tells the KMS server that successful +activation requires required-client-count clients. +The default is the required-client-count that the +product would need if the request was a real activation. A +Microsoft KMS server counts clients up to the double amount +what was specified with -r. This option can be used +to "overcharge" a Microsoft KMS server.

+ + +

−t status

+ +

Reports a specific license +status to the KMS server. status is a number that can +be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB grace, 3=OOT +grace, 4=Non-genuinue grace, 5=notification, 6=extended +grace. Refer to +TechNet +for more information. A Microsoft KMS server collects this +information for statistics only.

+ +

-g +binding-expiration

+ +

This tells the KMS server how +long a client will stay in its current license status. This +can be the remaining OOB time (the grace peroid that is +granted between installation of a product and when +activation is actuall required) or the remaining time when +KMS activation must be renewed. binding-expiration is +specified in minutes. A Microsoft KMS server apparantly does +not use this information.

+ +

-i +protocol-version

+ +

Force the use of Internet +protocol protocol-version. Allowed values are 4 +(IPv4) and 6 (IPv6). This option is useful only if you +specfiy a hostname and not an ip-address on +the command line.

+ + + + + + + +
+ + +

-p

+ + +

Do not set the RPC_PF_MULTIPLEX flag in the RPC bind +request. This can be used to test if the KMS server uses the +same setting of this flag in the RPC bind respone. Some KMS +emulators don’t set this correctly.

+ +

-N0 and -N1

+ +

Disables (-N0) or +enables (-N1) the NDR64 transfer syntax in the RPC +protocol. Disable NDR64 only in case of problems. If NDR64 +is not used, vlmcs cannot detect many RPC protocol errors in +KMS emulators. If you want to test whether a KMS emulator +fully supports NDR64, you must use the -n option to +send at least two requests. This is because +Microsoft’s client always sends the first request +using NDR32 syntax and subsequent requests using NDR64 +syntax.

+ +

-B0 and -B1

+ +

Disables (-B0) or +enables (-B1) bind time feature negotiation (BTFN) in +the RPC protocol. Disable BTFN only in case of problems. If +BTFN is not used, vlmcs cannot detect many RPC protocol +errors in KMS emulators.

+ +

Options that do +not require an argument can be specified together with a +single dash, e.g. vlmcs -6mvT. If you specify an option more +than once, the last occurence will be in effect.

+ +

FILES + +

+ + + +

vlmcsd.ini(5)

+ +

EXAMPLES + +

+ + +

vlmcs +kms.example.com

+ +

Request activation for Windows +Vista using v4 protocol from kms.example.com. Repeat +activation requests until server is charged for all Windows +products.

+ +

vlmcs -

+ +

Request activation for Windows +Vista using v4 protocol from a KMS server that is published +via DNS for the current domain.

+ +

vlmcs .example.com

+ +

Request activation for Windows +Vista using v4 protocol from a KMS server that is published +via DNS for domain example.com.

+ +

vlmcs -6 -l Office2013 -v -n +1

+ +

Request exactly one activation +for Office2013 using v6 protocol from localhost. Display +verbose results.

+ +

vlmcs kms.bigcompany.com -G +/etc/vlmcsd.ini

+ +

Get ePIDs and HWIDs from +kms.bigcompany.com and create/update /etc/vlmcsd.ini +accordingly.

+ +

BUGS + +

+ + +

Some platforms +(e.g. Solaris) may have a man(7) system that does not +handle URLs. URLs may be omitted in the documentation on +those platforms. Cygwin, Linux, FreeBSD and Mac OS X are +known to work correctly.

+ +

AUTHOR + +

+ + +

Written by +Hotbird64

+ +

CREDITS + +

+ + +

Thanks to +CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, +nosferati87, qad, Ratiborus, vityan666, ...

+ +

SEE ALSO + +

+ + + +

vlmcsd(7), +vlmcsd(8), vlmcsdmulti(1)

+
+ + diff --git a/vlmcs.1.pdf b/vlmcs.1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bbb228671e3139691db8bd044712b93e9a7862d4 GIT binary patch literal 25436 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 literal 0 HcmV?d00001 diff --git a/vlmcs.1.unix.txt b/vlmcs.1.unix.txt new file mode 100644 index 0000000..f6706d8 --- /dev/null +++ b/vlmcs.1.unix.txt @@ -0,0 +1,305 @@ +VLMCS(1) KMS Activation Manual VLMCS(1) + + + +NAME + vlmcs - a client for testing and/or charging KMS servers + + +SYNOPSIS + vlmcs [ options ] [ target ] [ options ] + + target can be one of the following: + + hostname|ipaddress[:tcp-port] or to query a specific KMS server + (example: vlmcs kms.example.com:1688). + .domain to automatically detect KMS servers via DNS for domain + (example: vlmcs .example.com). Please note the dot before + domain. + - (a single dash) to detect KMS servers in your own domain. + + If you use ipaddress:port as the target, the ipaddress must be enclosed + in brackets if it contains colons, e.g. [2001:db8:dead:beef::1]:1688. + If you use a link-local IPv6 address on Unix systems, you must append a + percent sign and the interface identifier of the source interface, for + example fe80::dead:beef%eth0. + + If you omit the target, 127.0.0.1:1688 will be used except if you use + -i6. In this case the default target is [::1]:1688. + + +DESCRIPTION + vlmcs is a program that can be used to test a KMS server that provides + activation for several Microsoft products. The KMS server may also be + an emulator. It supports KMS protocol versions 4, 5 and 6. + + vlmcs generates one or more activation requests for a Microsoft KMS + product and sends it to a KMS server. It then analyzes and displays the + responses of the KMS server. + + vlcms checks both the DCE-RPC protocol and the activation message for + correctness and reports any errors that it finds. + + vlmcs can also be used to "charge" a KMS server. A Microsoft KMS server + sends correct activation messages only if it detects a certain minimum + of clients (25 for Windows client OSses, 5 otherwise) on the network. + This is Microsoft's futile attempt to prevent running a KMS server in a + home environment. + + +OPTIONS + -h or -? + Show help. + + + -x Show valid applications that can be used with -l. + + + -e Show some examples how to use vlmcs correctly. + + + -v Be verbose. Instead of just displaying the returned ePID and the + HwId (protocol v6 only) vlmcsd shows all details of the query + and the response. + + + -l application + Request activation for a specific application. Valid applica‐ + tions can be displayed by using -x. The default application is + Windows Vista Business. The list of available applications is + not complete. You may supply GUIDs with -a, -k and -s to specify + applications that are not listed with -x. The -l option is used + as a shortcut for the most common applications. + + + -4, -5 and -6 + Force version 4, 5 or 6 of the KMS protocol. The default is to + select a suitable version according to the application selected. + Plese note that some products (e.g. Office 2013) may use differ‐ + ent protocols with different versions of Windows. + + + -m Let the client pretend to be a virtual machine. Early versions + of Microsoft's KMS server did not increase the client count if + the request came from a virtual machine. Newer versions ignore + this flag. + + + -d Use NetBIOS names instead of DNS names. By default vlmcsd gener‐ + ates some random DNS names for each request. If you prefer Net‐ + BIOS names, you may use -d. A real Microsoft activation client + uses DNS names or NetBIOS depending on the client name configu‐ + ration. KMS servers treat the workstation name as a comment that + affects logging only. Clients will be identified by a GUID that + can be specified using -c. -d has no effect if you also specify + -w. + + + -a application-guid + Send requests with a specific application-guid. There are cur‐ + rently only three known valid application-guids: + + + 55c92734-d682-4d71-983e-d6ec3f16059f (Windows) + 59a52881-a989-479d-af46-f275c6370663 (Office 2010) + 0ff1ce15-a989-479d-af46-f275c6370663 (Office 2013) + + + A Microsoft KMS server uses these GUIDs to have seperate coun‐ + ters for the already activated clients. A client that does not + contact the KMS server within 30 days will be deleted from the + database. Emulated KMS servers are always fully charged. + + + -k kms-guid + Send requests with a specific kms-guid. A Microsoft KMS server + uses these GUIDs as a product id to decide whether to grant + activation or not. A list of current kms-guids can be found in + kms.c (table KmsIdList). Emulated KMS servers grant activation + unconditionally and do not check the kms-guid. + + + -s activation-guid + The activation-guid defines the actual product, e.g. "Windows + 8.1 Professional WMC KMSCLIENT edition". A activation-guid maps + 1:1 to a product key. However, neither a Microsoft KMS server + nor emulated servers check this id. The activation-guid is use‐ + ful in logging to get a specific product description like "Win‐ + dows 8.1 Professional WMC". A list of current activation-guids + can be found in kms.c (table ExtendedProductList). + + + -n requests + Send requests requests to the server. The default is to send at + least one request and enough subsequent requests that the server + is fully charged afterwards for the application-guid you + selected (explicitly with -a or implicitly by using -l). + + + -T Causes to use a new TCP connection for each request if multiple + requests are sent with vlmcsd. This is useful when you want to + test an emulated KMS server whether it suffers from memory + leaks. To test for memory leaks use -n with a large number of + requests (> 100000) and then test twice (with and without -T). + This option may become neccessary for future versions of Micro‐ + soft's KMS server because multiple requests with different + clients-guids for the same kms-id-guid are impossible in a real + KMS szenario over the same TCP connection. + + + -c client-machine-guid + Normally vlmcs generates a random client-machine-guid for each + request. By using this option you can specify a fixed client- + machine-guid This causes a Microsoft KMS not to increment its + client count because it receives multiple requests for the same + client. Thus do not use -c if you want to charge a real KMS + server. + + + -o previous-client-machine-guid + If the client-machine-guid changes for some reason, the real KMS + client stores a previous-client-machine-guid which is sent to + the KMS server. This happens rarely and usually + 00000000-0000-0000-0000-000000000000 is used. You can use -o to + specify a different previous-client-machine-guid. + + + -G filename + Grabs ePIDs and HWIDs from a KMS server and writes the informa‐ + tion to filename in format suitable to be used as a configura‐ + tion file (aka ini file) for vlmcsd(8). This is especially use‐ + ful if you have access to a genuine KMS server and want to use + the same data with vlmcsd(8). + + If filename does not exist, it will be created. If you specify + an existing filename, it will be updated to use the information + received from the remote KMS server and a backup filename~ will + be created. + + -G cannot be used with -l, -4, -5, -6, -a, -s, -k, -r and -n + + + -w workstation-name + Send requests with a specific workstation-name. This disables + the random generator for the workstation name. Since it is a + comment only, this option does not have much effect. + + + -r required-client-count + Also known as the "N count policy". Tells the KMS server that + successful activation requires required-client-count clients. + The default is the required-client-count that the product would + need if the request was a real activation. A Microsoft KMS + server counts clients up to the double amount what was specified + with -r. This option can be used to "overcharge" a Microsoft KMS + server. + + + -t status + Reports a specific license status to the KMS server. status is a + number that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB + grace, 3=OOT grace, 4=Non-genuinue grace, 5=notification, + 6=extended grace. Refer to TechNet ⟨http:// + technet.microsoft.com/en-us/library/ff686879.aspx#_Toc257201371⟩ + for more information. A Microsoft KMS server collects this + information for statistics only. + + + -g binding-expiration + This tells the KMS server how long a client will stay in its + current license status. This can be the remaining OOB time (the + grace peroid that is granted between installation of a product + and when activation is actuall required) or the remaining time + when KMS activation must be renewed. binding-expiration is + specified in minutes. A Microsoft KMS server apparantly does not + use this information. + + + -i protocol-version + Force the use of Internet protocol protocol-version. Allowed + values are 4 (IPv4) and 6 (IPv6). This option is useful only if + you specfiy a hostname and not an ip-address on the command + line. + + + -p Do not set the RPC_PF_MULTIPLEX flag in the RPC bind request. + This can be used to test if the KMS server uses the same setting + of this flag in the RPC bind respone. Some KMS emulators don't + set this correctly. + + + -N0 and -N1 + Disables (-N0) or enables (-N1) the NDR64 transfer syntax in the + RPC protocol. Disable NDR64 only in case of problems. If NDR64 + is not used, vlmcs cannot detect many RPC protocol errors in KMS + emulators. If you want to test whether a KMS emulator fully sup‐ + ports NDR64, you must use the -n option to send at least two + requests. This is because Microsoft's client always sends the + first request using NDR32 syntax and subsequent requests using + NDR64 syntax. + + + -B0 and -B1 + Disables (-B0) or enables (-B1) bind time feature negotiation + (BTFN) in the RPC protocol. Disable BTFN only in case of prob‐ + lems. If BTFN is not used, vlmcs cannot detect many RPC protocol + errors in KMS emulators. + + + Options that do not require an argument can be specified together with + a single dash, e.g. vlmcs -6mvT. If you specify an option more than + once, the last occurence will be in effect. + + +FILES + vlmcsd.ini(5) + + +EXAMPLES + vlmcs kms.example.com + Request activation for Windows Vista using v4 protocol from + kms.example.com. Repeat activation requests until server is + charged for all Windows products. + + + vlmcs - + Request activation for Windows Vista using v4 protocol from a + KMS server that is published via DNS for the current domain. + + + vlmcs .example.com + Request activation for Windows Vista using v4 protocol from a + KMS server that is published via DNS for domain example.com. + + + vlmcs -6 -l Office2013 -v -n 1 + Request exactly one activation for Office2013 using v6 protocol + from localhost. Display verbose results. + + + vlmcs kms.bigcompany.com -G /etc/vlmcsd.ini + Get ePIDs and HWIDs from kms.bigcompany.com and create/update + /etc/vlmcsd.ini accordingly. + + +BUGS + Some platforms (e.g. Solaris) may have a man(7) system that does not + handle URLs. URLs may be omitted in the documentation on those plat‐ + forms. Cygwin, Linux, FreeBSD and Mac OS X are known to work correctly. + + +AUTHOR + Written by Hotbird64 + + +CREDITS + Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐ + ferati87, qad, Ratiborus, vityan666, ... + + +SEE ALSO + vlmcsd(7), vlmcsd(8), vlmcsdmulti(1) + + + +Hotbird64 February 2015 VLMCS(1) diff --git a/vlmcs.c b/vlmcs.c new file mode 100644 index 0000000..db6a60f --- /dev/null +++ b/vlmcs.c @@ -0,0 +1,1310 @@ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include "vlmcs.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef _WIN32 +#include +#include +#else // _WIN32 +#endif // _WIN32 +#include "endian.h" +#include "shared_globals.h" +#include "output.h" +#ifndef USE_MSRPC +#include "network.h" +#include "rpc.h" +#else // USE_MSRPC +#include "msrpc-client.h" +#endif // USE_MSRPC +#include "kms.h" +#include "helpers.h" +#include "dns_srv.h" + + +#define VLMCS_OPTION_GRAB_INI 1 +#define VLMCS_OPTION_NO_GRAB_INI 2 + +#define kmsVersionMinor 0 // Currently constant. May change in future KMS versions + +// Function Prototypes +static void CreateRequestBase(REQUEST *Request); + + +// KMS Parameters +static int_fast8_t verbose = FALSE; +static int_fast8_t VMInfo = FALSE; +static int_fast8_t dnsnames = TRUE; +static int FixedRequests = 0; +static BYTE LicenseStatus = 0x02; +static const char *CMID = NULL; +static const char *CMID_prev = NULL; +static const char *WorkstationName = NULL; +static int BindingExpiration = 43200; //30 days +static const char *RemoteAddr; +static int_fast8_t ReconnectForEachRequest = FALSE; +static int AddressFamily = AF_UNSPEC; +static int_fast8_t incompatibleOptions = 0; +static const char* fn_ini_client = NULL; + +#ifndef NO_DNS +static int_fast8_t NoSrvRecordPriority = FALSE; +#endif // NO_DNS + + +// Structure for handling "License Packs" (e.g. Office2013v5 or WindowsVista) +typedef struct +{ + const char *names; //This is a list of strings. Terminate with additional Zero!!! + int N_Policy; + int kmsVersionMajor; + const GUID *AppID; + GUID ActID; + GUID KMSID; +} LicensePack; + + +typedef char iniFileEpidLines[3][256]; + +// Well known "license packs" +static const LicensePack LicensePackList[] = +{ + // List of names min lics version appID skuId KMSCountedID + /* 000 */ { "Vista\000W6\000" + "WindowsVista\000" + "Windows\000", 25, 4, PWINGUID, { 0x4f3d1606, 0x3fea, 0x4c01, { 0xbe, 0x3c, 0x8d, 0x67, 0x1c, 0x40, 0x1e, 0x3b, } }, { 0x212a64dc, 0x43b1, 0x4d3d, { 0xa3, 0x0c, 0x2f, 0xc6, 0x9d, 0x20, 0x95, 0xc6 } } }, + /* 001 */ { "W7\000Windows7\000", 25, 4, PWINGUID, { 0xb92e9980, 0xb9d5, 0x4821, { 0x9c, 0x94, 0x14, 0x0f, 0x63, 0x2f, 0x63, 0x12, } }, { 0x7fde5219, 0xfbfa, 0x484a, { 0x82, 0xc9, 0x34, 0xd1, 0xad, 0x53, 0xe8, 0x56 } } }, + /* 002 */ { "W8\000Windows8\000", 25, 5, PWINGUID, { 0xa98bcd6d, 0x5343, 0x4603, { 0x8a, 0xfe, 0x59, 0x08, 0xe4, 0x61, 0x11, 0x12, } }, { 0x3c40b358, 0x5948, 0x45af, { 0x92, 0x3b, 0x53, 0xd2, 0x1f, 0xcc, 0x7e, 0x79 } } }, + /* 003 */ { "W8C\000Windows8C\000", 25, 5, PWINGUID, { 0xc04ed6bf, 0x55c8, 0x4b47, { 0x9f, 0x8e, 0x5a, 0x1f, 0x31, 0xce, 0xee, 0x60, } }, { 0xbbb97b3b, 0x8ca4, 0x4a28, { 0x97, 0x17, 0x89, 0xfa, 0xbd, 0x42, 0xc4, 0xac } } }, + /* 004 */ { "W81\000Windows81\000", 25, 6, PWINGUID, { 0xc06b6981, 0xd7fd, 0x4a35, { 0xb7, 0xb4, 0x05, 0x47, 0x42, 0xb7, 0xaf, 0x67, } }, { 0xcb8fc780, 0x2c05, 0x495a, { 0x97, 0x10, 0x85, 0xaf, 0xff, 0xc9, 0x04, 0xd7 } } }, + /* 005 */ { "W81C\000Windows81C\000", 25, 6, PWINGUID, { 0xfe1c3238, 0x432a, 0x43a1, { 0x8e, 0x25, 0x97, 0xe7, 0xd1, 0xef, 0x10, 0xf3, } }, { 0x6d646890, 0x3606, 0x461a, { 0x86, 0xab, 0x59, 0x8b, 0xb8, 0x4a, 0xce, 0x82 } } }, + /* 006 */ { "W10\000Windows10\000", 25, 6, PWINGUID, { 0x73111121, 0x5638, 0x40f6, { 0xbc, 0x11, 0xf1, 0xd7, 0xb0, 0xd6, 0x43, 0x00, } }, { 0x58e2134f, 0x8e11, 0x4d17, { 0x9c, 0xb2, 0x91, 0x06, 0x9c, 0x15, 0x11, 0x48 } } }, + /* 007 */ { "W10C\000Windows10C\000", 25, 6, PWINGUID, { 0x58e97c99, 0xf377, 0x4ef1, { 0x81, 0xd5, 0x4a, 0xd5, 0x52, 0x2b, 0x5f, 0xd8, } }, { 0xe1c51358, 0xfe3e, 0x4203, { 0xa4, 0xa2, 0x3b, 0x6b, 0x20, 0xc9, 0x73, 0x4e } } }, + /* 008 */ { "2008" "\0" "2008A\000", 5, 4, PWINGUID, { 0xddfa9f7c, 0xf09e, 0x40b9, { 0x8c, 0x1a, 0xbe, 0x87, 0x7a, 0x9a, 0x7f, 0x4b, } }, { 0x33e156e4, 0xb76f, 0x4a52, { 0x9f, 0x91, 0xf6, 0x41, 0xdd, 0x95, 0xac, 0x48 } } }, + /* 009 */ { "2008B\000", 5, 4, PWINGUID, { 0xc1af4d90, 0xd1bc, 0x44ca, { 0x85, 0xd4, 0x00, 0x3b, 0xa3, 0x3d, 0xb3, 0xb9, } }, { 0x8fe53387, 0x3087, 0x4447, { 0x89, 0x85, 0xf7, 0x51, 0x32, 0x21, 0x5a, 0xc9 } } }, + /* 010 */ { "2008C\000", 5, 4, PWINGUID, { 0x68b6e220, 0xcf09, 0x466b, { 0x92, 0xd3, 0x45, 0xcd, 0x96, 0x4b, 0x95, 0x09, } }, { 0x8a21fdf3, 0xcbc5, 0x44eb, { 0x83, 0xf3, 0xfe, 0x28, 0x4e, 0x66, 0x80, 0xa7 } } }, + /* 011 */ { "2008R2" "\0" "2008R2A\000", 5, 4, PWINGUID, { 0xa78b8bd9, 0x8017, 0x4df5, { 0xb8, 0x6a, 0x09, 0xf7, 0x56, 0xaf, 0xfa, 0x7c, } }, { 0x0fc6ccaf, 0xff0e, 0x4fae, { 0x9d, 0x08, 0x43, 0x70, 0x78, 0x5b, 0xf7, 0xed } } }, + /* 012 */ { "2008R2B\000", 5, 4, PWINGUID, { 0x620e2b3d, 0x09e7, 0x42fd, { 0x80, 0x2a, 0x17, 0xa1, 0x36, 0x52, 0xfe, 0x7a, } }, { 0xca87f5b6, 0xcd46, 0x40c0, { 0xb0, 0x6d, 0x8e, 0xcd, 0x57, 0xa4, 0x37, 0x3f } } }, + /* 013 */ { "2008R2C\000", 5, 4, PWINGUID, { 0x7482e61b, 0xc589, 0x4b7f, { 0x8e, 0xcc, 0x46, 0xd4, 0x55, 0xac, 0x3b, 0x87, } }, { 0xb2ca2689, 0xa9a8, 0x42d7, { 0x93, 0x8d, 0xcf, 0x8e, 0x9f, 0x20, 0x19, 0x58 } } }, + /* 014 */ { "2012\000", 5, 5, PWINGUID, { 0xf0f5ec41, 0x0d55, 0x4732, { 0xaf, 0x02, 0x44, 0x0a, 0x44, 0xa3, 0xcf, 0x0f, } }, { 0x8665cb71, 0x468c, 0x4aa3, { 0xa3, 0x37, 0xcb, 0x9b, 0xc9, 0xd5, 0xea, 0xac } } }, + /* 015 */ { "2012R2\000" "12R2\000", 5, 6, PWINGUID, { 0x00091344, 0x1ea4, 0x4f37, { 0xb7, 0x89, 0x01, 0x75, 0x0b, 0xa6, 0x98, 0x8c, } }, { 0x8456EFD3, 0x0C04, 0x4089, { 0x87, 0x40, 0x5b, 0x72, 0x38, 0x53, 0x5a, 0x65 } } }, + /* 016 */ { "Office2010\000O14\000", 5, 4, POFFICE2010GUID, { 0x6f327760, 0x8c5c, 0x417c, { 0x9b, 0x61, 0x83, 0x6a, 0x98, 0x28, 0x7e, 0x0c, } }, { 0xe85af946, 0x2e25, 0x47b7, { 0x83, 0xe1, 0xbe, 0xbc, 0xeb, 0xea, 0xc6, 0x11 } } }, + /* 017 */ { "Office2013\000O15\000", 5, 6, POFFICE2013GUID, { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } }, { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } }, + /* 018 */ { "Office2013V5\000", 5, 5, POFFICE2013GUID, { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } }, { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } }, + /* 019 */ { "Office2016\000" "O16\000", 5, 6, POFFICE2013GUID, { 0xd450596f, 0x894d, 0x49e0, { 0x96, 0x6a, 0xfd, 0x39, 0xed, 0x4c, 0x4c, 0x64, } }, { 0x85b5f61b, 0x320b, 0x4be3, { 0x81, 0x4a, 0xb7, 0x6b, 0x2b, 0xfa, 0xfc, 0x82 } } }, + /* 020 */ { NULL, 0, 0, NULL, { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } }, { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } } } +}; + + +typedef struct +{ + const char* first[16]; + const char* second[16]; + const char* tld[22]; +} DnsNames; + + +// Some names for the DNS name random generator +static DnsNames ClientDnsNames = +{ + { "www", "ftp", "kms", "hack-me", "smtp", "ns1", "mx1", "ns1", "pop3", "imap", "mail", "dns", "headquarter", "we-love", "_vlmcs._tcp", "ceo-laptop" }, + { ".microsoft", ".apple", ".amazon", ".samsung", ".adobe", ".google", ".yahoo", ".facebook", ".ubuntu", ".oracle", ".borland", ".htc", ".acer", ".windows", ".linux", ".sony" }, + { ".com", ".net", ".org", ".cn", ".co.uk", ".de", ".com.tw", ".us", ".fr", ".it", ".me", ".info", ".biz", ".co.jp", ".ua", ".at", ".es", ".pro", ".by", ".ru", ".pl", ".kr" } +}; + + +// This is the one, we are actually using. We use Vista, if user selects nothing +LicensePack ActiveLicensePack; + + +// Request Count Control Variables +static int RequestsToGo = 1; +static BOOL firstRequestSent = FALSE; + + +static void string2UuidOrExit(const char *const restrict input, GUID *const restrict guid) +{ + if (strlen(input) != GUID_STRING_LENGTH || !string2Uuid(input, guid)) + { + errorout("Fatal: Command line contains an invalid GUID.\n"); + exit(!0); + } +} + + +#ifndef NO_HELP + +__noreturn static void clientUsage(const char* const programName) +{ + errorout( + "vlmcs %s \n\n" +# ifndef NO_DNS + "Usage: %s [options] [ [:] | . | - ] [options]\n\n" +# else // DNS + "Usage: %s [options] [[:]] [options]\n\n" +# endif // DNS + + "Options:\n\n" + + " -v Be verbose\n" + " -l \n" + " -4 Force V4 protocol\n" + " -5 Force V5 protocol\n" + " -6 Force V6 protocol\n" +# ifndef USE_MSRPC + " -i Use IP protocol (4 or 6)\n" +# endif // USE_MSRPC + " -e Show some valid examples\n" + " -x Show valid Apps\n" + " -d no DNS names, use Netbios names (no effect if -w is used)\n\n" + + "Advanced options:\n\n" + + " -a Use custom Application GUID\n" + " -s Use custom Activation Configuration GUID\n" + " -k Use custom KMS GUID\n" + " -c Use custom Client GUID. Default: Use random\n" + " -o Use custom Prevoius Client GUID. Default: ZeroGUID\n" + " -w Use custom workstation name. Default: Use random\n" + " -r Fake required clients\n" + " -n Fixed # of requests (Default: Enough to charge)\n" + " -m Pretend to be a virtual machine\n" + " -G Get ePID/HwId data and write to . Can't be used with -l, -4, -5, -6, -a, -s, -k, -r and -n\n" +# ifndef USE_MSRPC + " -T Use a new TCP connection for each request.\n" + " -N <0|1> disable or enable NDR64. Default: 1\n" + " -B <0|1> disable or enable RPC bind time feature negotiation. Default: 1\n" +# endif // USE_MSRPC + " -t Use specfic license status (0 <= T <= 6)\n" + " -g Use a specfic binding expiration time in minutes. Default 43200\n" +# ifndef NO_DNS + " -P Ignore priority and weight in DNS SRV records\n" +# endif // NO_DNS +# ifndef USE_MSRPC + " -p Don't use multiplexed RPC bind\n" +# endif // USE_MSRPC + "\n" + + ":\t\tTCP port name of the KMS to use. Default 1688.\n" + ":\t\thost name of the KMS to use. Default 127.0.0.1\n" +# ifndef NO_DNS + ".:\tfind KMS server in via DNS\n" +# endif // NO_DNS + ":\t\t(Type %s -x to see a list of valid apps)\n\n", + Version, programName, programName + ); + + exit(!0); +} + +__pure static int getLineWidth(void) +{ + #ifdef TERMINAL_FIXED_WIDTH // For Toolchains that to not have winsize + return TERMINAL_FIXED_WIDTH; + #else // Can determine width of terminal + #ifndef _WIN32 + + struct winsize w; + + if(ioctl(STDOUT_FILENO, TIOCGWINSZ, &w)) + { + return 80; // Return this if stdout is not a tty + } + + return w.ws_col; + + #else // _WIN32 + + CONSOLE_SCREEN_BUFFER_INFO csbiInfo; + HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); + + if (!GetConsoleScreenBufferInfo(hStdout, &csbiInfo)) + { + return 80; // Return this if stdout is not a Console + } + + return csbiInfo.srWindow.Right - csbiInfo.srWindow.Left; + + #endif // WIN32 + + #endif // Can determine width of terminal + +} + +__noreturn static void showProducts(PRINTFUNC p) +{ + int cols = getLineWidth(); + int itemsPerLine; + uint8_t i; + + p( + "The following " + #if !defined(NO_EXTENDED_PRODUCT_LIST) && !defined(NO_BASIC_PRODUCT_LIST) + "aliases " + #else + "names " + #endif + "can be used with -l:\n\n" + ); + + const LicensePack* lp; + + itemsPerLine = cols / 20; + if (!itemsPerLine) itemsPerLine = 1; + + for (i = 1, lp = LicensePackList; lp->names; lp++) + { + const char* name; + + for (name = lp->names; *name; name += strlen(name) + 1, i++) + { + p("%-20s", name); + + if (!(i % itemsPerLine)) p("\n"); + } + } + + p("\n\n"); + + #if !defined(NO_EXTENDED_PRODUCT_LIST) && !defined(NO_BASIC_PRODUCT_LIST) + + const KmsIdList* currentProduct; + uint_fast8_t longestString = 0; + uint8_t k, items = getExtendedProductListSize(); + + p("You may also use these product names or numbers:\n\n"); + + for (currentProduct = ExtendedProductList; currentProduct->name; currentProduct++) + { + uint_fast8_t len = strlen(currentProduct->name); + + if (len > longestString) + longestString = len; + } + + itemsPerLine = cols / (longestString + 10); + if (!itemsPerLine) itemsPerLine = 1; + uint8_t lines = items / itemsPerLine; + if (items % itemsPerLine) lines++; + + for (i = 0; i < lines; i++) + { + for (k = 0; k < itemsPerLine; k++) + { + uint8_t j; + uint8_t index = k * lines + i; + + if (index >= items) break; + + p("%3u = %s", index + 1, ExtendedProductList[index].name); + + for (j = 0; j < longestString + 4 - strlen(ExtendedProductList[index].name); j++) + { + p(" "); + } + } + + p("\n"); + } + + p("\n"); + + #endif // !defined(NO_EXTENDED_PRODUCT_LIST) && !defined(NO_BASIC_PRODUCT_LIST) + + exit(0); +} + +__noreturn static void examples(const char* const programName) +{ + printf( + "\nRequest activation for Office2013 using V4 protocol from 192.168.1.5:1688\n" + "\t%s -l O15 -4 192.168.1.5\n" + "\t%s -l O15 -4 192.168.1.5:1688\n\n" + + "Request activation for Windows Server 2012 using V4 protocol from localhost:1688\n" + "\t%s -4 -l Windows -k 8665cb71-468c-4aa3-a337-cb9bc9d5eaac\n" + "\t%s -4 -l 2012\n" + "\t%s -4 -l 2012 [::1]:1688\n" + "\t%s -4 -l 12 127.0.0.2:1688\n\n" + + "Send 100,000 requests to localhost:1688\n" + "\t%s -n 100000 -l Office2010\n\n" + + "Request Activation for Windows 8 from 10.0.0.1:4711 and pretend to be Steve Ballmer\n" + "\t%s -l Windows8 -w steveb1.redmond.microsoft.com 10.0.0.1:4711\n\n", + programName, programName, programName, programName, programName, programName, programName, programName + ); + + exit(0); +} + + +#else // NO_HELP + + +__noreturn static void clientUsage(const char* const programName) +{ + errorout("Incorrect parameter specified.\n"); + exit(!0); +} + + +#endif // NO_HELP + + +static BOOL findLicensePackByName(const char* const name, LicensePack* const lp) +{ + // Try to find a package in the short list first + + LicensePack *licensePack; + for (licensePack = (LicensePack*)&LicensePackList; licensePack->names; licensePack ++) + { + const char *currentName; + for (currentName = licensePack->names; *currentName; currentName += strlen(currentName) + 1) + { + if (!strcasecmp(name, currentName)) + { + *lp = *licensePack; + return TRUE; + } + } + } + + #if defined(NO_BASIC_PRODUCT_LIST) || defined(NO_EXTENDED_PRODUCT_LIST) + + return FALSE; + + #else // Both Lists are available + + // search extended product list + + uint8_t items = getExtendedProductListSize(); + unsigned int index; + + if (stringToInt(name, 1, items, &index)) + { + index--; + } + else + { + for (index = 0; index < items; index++) + { + if (!strcasecmp(ExtendedProductList[index].name, name)) break; + } + + if (index >= items) return FALSE; + } + + lp->AppID = &AppList[ExtendedProductList[index].AppIndex].guid; + lp->KMSID = ProductList[ExtendedProductList[index].KmsIndex].guid; + lp->ActID = ExtendedProductList[index].guid; + lp->N_Policy = ProductList[ExtendedProductList[index].KmsIndex].KMS_PARAM_REQUIREDCOUNT; + lp->kmsVersionMajor = ProductList[ExtendedProductList[index].KmsIndex].KMS_PARAM_MAJOR; + + return TRUE; + + #endif // Both Lists are available +} + +static const char* const client_optstring = "+N:B:i:l:a:s:k:c:w:r:n:t:g:G:o:pPTv456mexd"; + + +//First pass. We handle only "-l". Since -a -k -s -4 -5 and -6 are exceptions to -l, we process -l first +static void parseCommandLinePass1(const int argc, CARGV argv) +{ + int o; + optReset(); + + for (opterr = 0; ( o = getopt(argc, (char* const*)argv, client_optstring) ) > 0; ) switch (o) + { + case 'l': // Set "License Pack" and protocol version (e.g. Windows8, Office2013v5, ...) + + if (!findLicensePackByName(optarg, &ActiveLicensePack)) + { + errorout("Invalid client application. \"%s\" is not valid for -l.\n\n", optarg); + #ifndef NO_HELP + showProducts(&errorout); + #endif // !NO_HELP + } + + break; + + default: + break; + } +} + + +// Second Pass. Handle all options except "-l" +static void parseCommandLinePass2(const char *const programName, const int argc, CARGV argv) +{ + int o; + optReset(); + + for (opterr = 0; ( o = getopt(argc, (char* const*)argv, client_optstring) ) > 0; ) switch (o) + { + #ifndef NO_HELP + + case 'e': // Show examples + + examples(programName); + break; + + case 'x': // Show Apps + + showProducts(&printf); + break; + + #endif // NO_HELP + +# ifndef NO_DNS + + case 'P': + + NoSrvRecordPriority = TRUE; + break; + +# endif // NO_DNS + + case 'G': + + incompatibleOptions |= VLMCS_OPTION_GRAB_INI; + fn_ini_client = optarg; + break; + +# ifndef USE_MSRPC + + case 'N': + if (!getArgumentBool(&UseRpcNDR64, optarg)) clientUsage(programName); + break; + + case 'B': + if (!getArgumentBool(&UseRpcBTFN, optarg)) clientUsage(programName); + break; + + case 'i': + + switch(getOptionArgumentInt(o, 4, 6)) + { + case 4: + AddressFamily = AF_INET; + break; + case 6: + AddressFamily = AF_INET6; + break; + default: + errorout("IPv5 does not exist.\n"); + exit(!0); + break; + } + + break; + + case 'p': // Multiplexed RPC + + UseMultiplexedRpc = FALSE; + break; + +# endif // USE_MSRPC + + case 'n': // Fixed number of Requests (regardless, whether they are required) + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + FixedRequests = getOptionArgumentInt(o, 1, INT_MAX); + break; + + case 'r': // Fake minimum required client count + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + ActiveLicensePack.N_Policy = getOptionArgumentInt(o, 1, INT_MAX); + break; + + case 'c': // use a specific client GUID + + // If using a constant Client ID, send only one request unless /N= explicitly specified + if (!FixedRequests) FixedRequests = 1; + + CMID = optarg; + break; + + case 'o': // use a specific previous client GUID + + CMID_prev = optarg; + break; + + case 'a': // Set specific App Id + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + ActiveLicensePack.AppID = (GUID*)vlmcsd_malloc(sizeof(GUID)); + + string2UuidOrExit(optarg, (GUID*)ActiveLicensePack.AppID); + break; + + case 'g': // Set custom "grace" time in minutes (default 30 days) + + BindingExpiration = getOptionArgumentInt(o, 0, INT_MAX); + break; + + case 's': // Set specfic SKU ID + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + string2UuidOrExit(optarg, &ActiveLicensePack.ActID); + break; + + case 'k': // Set specific KMS ID + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + string2UuidOrExit(optarg, &ActiveLicensePack.KMSID); + break; + + case '4': // Force V4 protocol + case '5': // Force V5 protocol + case '6': // Force V5 protocol + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + ActiveLicensePack.kmsVersionMajor = o - 0x30; + break; + + case 'd': // Don't use DNS names + + dnsnames = FALSE; + break; + + case 'v': // Be verbose + + verbose = TRUE; + break; + + case 'm': // Pretend to be a virtual machine + + VMInfo = TRUE; + break; + + case 'w': // WorkstationName (max. 63 chars) + + WorkstationName = optarg; + + if (strlen(WorkstationName) > 63) + { + errorout("\007WARNING! Truncating Workstation name to 63 characters (%s).\n", WorkstationName); + } + + break; + + case 't': + + LicenseStatus = getOptionArgumentInt(o, 0, 6) & 0xff; + break; + +# ifndef USE_MSRPC + + case 'T': + + ReconnectForEachRequest = TRUE; + break; + +# endif // USE_MSRPC + + case 'l': + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + break; + + default: + clientUsage(programName); + } + if ((incompatibleOptions & (VLMCS_OPTION_NO_GRAB_INI | VLMCS_OPTION_GRAB_INI)) == (VLMCS_OPTION_NO_GRAB_INI | VLMCS_OPTION_GRAB_INI)) + clientUsage(programName); +} + + +/* + * Compares 2 GUIDs where one is host-endian and the other is little-endian (network byte order) + */ +int_fast8_t IsEqualGuidLEHE(const GUID* const guid1, const GUID* const guid2) +{ + GUID tempGuid; + LEGUID(&tempGuid, guid2); + return IsEqualGUID(guid1, &tempGuid); +} + + +#ifndef USE_MSRPC +static void checkRpcLevel(const REQUEST* request, RESPONSE* response) +{ + if (!RpcFlags.HasNDR32) + errorout("\nWARNING: Server's RPC protocol does not support NDR32.\n"); + + if (UseRpcBTFN && UseRpcNDR64 && RpcFlags.HasNDR64 && !RpcFlags.HasBTFN) + errorout("\nWARNING: Server's RPC protocol has NDR64 but no BTFN.\n"); + + if (!IsEqualGuidLEHE(&request->KMSID, &ProductList[15].guid) && UseRpcBTFN && !RpcFlags.HasBTFN) + errorout("\nWARNING: A server with pre-Vista RPC activated a product other than Office 2010.\n"); +} +#endif // USE_MSRPC + + +static void displayResponse(const RESPONSE_RESULT result, const REQUEST* request, RESPONSE* response, BYTE *hwid) +{ + fflush(stdout); + + if (!result.RpcOK) errorout("\n\007ERROR: Non-Zero RPC result code.\n"); + if (!result.DecryptSuccess) errorout("\n\007ERROR: Decryption of V5/V6 response failed.\n"); + if (!result.IVsOK) errorout("\n\007ERROR: AES CBC initialization vectors (IVs) of request and response do not match.\n"); + if (!result.PidLengthOK) errorout("\n\007ERROR: The length of the PID is not valid.\n"); + if (!result.HashOK) errorout("\n\007ERROR: Computed hash does not match hash in response.\n"); + if (!result.ClientMachineIDOK) errorout("\n\007ERROR: Client machine GUIDs of request and response do not match.\n"); + if (!result.TimeStampOK) errorout("\n\007ERROR: Time stamps of request and response do not match.\n"); + if (!result.VersionOK) errorout("\n\007ERROR: Protocol versions of request and response do not match.\n"); + if (!result.HmacSha256OK) errorout("\n\007ERROR: Keyed-Hash Message Authentication Code (HMAC) is incorrect.\n"); + if (!result.IVnotSuspicious) errorout("\nWARNING: Response uses an IV following KMSv5 rules in KMSv6 protocol.\n"); + + if (result.effectiveResponseSize != result.correctResponseSize) + { + errorout("\n\007WARNING: Size of RPC payload (KMS Message) should be %u but is %u.", result.correctResponseSize, result.effectiveResponseSize); + } + +# ifndef USE_MSRPC + checkRpcLevel(request, response); +# endif // USE_MSRPC + + if (!result.DecryptSuccess) return; // Makes no sense to display anything + + char ePID[3 * PID_BUFFER_SIZE]; + if (!ucs2_to_utf8(response->KmsPID, ePID, PID_BUFFER_SIZE, 3 * PID_BUFFER_SIZE)) + { + memset(ePID + 3 * PID_BUFFER_SIZE - 3, 0, 3); + } + + // Read KMSPID from Response + if (!verbose) + { + printf(" -> %s", ePID); + + if (LE16(response->MajorVer) > 5) + { +# ifndef _WIN32 + printf(" (%016llX)", (unsigned long long)BE64(*(uint64_t*)hwid)); +# else // _WIN32 + printf(" (%016I64X)", (unsigned long long)BE64(*(uint64_t*)hwid)); +# endif // _WIN32 + } + + printf("\n"); + } + else + { + printf( + "\n\nResponse from KMS server\n========================\n\n" + "Size of KMS Response : %u (0x%x)\n", result.effectiveResponseSize, result.effectiveResponseSize + ); + + logResponseVerbose(ePID, hwid, response, &printf); + printf("\n"); + } +} + + +static void connectRpc(RpcCtx *s) +{ +# ifdef NO_DNS + + *s = connectToAddress(RemoteAddr, AddressFamily, FALSE); + if (*s == INVALID_RPCCTX) + { + errorout("Fatal: Could not connect to %s\n", RemoteAddr); + exit(!0); + } + + if (verbose) + printf("\nPerforming RPC bind ...\n"); + + if (rpcBindClient(*s, verbose)) + { + errorout("Fatal: Could not bind RPC\n"); + exit(!0); + } + + if (verbose) printf("... successful\n"); + +# else // DNS + + static kms_server_dns_ptr* serverlist = NULL; + static int numServers = 0; + //static int_fast8_t ServerListAlreadyPrinted = FALSE; + int i; + + if (!strcmp(RemoteAddr, "-") || *RemoteAddr == '.') // Get KMS server via DNS SRV record + { + if (!serverlist) + numServers = getKmsServerList(&serverlist, RemoteAddr); + + if (numServers < 1) + { + errorout("Fatal: No KMS servers found\n"); + exit(!0); + } + + if (!NoSrvRecordPriority) sortSrvRecords(serverlist, numServers); + + if (verbose /*&& !ServerListAlreadyPrinted*/) + { + for (i = 0; i < numServers; i++) + { + printf( + "Found %-40s (priority: %hu, weight: %hu, randomized weight: %i)\n", + serverlist[i]->serverName, + serverlist[i]->priority, serverlist[i]->weight, + NoSrvRecordPriority ? 0 : serverlist[i]->random_weight + ); + } + + printf("\n"); + //ServerListAlreadyPrinted = TRUE; + } + } + else // Just use the server supplied on the command line + { + if (!serverlist) + { + serverlist = (kms_server_dns_ptr*)vlmcsd_malloc(sizeof(kms_server_dns_ptr)); + *serverlist = (kms_server_dns_ptr)vlmcsd_malloc(sizeof(kms_server_dns_t)); + + numServers = 1; + strncpy((*serverlist)->serverName, RemoteAddr, sizeof((*serverlist)->serverName)); + } + } + + for (i = 0; i < numServers; i++) + { + *s = connectToAddress(serverlist[i]->serverName, AddressFamily, (*RemoteAddr == '.' || *RemoteAddr == '-')); + + if (*s == INVALID_RPCCTX) continue; + + if (verbose) + printf("\nPerforming RPC bind ...\n"); + + if (rpcBindClient(*s, verbose)) + { + errorout("Warning: Could not bind RPC\n"); + continue; + } + + if (verbose) printf("... successful\n"); + + return; + } + + errorout("Fatal: Could not connect to any KMS server\n"); + exit(!0); + +# endif // DNS +} + + +static int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQUEST *baseRequest, RESPONSE_RESULT *result, BYTE *const hwid) +{ + size_t requestSize, responseSize; + BYTE *request, *response; + int status; + + result->mask = 0; + + if (LE16(baseRequest->MajorVer) == 4) + request = CreateRequestV4(&requestSize, baseRequest); + else + request = CreateRequestV6(&requestSize, baseRequest); + + if (!(status = rpcSendRequest(sock, request, requestSize, &response, &responseSize))) + { + if (LE16(((RESPONSE*)(response))->MajorVer) == 4) + { + RESPONSE_V4 response_v4; + *result = DecryptResponseV4(&response_v4, responseSize, response, request); + memcpy(baseResponse, &response_v4.ResponseBase, sizeof(RESPONSE)); + } + else + { + RESPONSE_V6 response_v6; + *result = DecryptResponseV6(&response_v6, responseSize, response, request, hwid); + memcpy(baseResponse, &response_v6.ResponseBase, sizeof(RESPONSE)); + } + + result->RpcOK = TRUE; + } + + if (response) free(response); + free(request); + return status; +} + + +static int sendRequest(RpcCtx *const s, REQUEST *const request, RESPONSE *const response, hwid_t hwid, RESPONSE_RESULT *const result) +{ + CreateRequestBase(request); + + if (*s == INVALID_RPCCTX ) + connectRpc(s); + else + { + // Check for lame KMS emulators that close the socket after each request + int_fast8_t disconnected = isDisconnected(*s); + + if (disconnected) + errorout("\nWarning: Server closed RPC connection (probably non-multitasked KMS emulator)\n"); + + if (ReconnectForEachRequest || disconnected) + { + closeRpc(*s); + connectRpc(s); + } + } + + printf("Sending activation request (KMS V%u) ", ActiveLicensePack.kmsVersionMajor); + fflush(stdout); + + return SendActivationRequest(*s, response, request, result, hwid); +} + + +static void displayRequestError(RpcCtx *const s, const int status, const int currentRequest, const int totalRequests) +{ + errorout("\nError 0x%08X while sending request %u of %u\n", status, currentRequest, RequestsToGo + totalRequests); + + switch(status) + { + case 0xC004F042: // not licensed + errorout("The server refused to activate the requested product\n"); + break; + + case 0x8007000D: // e.g. v6 protocol on a v5 server + errorout("The server didn't understand the request\n"); + break; + + case 1: + errorout("An RPC protocol error has occured\n"); + closeRpc(*s); + connectRpc(s); + break; + + default: + break; + } +} + + +static void newIniBackupFile(const char* const restrict fname) +{ + FILE *restrict f = fopen(fname, "wb"); + + if (!f) + { + errorout("Fatal: Cannot create %s: %s\n", fname, strerror(errno)); + exit(!0); + } + + if (fclose(f)) + { + errorout("Fatal: Cannot write to %s: %s\n", fname, strerror(errno)); + unlink(fname); + exit(!0); + } +} + + +static void updateIniFile(iniFileEpidLines* const restrict lines) +{ + int_fast8_t lineWritten[_countof(*lines)]; + struct stat statbuf; + uint_fast8_t i; + int_fast8_t iniFileExistedBefore = TRUE; + unsigned int lineNumber; + + memset(lineWritten, FALSE, sizeof(lineWritten)); + + char* restrict fn_bak = (char*)vlmcsd_malloc(strlen(fn_ini_client) + 2); + + strcpy(fn_bak, fn_ini_client); + strcat(fn_bak, "~"); + + if (stat(fn_ini_client, &statbuf)) + { + if (errno != ENOENT) + { + errorout("Fatal: %s: %s\n", fn_ini_client, strerror(errno)); + exit(!0); + } + else + { + iniFileExistedBefore = FALSE; + newIniBackupFile(fn_bak); + } + } + else + { + unlink(fn_bak); // Required for Windows. Most Unix systems don't need it. + if (rename(fn_ini_client, fn_bak)) + { + errorout("Fatal: Cannot create %s: %s\n", fn_bak, strerror(errno)); + exit(!0); + } + } + + printf("\n%s file %s\n", iniFileExistedBefore ? "Updating" : "Creating", fn_ini_client); + + FILE *restrict in, *restrict out; + + in = fopen(fn_bak, "rb"); + + if (!in) + { + errorout("Fatal: Cannot open %s: %s\n", fn_bak, strerror(errno)); + exit(!0); + } + + out = fopen(fn_ini_client, "wb"); + + if (!out) + { + errorout("Fatal: Cannot create %s: %s\n", fn_ini_client, strerror(errno)); + exit(!0); + } + + char sourceLine[256]; + + for (lineNumber = 1; fgets(sourceLine, sizeof(sourceLine), in); lineNumber++) + { + for (i = 0; i < _countof(*lines); i++) + { + if (*(*lines)[i] && !strncasecmp(sourceLine, (*lines)[i], GUID_STRING_LENGTH)) + { + if (lineWritten[i]) break; + + fprintf(out, "%s", (*lines)[i]); + printf("line %2i: %s", lineNumber, (*lines)[i]); + lineWritten[i] = TRUE; + break; + } + } + + if (i >= _countof(*lines)) + { + fprintf(out, "%s", sourceLine); + } + } + + if (ferror(in)) + { + errorout("Fatal: Cannot read from %s: %s\n", fn_bak, strerror(errno)); + exit(!0); + } + + fclose(in); + + for (i = 0; i < _countof(*lines); i++) + { + if (!lineWritten[i] && *(*lines)[i]) + { + fprintf(out, "%s", (*lines)[i]); + printf("line %2i: %s", lineNumber + i, (*lines)[i]); + } + } + + if (fclose(out)) + { + errorout("Fatal: Cannot write to %s: %s\n", fn_ini_client, strerror(errno)); + exit(!0); + } + + if (!iniFileExistedBefore) unlink(fn_bak); + + free(fn_bak); +} + +static void grabServerData() +{ + RpcCtx s = INVALID_RPCCTX; + WORD MajorVer = 6; + iniFileEpidLines lines; + int_fast8_t Licenses[_countof(lines)] = { 0, 15, 14 }; + uint_fast8_t i; + RESPONSE response; + RESPONSE_RESULT result; + REQUEST request; + hwid_t hwid; + int status; + size_t len; + + for (i = 0; i < _countof(lines); i++) *lines[i] = 0; + + for (i = 0; i < _countof(Licenses) && MajorVer > 3; i++) + { + ActiveLicensePack = LicensePackList[Licenses[i]]; + ActiveLicensePack.kmsVersionMajor = MajorVer; + status = sendRequest(&s, &request, &response, hwid, &result); + printf("%-11s", ActiveLicensePack.names); + + if (status) + { + displayRequestError(&s, status, i + 7 - MajorVer, 9 - MajorVer); + + if (status == 1) break; + + if ((status & 0xF0000000) == 0x80000000) + { + MajorVer--; + i--; + } + + continue; + } + + printf("%i of %i", (int)(i + 7 - MajorVer), (int)(9 - MajorVer)); + displayResponse(result, &request, &response, hwid); + + char guidBuffer[GUID_STRING_LENGTH + 1]; + char ePID[3 * PID_BUFFER_SIZE]; + + uuid2StringLE(&request.AppID, guidBuffer); + + if (!ucs2_to_utf8(response.KmsPID, ePID, PID_BUFFER_SIZE, 3 * PID_BUFFER_SIZE)) + { + memset(ePID + 3 * PID_BUFFER_SIZE - 3, 0, 3); + } + + snprintf(lines[i], sizeof(lines[0]), "%s = %s", guidBuffer, ePID); + + if (response.MajorVer > 5) + { + len = strlen(lines[i]); + snprintf (lines[i] + len, sizeof(lines[0]) - len, "/ %02X %02X %02X %02X %02X %02X %02X %02X", hwid[0], hwid[1], hwid[2], hwid[3], hwid[4], hwid[5], hwid[6], hwid[7]); + } + + len = strlen(lines[i]); + snprintf(lines[i] + len, sizeof(lines[0]) - len, "\n"); + + } + + if (strcmp(fn_ini_client, "-")) + { + updateIniFile(&lines); + } + else + { + printf("\n"); + for (i = 0; i < _countof(lines); i++) printf("%s", lines[i]); + } +} + + +int client_main(const int argc, CARGV argv) +{ + #if defined(_WIN32) && !defined(USE_MSRPC) + + // Windows Sockets must be initialized + + WSADATA wsadata; + int error; + + if ((error = WSAStartup(0x0202, &wsadata))) + { + printerrorf("Fatal: Could not initialize Windows sockets (Error: %d).\n", error); + return error; + } + + #endif // _WIN32 + + #ifdef _NTSERVICE + + // We are not a service + IsNTService = FALSE; + + // Set console output page to UTF-8 + // SetConsoleOutputCP(65001); + + #endif // _NTSERVICE + + randomNumberInit(); + ActiveLicensePack = *LicensePackList; //first license is Windows Vista + + parseCommandLinePass1(argc, argv); + + int_fast8_t useDefaultHost = FALSE; + + if (optind < argc) + RemoteAddr = argv[optind]; + else + useDefaultHost = TRUE; + + int hostportarg = optind; + + if (optind < argc - 1) + { + parseCommandLinePass1(argc - hostportarg, argv + hostportarg); + + if (optind < argc - hostportarg) + clientUsage(argv[0]); + } + + parseCommandLinePass2(argv[0], argc, argv); + + if (optind < argc - 1) + parseCommandLinePass2(argv[0], argc - hostportarg, argv + hostportarg); + + if (useDefaultHost) + RemoteAddr = AddressFamily == AF_INET6 ? "::1" : "127.0.0.1"; + + if (fn_ini_client != NULL) + grabServerData(); + else + { + int requests; + RpcCtx s = INVALID_RPCCTX; + + for (requests = 0, RequestsToGo = ActiveLicensePack.N_Policy - 1; RequestsToGo; requests++) + { + RESPONSE response; + REQUEST request; + RESPONSE_RESULT result; + hwid_t hwid; + + int status = sendRequest(&s, &request, &response, hwid, &result); + + if (FixedRequests) RequestsToGo = FixedRequests - requests - 1; + + if (status) + { + displayRequestError(&s, status, requests + 1, RequestsToGo + requests + 1); + if (!FixedRequests) RequestsToGo = 0; + } + else + { + if (!FixedRequests) + { + if (firstRequestSent && ActiveLicensePack.N_Policy - (int)response.Count >= RequestsToGo) + { + errorout("\nThe KMS server does not increment it's active clients. Aborting...\n"); + RequestsToGo = 0; + } + else + { + RequestsToGo = ActiveLicensePack.N_Policy - response.Count; + if (RequestsToGo < 0) RequestsToGo = 0; + } + } + + fflush(stderr); + printf("%i of %i ", requests + 1, RequestsToGo + requests + 1); + displayResponse(result, &request, &response, hwid); + firstRequestSent = TRUE; + } + } + } + + return 0; +} + + +// Create Base KMS Client Request +static void CreateRequestBase(REQUEST *Request) +{ + + Request->MinorVer = LE16((WORD)kmsVersionMinor); + Request->MajorVer = LE16((WORD)ActiveLicensePack.kmsVersionMajor); + Request->VMInfo = LE32(VMInfo); + Request->LicenseStatus = LE32(LicenseStatus); + Request->BindingExpiration = LE32(BindingExpiration); + LEGUID(&Request->AppID, ActiveLicensePack.AppID); + LEGUID(&Request->ActID, &ActiveLicensePack.ActID); + LEGUID(&Request->KMSID, &ActiveLicensePack.KMSID); + + getUnixTimeAsFileTime(&Request->ClientTime); + Request->N_Policy = LE32(ActiveLicensePack.N_Policy); + + { + GUID tempGUID; + + if (CMID) + { + string2UuidOrExit(CMID, &tempGUID); + LEGUID(&Request->CMID, &tempGUID); + } + else + { + get16RandomBytes(&Request->CMID); + + // Set reserved UUID bits + Request->CMID.Data4[0] &= 0x3F; + Request->CMID.Data4[0] |= 0x80; + + // Set UUID type 4 (random UUID) + Request->CMID.Data3 &= LE16(0xfff); + Request->CMID.Data3 |= LE16(0x4000); + } + + if (CMID_prev) + { + string2UuidOrExit(CMID_prev, &tempGUID); + LEGUID(&Request->CMID_prev, &tempGUID); + } + else + { + memset(&Request->CMID_prev, 0, sizeof(Request->CMID_prev)); + } + } + + static const char alphanum[] = "0123456789" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" /*"abcdefghijklmnopqrstuvwxyz" */; + + if (WorkstationName) + { + utf8_to_ucs2(Request->WorkstationName, WorkstationName, WORKSTATION_NAME_BUFFER, WORKSTATION_NAME_BUFFER * 3); + } + else if (dnsnames) + { + int len, len2; + unsigned int index = rand() % _countof(ClientDnsNames.first); + len = utf8_to_ucs2(Request->WorkstationName, ClientDnsNames.first[index], WORKSTATION_NAME_BUFFER, WORKSTATION_NAME_BUFFER * 3); + + index = rand() % _countof(ClientDnsNames.second); + len2 = utf8_to_ucs2(Request->WorkstationName + len, ClientDnsNames.second[index], WORKSTATION_NAME_BUFFER, WORKSTATION_NAME_BUFFER * 3); + + index = rand() % _countof(ClientDnsNames.tld); + utf8_to_ucs2(Request->WorkstationName + len + len2, ClientDnsNames.tld[index], WORKSTATION_NAME_BUFFER, WORKSTATION_NAME_BUFFER * 3); + } + else + { + unsigned int size = (rand() % 14) + 1; + const unsigned char *dummy; + unsigned int i; + + for (i = 0; i < size; i++) + { + Request->WorkstationName[i] = utf8_to_ucs2_char((unsigned char*)alphanum + (rand() % (sizeof(alphanum) - 1)), &dummy); + } + + Request->WorkstationName[size] = 0; + } + + //Show Details + if (verbose) + { + printf("\nRequest Parameters\n==================\n\n"); + logRequestVerbose(Request, &printf); + printf("\n"); + } +} + + diff --git a/vlmcs.h b/vlmcs.h new file mode 100644 index 0000000..47386d0 --- /dev/null +++ b/vlmcs.h @@ -0,0 +1,21 @@ +#ifndef VLMCS_H_ +#define VLMCS_H_ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#if defined(USE_MSRPC) && defined(_WIN32) +#include +#endif // defined(USE_MSRPC) && defined(_WIN32) +#include "types.h" + +#if MULTI_CALL_BINARY < 1 +#define client_main main +#else +int client_main(int argc, CARGV argv); +#endif + +#endif /* VLMCS_H_ */ + diff --git a/vlmcs_all.c b/vlmcs_all.c new file mode 100644 index 0000000..31b4147 --- /dev/null +++ b/vlmcs_all.c @@ -0,0 +1,6525 @@ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include "vlmcs.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef _WIN32 +#include +#include +#else // _WIN32 +#endif // _WIN32 +#include "endian.h" +#include "shared_globals.h" +#include "output.h" +#ifndef USE_MSRPC +#include "network.h" +#include "rpc.h" +#else // USE_MSRPC +#include "msrpc-client.h" +#endif // USE_MSRPC +#include "kms.h" +#include "helpers.h" +#include "dns_srv.h" + + +#define VLMCS_OPTION_GRAB_INI 1 +#define VLMCS_OPTION_NO_GRAB_INI 2 + +#define kmsVersionMinor 0 // Currently constant. May change in future KMS versions + +// Function Prototypes +static void CreateRequestBase(REQUEST *Request); + + +// KMS Parameters +static int_fast8_t verbose = FALSE; +static int_fast8_t VMInfo = FALSE; +static int_fast8_t dnsnames = TRUE; +static int FixedRequests = 0; +static BYTE LicenseStatus = 0x02; +static const char *CMID = NULL; +static const char *CMID_prev = NULL; +static const char *WorkstationName = NULL; +static int BindingExpiration = 43200; //30 days +static const char *RemoteAddr; +static int_fast8_t ReconnectForEachRequest = FALSE; +static int AddressFamily = AF_UNSPEC; +static int_fast8_t incompatibleOptions = 0; +static const char* fn_ini_client = NULL; + +#ifndef NO_DNS +static int_fast8_t NoSrvRecordPriority = FALSE; +#endif // NO_DNS + + +// Structure for handling "License Packs" (e.g. Office2013v5 or WindowsVista) +typedef struct +{ + const char *names; //This is a list of strings. Terminate with additional Zero!!! + int N_Policy; + int kmsVersionMajor; + const GUID *AppID; + GUID ActID; + GUID KMSID; +} LicensePack; + + +typedef char iniFileEpidLines[3][256]; + +// Well known "license packs" +static const LicensePack LicensePackList[] = +{ + // List of names min lics version appID skuId KMSCountedID + /* 000 */ { "Vista\000W6\000" + "WindowsVista\000" + "Windows\000", 25, 4, PWINGUID, { 0x4f3d1606, 0x3fea, 0x4c01, { 0xbe, 0x3c, 0x8d, 0x67, 0x1c, 0x40, 0x1e, 0x3b, } }, { 0x212a64dc, 0x43b1, 0x4d3d, { 0xa3, 0x0c, 0x2f, 0xc6, 0x9d, 0x20, 0x95, 0xc6 } } }, + /* 001 */ { "W7\000Windows7\000", 25, 4, PWINGUID, { 0xb92e9980, 0xb9d5, 0x4821, { 0x9c, 0x94, 0x14, 0x0f, 0x63, 0x2f, 0x63, 0x12, } }, { 0x7fde5219, 0xfbfa, 0x484a, { 0x82, 0xc9, 0x34, 0xd1, 0xad, 0x53, 0xe8, 0x56 } } }, + /* 002 */ { "W8\000Windows8\000", 25, 5, PWINGUID, { 0xa98bcd6d, 0x5343, 0x4603, { 0x8a, 0xfe, 0x59, 0x08, 0xe4, 0x61, 0x11, 0x12, } }, { 0x3c40b358, 0x5948, 0x45af, { 0x92, 0x3b, 0x53, 0xd2, 0x1f, 0xcc, 0x7e, 0x79 } } }, + /* 003 */ { "W8C\000Windows8C\000", 25, 5, PWINGUID, { 0xc04ed6bf, 0x55c8, 0x4b47, { 0x9f, 0x8e, 0x5a, 0x1f, 0x31, 0xce, 0xee, 0x60, } }, { 0xbbb97b3b, 0x8ca4, 0x4a28, { 0x97, 0x17, 0x89, 0xfa, 0xbd, 0x42, 0xc4, 0xac } } }, + /* 004 */ { "W81\000Windows81\000", 25, 6, PWINGUID, { 0xc06b6981, 0xd7fd, 0x4a35, { 0xb7, 0xb4, 0x05, 0x47, 0x42, 0xb7, 0xaf, 0x67, } }, { 0xcb8fc780, 0x2c05, 0x495a, { 0x97, 0x10, 0x85, 0xaf, 0xff, 0xc9, 0x04, 0xd7 } } }, + /* 005 */ { "W81C\000Windows81C\000", 25, 6, PWINGUID, { 0xfe1c3238, 0x432a, 0x43a1, { 0x8e, 0x25, 0x97, 0xe7, 0xd1, 0xef, 0x10, 0xf3, } }, { 0x6d646890, 0x3606, 0x461a, { 0x86, 0xab, 0x59, 0x8b, 0xb8, 0x4a, 0xce, 0x82 } } }, + /* 006 */ { "W10\000Windows10\000", 25, 6, PWINGUID, { 0x73111121, 0x5638, 0x40f6, { 0xbc, 0x11, 0xf1, 0xd7, 0xb0, 0xd6, 0x43, 0x00, } }, { 0x58e2134f, 0x8e11, 0x4d17, { 0x9c, 0xb2, 0x91, 0x06, 0x9c, 0x15, 0x11, 0x48 } } }, + /* 007 */ { "W10C\000Windows10C\000", 25, 6, PWINGUID, { 0x58e97c99, 0xf377, 0x4ef1, { 0x81, 0xd5, 0x4a, 0xd5, 0x52, 0x2b, 0x5f, 0xd8, } }, { 0xe1c51358, 0xfe3e, 0x4203, { 0xa4, 0xa2, 0x3b, 0x6b, 0x20, 0xc9, 0x73, 0x4e } } }, + /* 008 */ { "2008" "\0" "2008A\000", 5, 4, PWINGUID, { 0xddfa9f7c, 0xf09e, 0x40b9, { 0x8c, 0x1a, 0xbe, 0x87, 0x7a, 0x9a, 0x7f, 0x4b, } }, { 0x33e156e4, 0xb76f, 0x4a52, { 0x9f, 0x91, 0xf6, 0x41, 0xdd, 0x95, 0xac, 0x48 } } }, + /* 009 */ { "2008B\000", 5, 4, PWINGUID, { 0xc1af4d90, 0xd1bc, 0x44ca, { 0x85, 0xd4, 0x00, 0x3b, 0xa3, 0x3d, 0xb3, 0xb9, } }, { 0x8fe53387, 0x3087, 0x4447, { 0x89, 0x85, 0xf7, 0x51, 0x32, 0x21, 0x5a, 0xc9 } } }, + /* 010 */ { "2008C\000", 5, 4, PWINGUID, { 0x68b6e220, 0xcf09, 0x466b, { 0x92, 0xd3, 0x45, 0xcd, 0x96, 0x4b, 0x95, 0x09, } }, { 0x8a21fdf3, 0xcbc5, 0x44eb, { 0x83, 0xf3, 0xfe, 0x28, 0x4e, 0x66, 0x80, 0xa7 } } }, + /* 011 */ { "2008R2" "\0" "2008R2A\000", 5, 4, PWINGUID, { 0xa78b8bd9, 0x8017, 0x4df5, { 0xb8, 0x6a, 0x09, 0xf7, 0x56, 0xaf, 0xfa, 0x7c, } }, { 0x0fc6ccaf, 0xff0e, 0x4fae, { 0x9d, 0x08, 0x43, 0x70, 0x78, 0x5b, 0xf7, 0xed } } }, + /* 012 */ { "2008R2B\000", 5, 4, PWINGUID, { 0x620e2b3d, 0x09e7, 0x42fd, { 0x80, 0x2a, 0x17, 0xa1, 0x36, 0x52, 0xfe, 0x7a, } }, { 0xca87f5b6, 0xcd46, 0x40c0, { 0xb0, 0x6d, 0x8e, 0xcd, 0x57, 0xa4, 0x37, 0x3f } } }, + /* 013 */ { "2008R2C\000", 5, 4, PWINGUID, { 0x7482e61b, 0xc589, 0x4b7f, { 0x8e, 0xcc, 0x46, 0xd4, 0x55, 0xac, 0x3b, 0x87, } }, { 0xb2ca2689, 0xa9a8, 0x42d7, { 0x93, 0x8d, 0xcf, 0x8e, 0x9f, 0x20, 0x19, 0x58 } } }, + /* 014 */ { "2012\000", 5, 5, PWINGUID, { 0xf0f5ec41, 0x0d55, 0x4732, { 0xaf, 0x02, 0x44, 0x0a, 0x44, 0xa3, 0xcf, 0x0f, } }, { 0x8665cb71, 0x468c, 0x4aa3, { 0xa3, 0x37, 0xcb, 0x9b, 0xc9, 0xd5, 0xea, 0xac } } }, + /* 015 */ { "2012R2\000" "12R2\000", 5, 6, PWINGUID, { 0x00091344, 0x1ea4, 0x4f37, { 0xb7, 0x89, 0x01, 0x75, 0x0b, 0xa6, 0x98, 0x8c, } }, { 0x8456EFD3, 0x0C04, 0x4089, { 0x87, 0x40, 0x5b, 0x72, 0x38, 0x53, 0x5a, 0x65 } } }, + /* 016 */ { "Office2010\000O14\000", 5, 4, POFFICE2010GUID, { 0x6f327760, 0x8c5c, 0x417c, { 0x9b, 0x61, 0x83, 0x6a, 0x98, 0x28, 0x7e, 0x0c, } }, { 0xe85af946, 0x2e25, 0x47b7, { 0x83, 0xe1, 0xbe, 0xbc, 0xeb, 0xea, 0xc6, 0x11 } } }, + /* 017 */ { "Office2013\000O15\000", 5, 6, POFFICE2013GUID, { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } }, { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } }, + /* 018 */ { "Office2013V5\000", 5, 5, POFFICE2013GUID, { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } }, { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } }, + /* 019 */ { "Office2016\000" "O16\000", 5, 6, POFFICE2013GUID, { 0xd450596f, 0x894d, 0x49e0, { 0x96, 0x6a, 0xfd, 0x39, 0xed, 0x4c, 0x4c, 0x64, } }, { 0x85b5f61b, 0x320b, 0x4be3, { 0x81, 0x4a, 0xb7, 0x6b, 0x2b, 0xfa, 0xfc, 0x82 } } }, + /* 020 */ { NULL, 0, 0, NULL, { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } }, { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } } } +}; + + +typedef struct +{ + const char* first[16]; + const char* second[16]; + const char* tld[22]; +} DnsNames; + + +// Some names for the DNS name random generator +static DnsNames ClientDnsNames = +{ + { "www", "ftp", "kms", "hack-me", "smtp", "ns1", "mx1", "ns1", "pop3", "imap", "mail", "dns", "headquarter", "we-love", "_vlmcs._tcp", "ceo-laptop" }, + { ".microsoft", ".apple", ".amazon", ".samsung", ".adobe", ".google", ".yahoo", ".facebook", ".ubuntu", ".oracle", ".borland", ".htc", ".acer", ".windows", ".linux", ".sony" }, + { ".com", ".net", ".org", ".cn", ".co.uk", ".de", ".com.tw", ".us", ".fr", ".it", ".me", ".info", ".biz", ".co.jp", ".ua", ".at", ".es", ".pro", ".by", ".ru", ".pl", ".kr" } +}; + + +// This is the one, we are actually using. We use Vista, if user selects nothing +LicensePack ActiveLicensePack; + + +// Request Count Control Variables +static int RequestsToGo = 1; +static BOOL firstRequestSent = FALSE; + + +static void string2UuidOrExit(const char *const restrict input, GUID *const restrict guid) +{ + if (strlen(input) != GUID_STRING_LENGTH || !string2Uuid(input, guid)) + { + errorout("Fatal: Command line contains an invalid GUID.\n"); + exit(!0); + } +} + + +#ifndef NO_HELP + +__noreturn static void clientUsage(const char* const programName) +{ + errorout( + "vlmcs %s \n\n" +# ifndef NO_DNS + "Usage: %s [options] [ [:] | . | - ] [options]\n\n" +# else // DNS + "Usage: %s [options] [[:]] [options]\n\n" +# endif // DNS + + "Options:\n\n" + + " -v Be verbose\n" + " -l \n" + " -4 Force V4 protocol\n" + " -5 Force V5 protocol\n" + " -6 Force V6 protocol\n" +# ifndef USE_MSRPC + " -i Use IP protocol (4 or 6)\n" +# endif // USE_MSRPC + " -e Show some valid examples\n" + " -x Show valid Apps\n" + " -d no DNS names, use Netbios names (no effect if -w is used)\n\n" + + "Advanced options:\n\n" + + " -a Use custom Application GUID\n" + " -s Use custom Activation Configuration GUID\n" + " -k Use custom KMS GUID\n" + " -c Use custom Client GUID. Default: Use random\n" + " -o Use custom Prevoius Client GUID. Default: ZeroGUID\n" + " -w Use custom workstation name. Default: Use random\n" + " -r Fake required clients\n" + " -n Fixed # of requests (Default: Enough to charge)\n" + " -m Pretend to be a virtual machine\n" + " -G Get ePID/HwId data and write to . Can't be used with -l, -4, -5, -6, -a, -s, -k, -r and -n\n" +# ifndef USE_MSRPC + " -T Use a new TCP connection for each request.\n" + " -N <0|1> disable or enable NDR64. Default: 1\n" + " -B <0|1> disable or enable RPC bind time feature negotiation. Default: 1\n" +# endif // USE_MSRPC + " -t Use specfic license status (0 <= T <= 6)\n" + " -g Use a specfic binding expiration time in minutes. Default 43200\n" +# ifndef NO_DNS + " -P Ignore priority and weight in DNS SRV records\n" +# endif // NO_DNS +# ifndef USE_MSRPC + " -p Don't use multiplexed RPC bind\n" +# endif // USE_MSRPC + "\n" + + ":\t\tTCP port name of the KMS to use. Default 1688.\n" + ":\t\thost name of the KMS to use. Default 127.0.0.1\n" +# ifndef NO_DNS + ".:\tfind KMS server in via DNS\n" +# endif // NO_DNS + ":\t\t(Type %s -x to see a list of valid apps)\n\n", + Version, programName, programName + ); + + exit(!0); +} + +__pure static int getLineWidth(void) +{ + #ifdef TERMINAL_FIXED_WIDTH // For Toolchains that to not have winsize + return TERMINAL_FIXED_WIDTH; + #else // Can determine width of terminal + #ifndef _WIN32 + + struct winsize w; + + if(ioctl(STDOUT_FILENO, TIOCGWINSZ, &w)) + { + return 80; // Return this if stdout is not a tty + } + + return w.ws_col; + + #else // _WIN32 + + CONSOLE_SCREEN_BUFFER_INFO csbiInfo; + HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); + + if (!GetConsoleScreenBufferInfo(hStdout, &csbiInfo)) + { + return 80; // Return this if stdout is not a Console + } + + return csbiInfo.srWindow.Right - csbiInfo.srWindow.Left; + + #endif // WIN32 + + #endif // Can determine width of terminal + +} + +__noreturn static void showProducts(PRINTFUNC p) +{ + int cols = getLineWidth(); + int itemsPerLine; + uint8_t i; + + p( + "The following " + #if !defined(NO_EXTENDED_PRODUCT_LIST) && !defined(NO_BASIC_PRODUCT_LIST) + "aliases " + #else + "names " + #endif + "can be used with -l:\n\n" + ); + + const LicensePack* lp; + + itemsPerLine = cols / 20; + if (!itemsPerLine) itemsPerLine = 1; + + for (i = 1, lp = LicensePackList; lp->names; lp++) + { + const char* name; + + for (name = lp->names; *name; name += strlen(name) + 1, i++) + { + p("%-20s", name); + + if (!(i % itemsPerLine)) p("\n"); + } + } + + p("\n\n"); + + #if !defined(NO_EXTENDED_PRODUCT_LIST) && !defined(NO_BASIC_PRODUCT_LIST) + + const KmsIdList* currentProduct; + uint_fast8_t longestString = 0; + uint8_t k, items = getExtendedProductListSize(); + + p("You may also use these product names or numbers:\n\n"); + + for (currentProduct = ExtendedProductList; currentProduct->name; currentProduct++) + { + uint_fast8_t len = strlen(currentProduct->name); + + if (len > longestString) + longestString = len; + } + + itemsPerLine = cols / (longestString + 10); + if (!itemsPerLine) itemsPerLine = 1; + uint8_t lines = items / itemsPerLine; + if (items % itemsPerLine) lines++; + + for (i = 0; i < lines; i++) + { + for (k = 0; k < itemsPerLine; k++) + { + uint8_t j; + uint8_t index = k * lines + i; + + if (index >= items) break; + + p("%3u = %s", index + 1, ExtendedProductList[index].name); + + for (j = 0; j < longestString + 4 - strlen(ExtendedProductList[index].name); j++) + { + p(" "); + } + } + + p("\n"); + } + + p("\n"); + + #endif // !defined(NO_EXTENDED_PRODUCT_LIST) && !defined(NO_BASIC_PRODUCT_LIST) + + exit(0); +} + +__noreturn static void examples(const char* const programName) +{ + printf( + "\nRequest activation for Office2013 using V4 protocol from 192.168.1.5:1688\n" + "\t%s -l O15 -4 192.168.1.5\n" + "\t%s -l O15 -4 192.168.1.5:1688\n\n" + + "Request activation for Windows Server 2012 using V4 protocol from localhost:1688\n" + "\t%s -4 -l Windows -k 8665cb71-468c-4aa3-a337-cb9bc9d5eaac\n" + "\t%s -4 -l 2012\n" + "\t%s -4 -l 2012 [::1]:1688\n" + "\t%s -4 -l 12 127.0.0.2:1688\n\n" + + "Send 100,000 requests to localhost:1688\n" + "\t%s -n 100000 -l Office2010\n\n" + + "Request Activation for Windows 8 from 10.0.0.1:4711 and pretend to be Steve Ballmer\n" + "\t%s -l Windows8 -w steveb1.redmond.microsoft.com 10.0.0.1:4711\n\n", + programName, programName, programName, programName, programName, programName, programName, programName + ); + + exit(0); +} + + +#else // NO_HELP + + +__noreturn static void clientUsage(const char* const programName) +{ + errorout("Incorrect parameter specified.\n"); + exit(!0); +} + + +#endif // NO_HELP + + +static BOOL findLicensePackByName(const char* const name, LicensePack* const lp) +{ + // Try to find a package in the short list first + + LicensePack *licensePack; + for (licensePack = (LicensePack*)&LicensePackList; licensePack->names; licensePack ++) + { + const char *currentName; + for (currentName = licensePack->names; *currentName; currentName += strlen(currentName) + 1) + { + if (!strcasecmp(name, currentName)) + { + *lp = *licensePack; + return TRUE; + } + } + } + + #if defined(NO_BASIC_PRODUCT_LIST) || defined(NO_EXTENDED_PRODUCT_LIST) + + return FALSE; + + #else // Both Lists are available + + // search extended product list + + uint8_t items = getExtendedProductListSize(); + unsigned int index; + + if (stringToInt(name, 1, items, &index)) + { + index--; + } + else + { + for (index = 0; index < items; index++) + { + if (!strcasecmp(ExtendedProductList[index].name, name)) break; + } + + if (index >= items) return FALSE; + } + + lp->AppID = &AppList[ExtendedProductList[index].AppIndex].guid; + lp->KMSID = ProductList[ExtendedProductList[index].KmsIndex].guid; + lp->ActID = ExtendedProductList[index].guid; + lp->N_Policy = ProductList[ExtendedProductList[index].KmsIndex].KMS_PARAM_REQUIREDCOUNT; + lp->kmsVersionMajor = ProductList[ExtendedProductList[index].KmsIndex].KMS_PARAM_MAJOR; + + return TRUE; + + #endif // Both Lists are available +} + +static const char* const client_optstring = "+N:B:i:l:a:s:k:c:w:r:n:t:g:G:o:pPTv456mexd"; + + +//First pass. We handle only "-l". Since -a -k -s -4 -5 and -6 are exceptions to -l, we process -l first +static void parseCommandLinePass1(const int argc, CARGV argv) +{ + int o; + optReset(); + + for (opterr = 0; ( o = getopt(argc, (char* const*)argv, client_optstring) ) > 0; ) switch (o) + { + case 'l': // Set "License Pack" and protocol version (e.g. Windows8, Office2013v5, ...) + + if (!findLicensePackByName(optarg, &ActiveLicensePack)) + { + errorout("Invalid client application. \"%s\" is not valid for -l.\n\n", optarg); + #ifndef NO_HELP + showProducts(&errorout); + #endif // !NO_HELP + } + + break; + + default: + break; + } +} + + +// Second Pass. Handle all options except "-l" +static void parseCommandLinePass2(const char *const programName, const int argc, CARGV argv) +{ + int o; + optReset(); + + for (opterr = 0; ( o = getopt(argc, (char* const*)argv, client_optstring) ) > 0; ) switch (o) + { + #ifndef NO_HELP + + case 'e': // Show examples + + examples(programName); + break; + + case 'x': // Show Apps + + showProducts(&printf); + break; + + #endif // NO_HELP + +# ifndef NO_DNS + + case 'P': + + NoSrvRecordPriority = TRUE; + break; + +# endif // NO_DNS + + case 'G': + + incompatibleOptions |= VLMCS_OPTION_GRAB_INI; + fn_ini_client = optarg; + break; + +# ifndef USE_MSRPC + + case 'N': + if (!getArgumentBool(&UseRpcNDR64, optarg)) clientUsage(programName); + break; + + case 'B': + if (!getArgumentBool(&UseRpcBTFN, optarg)) clientUsage(programName); + break; + + case 'i': + + switch(getOptionArgumentInt(o, 4, 6)) + { + case 4: + AddressFamily = AF_INET; + break; + case 6: + AddressFamily = AF_INET6; + break; + default: + errorout("IPv5 does not exist.\n"); + exit(!0); + break; + } + + break; + + case 'p': // Multiplexed RPC + + UseMultiplexedRpc = FALSE; + break; + +# endif // USE_MSRPC + + case 'n': // Fixed number of Requests (regardless, whether they are required) + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + FixedRequests = getOptionArgumentInt(o, 1, INT_MAX); + break; + + case 'r': // Fake minimum required client count + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + ActiveLicensePack.N_Policy = getOptionArgumentInt(o, 1, INT_MAX); + break; + + case 'c': // use a specific client GUID + + // If using a constant Client ID, send only one request unless /N= explicitly specified + if (!FixedRequests) FixedRequests = 1; + + CMID = optarg; + break; + + case 'o': // use a specific previous client GUID + + CMID_prev = optarg; + break; + + case 'a': // Set specific App Id + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + ActiveLicensePack.AppID = (GUID*)vlmcsd_malloc(sizeof(GUID)); + + string2UuidOrExit(optarg, (GUID*)ActiveLicensePack.AppID); + break; + + case 'g': // Set custom "grace" time in minutes (default 30 days) + + BindingExpiration = getOptionArgumentInt(o, 0, INT_MAX); + break; + + case 's': // Set specfic SKU ID + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + string2UuidOrExit(optarg, &ActiveLicensePack.ActID); + break; + + case 'k': // Set specific KMS ID + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + string2UuidOrExit(optarg, &ActiveLicensePack.KMSID); + break; + + case '4': // Force V4 protocol + case '5': // Force V5 protocol + case '6': // Force V5 protocol + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + ActiveLicensePack.kmsVersionMajor = o - 0x30; + break; + + case 'd': // Don't use DNS names + + dnsnames = FALSE; + break; + + case 'v': // Be verbose + + verbose = TRUE; + break; + + case 'm': // Pretend to be a virtual machine + + VMInfo = TRUE; + break; + + case 'w': // WorkstationName (max. 63 chars) + + WorkstationName = optarg; + + if (strlen(WorkstationName) > 63) + { + errorout("\007WARNING! Truncating Workstation name to 63 characters (%s).\n", WorkstationName); + } + + break; + + case 't': + + LicenseStatus = getOptionArgumentInt(o, 0, 6) & 0xff; + break; + +# ifndef USE_MSRPC + + case 'T': + + ReconnectForEachRequest = TRUE; + break; + +# endif // USE_MSRPC + + case 'l': + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + break; + + default: + clientUsage(programName); + } + if ((incompatibleOptions & (VLMCS_OPTION_NO_GRAB_INI | VLMCS_OPTION_GRAB_INI)) == (VLMCS_OPTION_NO_GRAB_INI | VLMCS_OPTION_GRAB_INI)) + clientUsage(programName); +} + + +/* + * Compares 2 GUIDs where one is host-endian and the other is little-endian (network byte order) + */ +int_fast8_t IsEqualGuidLEHE(const GUID* const guid1, const GUID* const guid2) +{ + GUID tempGuid; + LEGUID(&tempGuid, guid2); + return IsEqualGUID(guid1, &tempGuid); +} + + +#ifndef USE_MSRPC +static void checkRpcLevel(const REQUEST* request, RESPONSE* response) +{ + if (!RpcFlags.HasNDR32) + errorout("\nWARNING: Server's RPC protocol does not support NDR32.\n"); + + if (UseRpcBTFN && UseRpcNDR64 && RpcFlags.HasNDR64 && !RpcFlags.HasBTFN) + errorout("\nWARNING: Server's RPC protocol has NDR64 but no BTFN.\n"); + + if (!IsEqualGuidLEHE(&request->KMSID, &ProductList[15].guid) && UseRpcBTFN && !RpcFlags.HasBTFN) + errorout("\nWARNING: A server with pre-Vista RPC activated a product other than Office 2010.\n"); +} +#endif // USE_MSRPC + + +static void displayResponse(const RESPONSE_RESULT result, const REQUEST* request, RESPONSE* response, BYTE *hwid) +{ + fflush(stdout); + + if (!result.RpcOK) errorout("\n\007ERROR: Non-Zero RPC result code.\n"); + if (!result.DecryptSuccess) errorout("\n\007ERROR: Decryption of V5/V6 response failed.\n"); + if (!result.IVsOK) errorout("\n\007ERROR: AES CBC initialization vectors (IVs) of request and response do not match.\n"); + if (!result.PidLengthOK) errorout("\n\007ERROR: The length of the PID is not valid.\n"); + if (!result.HashOK) errorout("\n\007ERROR: Computed hash does not match hash in response.\n"); + if (!result.ClientMachineIDOK) errorout("\n\007ERROR: Client machine GUIDs of request and response do not match.\n"); + if (!result.TimeStampOK) errorout("\n\007ERROR: Time stamps of request and response do not match.\n"); + if (!result.VersionOK) errorout("\n\007ERROR: Protocol versions of request and response do not match.\n"); + if (!result.HmacSha256OK) errorout("\n\007ERROR: Keyed-Hash Message Authentication Code (HMAC) is incorrect.\n"); + if (!result.IVnotSuspicious) errorout("\nWARNING: Response uses an IV following KMSv5 rules in KMSv6 protocol.\n"); + + if (result.effectiveResponseSize != result.correctResponseSize) + { + errorout("\n\007WARNING: Size of RPC payload (KMS Message) should be %u but is %u.", result.correctResponseSize, result.effectiveResponseSize); + } + +# ifndef USE_MSRPC + checkRpcLevel(request, response); +# endif // USE_MSRPC + + if (!result.DecryptSuccess) return; // Makes no sense to display anything + + char ePID[3 * PID_BUFFER_SIZE]; + if (!ucs2_to_utf8(response->KmsPID, ePID, PID_BUFFER_SIZE, 3 * PID_BUFFER_SIZE)) + { + memset(ePID + 3 * PID_BUFFER_SIZE - 3, 0, 3); + } + + // Read KMSPID from Response + if (!verbose) + { + printf(" -> %s", ePID); + + if (LE16(response->MajorVer) > 5) + { +# ifndef _WIN32 + printf(" (%016llX)", (unsigned long long)BE64(*(uint64_t*)hwid)); +# else // _WIN32 + printf(" (%016I64X)", (unsigned long long)BE64(*(uint64_t*)hwid)); +# endif // _WIN32 + } + + printf("\n"); + } + else + { + printf( + "\n\nResponse from KMS server\n========================\n\n" + "Size of KMS Response : %u (0x%x)\n", result.effectiveResponseSize, result.effectiveResponseSize + ); + + logResponseVerbose(ePID, hwid, response, &printf); + printf("\n"); + } +} + + +static void connectRpc(RpcCtx *s) +{ +# ifdef NO_DNS + + *s = connectToAddress(RemoteAddr, AddressFamily, FALSE); + if (*s == INVALID_RPCCTX) + { + errorout("Fatal: Could not connect to %s\n", RemoteAddr); + exit(!0); + } + + if (verbose) + printf("\nPerforming RPC bind ...\n"); + + if (rpcBindClient(*s, verbose)) + { + errorout("Fatal: Could not bind RPC\n"); + exit(!0); + } + + if (verbose) printf("... successful\n"); + +# else // DNS + + static kms_server_dns_ptr* serverlist = NULL; + static int numServers = 0; + //static int_fast8_t ServerListAlreadyPrinted = FALSE; + int i; + + if (!strcmp(RemoteAddr, "-") || *RemoteAddr == '.') // Get KMS server via DNS SRV record + { + if (!serverlist) + numServers = getKmsServerList(&serverlist, RemoteAddr); + + if (numServers < 1) + { + errorout("Fatal: No KMS servers found\n"); + exit(!0); + } + + if (!NoSrvRecordPriority) sortSrvRecords(serverlist, numServers); + + if (verbose /*&& !ServerListAlreadyPrinted*/) + { + for (i = 0; i < numServers; i++) + { + printf( + "Found %-40s (priority: %hu, weight: %hu, randomized weight: %i)\n", + serverlist[i]->serverName, + serverlist[i]->priority, serverlist[i]->weight, + NoSrvRecordPriority ? 0 : serverlist[i]->random_weight + ); + } + + printf("\n"); + //ServerListAlreadyPrinted = TRUE; + } + } + else // Just use the server supplied on the command line + { + if (!serverlist) + { + serverlist = (kms_server_dns_ptr*)vlmcsd_malloc(sizeof(kms_server_dns_ptr)); + *serverlist = (kms_server_dns_ptr)vlmcsd_malloc(sizeof(kms_server_dns_t)); + + numServers = 1; + strncpy((*serverlist)->serverName, RemoteAddr, sizeof((*serverlist)->serverName)); + } + } + + for (i = 0; i < numServers; i++) + { + *s = connectToAddress(serverlist[i]->serverName, AddressFamily, (*RemoteAddr == '.' || *RemoteAddr == '-')); + + if (*s == INVALID_RPCCTX) continue; + + if (verbose) + printf("\nPerforming RPC bind ...\n"); + + if (rpcBindClient(*s, verbose)) + { + errorout("Warning: Could not bind RPC\n"); + continue; + } + + if (verbose) printf("... successful\n"); + + return; + } + + errorout("Fatal: Could not connect to any KMS server\n"); + exit(!0); + +# endif // DNS +} + + +static int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQUEST *baseRequest, RESPONSE_RESULT *result, BYTE *const hwid) +{ + size_t requestSize, responseSize; + BYTE *request, *response; + int status; + + result->mask = 0; + + if (LE16(baseRequest->MajorVer) == 4) + request = CreateRequestV4(&requestSize, baseRequest); + else + request = CreateRequestV6(&requestSize, baseRequest); + + if (!(status = rpcSendRequest(sock, request, requestSize, &response, &responseSize))) + { + if (LE16(((RESPONSE*)(response))->MajorVer) == 4) + { + RESPONSE_V4 response_v4; + *result = DecryptResponseV4(&response_v4, responseSize, response, request); + memcpy(baseResponse, &response_v4.ResponseBase, sizeof(RESPONSE)); + } + else + { + RESPONSE_V6 response_v6; + *result = DecryptResponseV6(&response_v6, responseSize, response, request, hwid); + memcpy(baseResponse, &response_v6.ResponseBase, sizeof(RESPONSE)); + } + + result->RpcOK = TRUE; + } + + if (response) free(response); + free(request); + return status; +} + + +static int sendRequest(RpcCtx *const s, REQUEST *const request, RESPONSE *const response, hwid_t hwid, RESPONSE_RESULT *const result) +{ + CreateRequestBase(request); + + if (*s == INVALID_RPCCTX ) + connectRpc(s); + else + { + // Check for lame KMS emulators that close the socket after each request + int_fast8_t disconnected = isDisconnected(*s); + + if (disconnected) + errorout("\nWarning: Server closed RPC connection (probably non-multitasked KMS emulator)\n"); + + if (ReconnectForEachRequest || disconnected) + { + closeRpc(*s); + connectRpc(s); + } + } + + printf("Sending activation request (KMS V%u) ", ActiveLicensePack.kmsVersionMajor); + fflush(stdout); + + return SendActivationRequest(*s, response, request, result, hwid); +} + + +static void displayRequestError(RpcCtx *const s, const int status, const int currentRequest, const int totalRequests) +{ + errorout("\nError 0x%08X while sending request %u of %u\n", status, currentRequest, RequestsToGo + totalRequests); + + switch(status) + { + case 0xC004F042: // not licensed + errorout("The server refused to activate the requested product\n"); + break; + + case 0x8007000D: // e.g. v6 protocol on a v5 server + errorout("The server didn't understand the request\n"); + break; + + case 1: + errorout("An RPC protocol error has occured\n"); + closeRpc(*s); + connectRpc(s); + break; + + default: + break; + } +} + + +static void newIniBackupFile(const char* const restrict fname) +{ + FILE *restrict f = fopen(fname, "wb"); + + if (!f) + { + errorout("Fatal: Cannot create %s: %s\n", fname, strerror(errno)); + exit(!0); + } + + if (fclose(f)) + { + errorout("Fatal: Cannot write to %s: %s\n", fname, strerror(errno)); + unlink(fname); + exit(!0); + } +} + + +static void updateIniFile(iniFileEpidLines* const restrict lines) +{ + int_fast8_t lineWritten[_countof(*lines)]; + struct stat statbuf; + uint_fast8_t i; + int_fast8_t iniFileExistedBefore = TRUE; + unsigned int lineNumber; + + memset(lineWritten, FALSE, sizeof(lineWritten)); + + char* restrict fn_bak = (char*)vlmcsd_malloc(strlen(fn_ini_client) + 2); + + strcpy(fn_bak, fn_ini_client); + strcat(fn_bak, "~"); + + if (stat(fn_ini_client, &statbuf)) + { + if (errno != ENOENT) + { + errorout("Fatal: %s: %s\n", fn_ini_client, strerror(errno)); + exit(!0); + } + else + { + iniFileExistedBefore = FALSE; + newIniBackupFile(fn_bak); + } + } + else + { + unlink(fn_bak); // Required for Windows. Most Unix systems don't need it. + if (rename(fn_ini_client, fn_bak)) + { + errorout("Fatal: Cannot create %s: %s\n", fn_bak, strerror(errno)); + exit(!0); + } + } + + printf("\n%s file %s\n", iniFileExistedBefore ? "Updating" : "Creating", fn_ini_client); + + FILE *restrict in, *restrict out; + + in = fopen(fn_bak, "rb"); + + if (!in) + { + errorout("Fatal: Cannot open %s: %s\n", fn_bak, strerror(errno)); + exit(!0); + } + + out = fopen(fn_ini_client, "wb"); + + if (!out) + { + errorout("Fatal: Cannot create %s: %s\n", fn_ini_client, strerror(errno)); + exit(!0); + } + + char sourceLine[256]; + + for (lineNumber = 1; fgets(sourceLine, sizeof(sourceLine), in); lineNumber++) + { + for (i = 0; i < _countof(*lines); i++) + { + if (*(*lines)[i] && !strncasecmp(sourceLine, (*lines)[i], GUID_STRING_LENGTH)) + { + if (lineWritten[i]) break; + + fprintf(out, "%s", (*lines)[i]); + printf("line %2i: %s", lineNumber, (*lines)[i]); + lineWritten[i] = TRUE; + break; + } + } + + if (i >= _countof(*lines)) + { + fprintf(out, "%s", sourceLine); + } + } + + if (ferror(in)) + { + errorout("Fatal: Cannot read from %s: %s\n", fn_bak, strerror(errno)); + exit(!0); + } + + fclose(in); + + for (i = 0; i < _countof(*lines); i++) + { + if (!lineWritten[i] && *(*lines)[i]) + { + fprintf(out, "%s", (*lines)[i]); + printf("line %2i: %s", lineNumber + i, (*lines)[i]); + } + } + + if (fclose(out)) + { + errorout("Fatal: Cannot write to %s: %s\n", fn_ini_client, strerror(errno)); + exit(!0); + } + + if (!iniFileExistedBefore) unlink(fn_bak); + + free(fn_bak); +} + +static void grabServerData() +{ + RpcCtx s = INVALID_RPCCTX; + WORD MajorVer = 6; + iniFileEpidLines lines; + int_fast8_t Licenses[_countof(lines)] = { 0, 15, 14 }; + uint_fast8_t i; + RESPONSE response; + RESPONSE_RESULT result; + REQUEST request; + hwid_t hwid; + int status; + size_t len; + + for (i = 0; i < _countof(lines); i++) *lines[i] = 0; + + for (i = 0; i < _countof(Licenses) && MajorVer > 3; i++) + { + ActiveLicensePack = LicensePackList[Licenses[i]]; + ActiveLicensePack.kmsVersionMajor = MajorVer; + status = sendRequest(&s, &request, &response, hwid, &result); + printf("%-11s", ActiveLicensePack.names); + + if (status) + { + displayRequestError(&s, status, i + 7 - MajorVer, 9 - MajorVer); + + if (status == 1) break; + + if ((status & 0xF0000000) == 0x80000000) + { + MajorVer--; + i--; + } + + continue; + } + + printf("%i of %i", (int)(i + 7 - MajorVer), (int)(9 - MajorVer)); + displayResponse(result, &request, &response, hwid); + + char guidBuffer[GUID_STRING_LENGTH + 1]; + char ePID[3 * PID_BUFFER_SIZE]; + + uuid2StringLE(&request.AppID, guidBuffer); + + if (!ucs2_to_utf8(response.KmsPID, ePID, PID_BUFFER_SIZE, 3 * PID_BUFFER_SIZE)) + { + memset(ePID + 3 * PID_BUFFER_SIZE - 3, 0, 3); + } + + snprintf(lines[i], sizeof(lines[0]), "%s = %s", guidBuffer, ePID); + + if (response.MajorVer > 5) + { + len = strlen(lines[i]); + snprintf (lines[i] + len, sizeof(lines[0]) - len, "/ %02X %02X %02X %02X %02X %02X %02X %02X", hwid[0], hwid[1], hwid[2], hwid[3], hwid[4], hwid[5], hwid[6], hwid[7]); + } + + len = strlen(lines[i]); + snprintf(lines[i] + len, sizeof(lines[0]) - len, "\n"); + + } + + if (strcmp(fn_ini_client, "-")) + { + updateIniFile(&lines); + } + else + { + printf("\n"); + for (i = 0; i < _countof(lines); i++) printf("%s", lines[i]); + } +} + + +int client_main(const int argc, CARGV argv) +{ + #if defined(_WIN32) && !defined(USE_MSRPC) + + // Windows Sockets must be initialized + + WSADATA wsadata; + int error; + + if ((error = WSAStartup(0x0202, &wsadata))) + { + printerrorf("Fatal: Could not initialize Windows sockets (Error: %d).\n", error); + return error; + } + + #endif // _WIN32 + + #ifdef _NTSERVICE + + // We are not a service + IsNTService = FALSE; + + // Set console output page to UTF-8 + // SetConsoleOutputCP(65001); + + #endif // _NTSERVICE + + randomNumberInit(); + ActiveLicensePack = *LicensePackList; //first license is Windows Vista + + parseCommandLinePass1(argc, argv); + + int_fast8_t useDefaultHost = FALSE; + + if (optind < argc) + RemoteAddr = argv[optind]; + else + useDefaultHost = TRUE; + + int hostportarg = optind; + + if (optind < argc - 1) + { + parseCommandLinePass1(argc - hostportarg, argv + hostportarg); + + if (optind < argc - hostportarg) + clientUsage(argv[0]); + } + + parseCommandLinePass2(argv[0], argc, argv); + + if (optind < argc - 1) + parseCommandLinePass2(argv[0], argc - hostportarg, argv + hostportarg); + + if (useDefaultHost) + RemoteAddr = AddressFamily == AF_INET6 ? "::1" : "127.0.0.1"; + + if (fn_ini_client != NULL) + grabServerData(); + else + { + int requests; + RpcCtx s = INVALID_RPCCTX; + + for (requests = 0, RequestsToGo = ActiveLicensePack.N_Policy - 1; RequestsToGo; requests++) + { + RESPONSE response; + REQUEST request; + RESPONSE_RESULT result; + hwid_t hwid; + + int status = sendRequest(&s, &request, &response, hwid, &result); + + if (FixedRequests) RequestsToGo = FixedRequests - requests - 1; + + if (status) + { + displayRequestError(&s, status, requests + 1, RequestsToGo + requests + 1); + if (!FixedRequests) RequestsToGo = 0; + } + else + { + if (!FixedRequests) + { + if (firstRequestSent && ActiveLicensePack.N_Policy - (int)response.Count >= RequestsToGo) + { + errorout("\nThe KMS server does not increment it's active clients. Aborting...\n"); + RequestsToGo = 0; + } + else + { + RequestsToGo = ActiveLicensePack.N_Policy - response.Count; + if (RequestsToGo < 0) RequestsToGo = 0; + } + } + + fflush(stderr); + printf("%i of %i ", requests + 1, RequestsToGo + requests + 1); + displayResponse(result, &request, &response, hwid); + firstRequestSent = TRUE; + } + } + } + + return 0; +} + + +// Create Base KMS Client Request +static void CreateRequestBase(REQUEST *Request) +{ + + Request->MinorVer = LE16((WORD)kmsVersionMinor); + Request->MajorVer = LE16((WORD)ActiveLicensePack.kmsVersionMajor); + Request->VMInfo = LE32(VMInfo); + Request->LicenseStatus = LE32(LicenseStatus); + Request->BindingExpiration = LE32(BindingExpiration); + LEGUID(&Request->AppID, ActiveLicensePack.AppID); + LEGUID(&Request->ActID, &ActiveLicensePack.ActID); + LEGUID(&Request->KMSID, &ActiveLicensePack.KMSID); + + getUnixTimeAsFileTime(&Request->ClientTime); + Request->N_Policy = LE32(ActiveLicensePack.N_Policy); + + { + GUID tempGUID; + + if (CMID) + { + string2UuidOrExit(CMID, &tempGUID); + LEGUID(&Request->CMID, &tempGUID); + } + else + { + get16RandomBytes(&Request->CMID); + + // Set reserved UUID bits + Request->CMID.Data4[0] &= 0x3F; + Request->CMID.Data4[0] |= 0x80; + + // Set UUID type 4 (random UUID) + Request->CMID.Data3 &= LE16(0xfff); + Request->CMID.Data3 |= LE16(0x4000); + } + + if (CMID_prev) + { + string2UuidOrExit(CMID_prev, &tempGUID); + LEGUID(&Request->CMID_prev, &tempGUID); + } + else + { + memset(&Request->CMID_prev, 0, sizeof(Request->CMID_prev)); + } + } + + static const char alphanum[] = "0123456789" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" /*"abcdefghijklmnopqrstuvwxyz" */; + + if (WorkstationName) + { + utf8_to_ucs2(Request->WorkstationName, WorkstationName, WORKSTATION_NAME_BUFFER, WORKSTATION_NAME_BUFFER * 3); + } + else if (dnsnames) + { + int len, len2; + unsigned int index = rand() % _countof(ClientDnsNames.first); + len = utf8_to_ucs2(Request->WorkstationName, ClientDnsNames.first[index], WORKSTATION_NAME_BUFFER, WORKSTATION_NAME_BUFFER * 3); + + index = rand() % _countof(ClientDnsNames.second); + len2 = utf8_to_ucs2(Request->WorkstationName + len, ClientDnsNames.second[index], WORKSTATION_NAME_BUFFER, WORKSTATION_NAME_BUFFER * 3); + + index = rand() % _countof(ClientDnsNames.tld); + utf8_to_ucs2(Request->WorkstationName + len + len2, ClientDnsNames.tld[index], WORKSTATION_NAME_BUFFER, WORKSTATION_NAME_BUFFER * 3); + } + else + { + unsigned int size = (rand() % 14) + 1; + const unsigned char *dummy; + unsigned int i; + + for (i = 0; i < size; i++) + { + Request->WorkstationName[i] = utf8_to_ucs2_char((unsigned char*)alphanum + (rand() % (sizeof(alphanum) - 1)), &dummy); + } + + Request->WorkstationName[size] = 0; + } + + //Show Details + if (verbose) + { + printf("\nRequest Parameters\n==================\n\n"); + logRequestVerbose(Request, &printf); + printf("\n"); + } +} + + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "crypto.h" +#include "endian.h" +#include + +const BYTE AesKeyV4[] = { + 0x05, 0x3D, 0x83, 0x07, 0xF9, 0xE5, 0xF0, 0x88, 0xEB, 0x5E, 0xA6, 0x68, 0x6C, 0xF0, 0x37, 0xC7, 0xE4, 0xEF, 0xD2, 0xD6}; + +const BYTE AesKeyV5[] = { + 0xCD, 0x7E, 0x79, 0x6F, 0x2A, 0xB2, 0x5D, 0xCB, 0x55, 0xFF, 0xC8, 0xEF, 0x83, 0x64, 0xC4, 0x70 }; + +const BYTE AesKeyV6[] = { + 0xA9, 0x4A, 0x41, 0x95, 0xE2, 0x01, 0x43, 0x2D, 0x9B, 0xCB, 0x46, 0x04, 0x05, 0xD8, 0x4A, 0x21 }; + +static const BYTE SBox[] = { + 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, + 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, + 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 0xB7, 0xFD, 0x93, 0x26, + 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, + 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, + 0xEB, 0x27, 0xB2, 0x75, 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, + 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, 0x53, 0xD1, 0x00, 0xED, + 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, + 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, + 0x50, 0x3C, 0x9F, 0xA8, 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, + 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 0xCD, 0x0C, 0x13, 0xEC, + 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, + 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, + 0xDE, 0x5E, 0x0B, 0xDB, 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, + 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, 0xE7, 0xC8, 0x37, 0x6D, + 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, + 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, + 0x4B, 0xBD, 0x8B, 0x8A, 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, + 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, 0xE1, 0xF8, 0x98, 0x11, + 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, + 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, + 0xB0, 0x54, 0xBB, 0x16 +}; + + +void XorBlock(const BYTE *const in, const BYTE *out) // Ensure that this is always 32 bit aligned +{ + /*UAA64( out, 0 ) ^= UAA64( in, 0 ); + UAA64( out, 1 ) ^= UAA64( in, 1 );*/ + + uint_fast8_t i; + + for (i = 0; i < AES_BLOCK_WORDS; i++) + { + ((DWORD*)out)[i] ^= ((DWORD*)in)[i]; + } +} + +#define AddRoundKey(d, rk) XorBlock((const BYTE *)rk, (const BYTE *)d) + +#define Mul2(word) (((word & 0x7f7f7f7f) << 1) ^ (((word & 0x80808080) >> 7) * 0x1b)) +#define Mul3(word) (Mul2(word) ^ word) +#define Mul4(word) (Mul2(Mul2(word))) +#define Mul8(word) (Mul2(Mul2(Mul2(word)))) +#define Mul9(word) (Mul8(word) ^ word) +#define MulB(word) (Mul8(word) ^ Mul3(word)) +#define MulD(word) (Mul8(word) ^ Mul4(word) ^ word) +#define MulE(word) (Mul8(word) ^ Mul4(word) ^ Mul2(word)) + +//32 bit Galois Multiplication (generates bigger code than Macros) +/*static DWORD Mul(DWORD x, DWORD y) +{ + DWORD result = x, yTemp = y, log2; + + if (!y) return 0; + + for (log2 = 0; yTemp >>= 1; log2++ ) + { + result = Mul2(result); + } + + return result ^ Mul(x, y - (1 << log2)); +}*/ + + +void MixColumnsR(BYTE *restrict state) +{ + uint_fast8_t i = 0; + for (; i < AES_BLOCK_WORDS; i++) + { + #if defined(_CRYPTO_OPENSSL) && defined(_OPENSSL_SOFTWARE) && defined(_USE_AES_FROM_OPENSSL) //Always byte swap regardless of endianess + DWORD word = BS32(((DWORD *) state)[i]); + ((DWORD *) state)[i] = BS32(MulE(word) ^ ROR32(MulB(word), 8) ^ ROR32(MulD(word), 16) ^ ROR32(Mul9(word), 24)); + #else + DWORD word = LE32(((DWORD *) state)[i]); + ((DWORD *) state)[i] = LE32(MulE(word) ^ ROR32(MulB(word), 8) ^ ROR32(MulD(word), 16) ^ ROR32(Mul9(word), 24)); + #endif + } +} + + +static DWORD SubDword(DWORD v) +{ + BYTE *b = (BYTE *)&v; + uint_fast8_t i = 0; + + for (; i < sizeof(DWORD); i++) b[i] = SBox[b[i]]; + + return v; +} + + +void AesInitKey(AesCtx *Ctx, const BYTE *Key, int_fast8_t IsV6, int RijndaelKeyBytes) +{ + int RijndaelKeyDwords = RijndaelKeyBytes / sizeof(DWORD); + Ctx->rounds = (uint_fast8_t)(RijndaelKeyDwords + 6); + + static const DWORD RCon[] = { + 0x00000000, 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, + 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000 }; + + uint_fast8_t i; + DWORD temp; + + memcpy(Ctx->Key, Key, RijndaelKeyBytes); + + for ( i = RijndaelKeyDwords; i < ( Ctx->rounds + 1 ) << 2; i++ ) + { + temp = Ctx->Key[ i - 1 ]; + + if ( ( i % RijndaelKeyDwords ) == 0 ) + temp = BE32( SubDword( ROR32( BE32(temp), 24) ) ^ RCon[ i / RijndaelKeyDwords ] ); + + Ctx->Key[ i ] = Ctx->Key[ i - RijndaelKeyDwords ] ^ temp; + } + + if ( IsV6 ) + { + BYTE *_p = (BYTE *)Ctx->Key; + + _p[ 4 * 16 ] ^= 0x73; + _p[ 6 * 16 ] ^= 0x09; + _p[ 8 * 16 ] ^= 0xE4; + } +} + + +#if !defined(_CRYPTO_OPENSSL) || !defined(_USE_AES_FROM_OPENSSL) || defined(_OPENSSL_SOFTWARE) +static void SubBytes(BYTE *block) +{ + uint_fast8_t i; + + for (i = 0; i < AES_BLOCK_BYTES; i++) + block[i] = SBox[ block[i] ]; +} + + +static void ShiftRows(BYTE *state) +{ + BYTE bIn[AES_BLOCK_BYTES]; + uint_fast8_t i; + + memcpy(bIn, state, AES_BLOCK_BYTES); + for (i = 0; i < AES_BLOCK_BYTES; i++) + { + state[i] = bIn[(i + ((i & 3) << 2)) & 0xf]; + } +}; + + +static void MixColumns(BYTE *state) +{ + uint_fast8_t i = 0; + for (; i < AES_BLOCK_WORDS; i++) + { + DWORD word = LE32(((DWORD *) state)[i]); + ((DWORD *) state)[i] = LE32(Mul2(word) ^ ROR32(Mul3(word), 8) ^ ROR32(word, 16) ^ ROR32(word, 24)); + } +} + + +void AesEncryptBlock(const AesCtx *const Ctx, BYTE *block) +{ + uint_fast8_t i; + + for ( i = 0 ;; i += 4 ) + { + AddRoundKey(block, &Ctx->Key[ i ]); + SubBytes(block); + ShiftRows(block); + + if ( i >= ( Ctx->rounds - 1 ) << 2 ) break; + + MixColumns(block); + } + + AddRoundKey(block, &Ctx->Key[ Ctx->rounds << 2 ]); +} + + +void AesCmacV4(BYTE *Message, size_t MessageSize, BYTE *MacOut) +{ + size_t i; + BYTE mac[AES_BLOCK_BYTES]; + AesCtx Ctx; + + AesInitKey(&Ctx, AesKeyV4, FALSE, V4_KEY_BYTES); + + memset(mac, 0, sizeof(mac)); + memset(Message + MessageSize, 0, AES_BLOCK_BYTES); + Message[MessageSize] = 0x80; + + for (i = 0; i <= MessageSize; i += AES_BLOCK_BYTES) + { + XorBlock(Message + i, mac); + AesEncryptBlock(&Ctx, mac); + } + + memcpy(MacOut, mac, AES_BLOCK_BYTES); +} +#endif + +#if !defined(_CRYPTO_OPENSSL) || !defined(_USE_AES_FROM_OPENSSL) + +static const BYTE SBoxR[] = { + 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, + 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, + 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, 0x54, 0x7B, 0x94, 0x32, + 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, + 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, + 0x6D, 0x8B, 0xD1, 0x25, 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, + 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, 0x6C, 0x70, 0x48, 0x50, + 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, + 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, + 0xB8, 0xB3, 0x45, 0x06, 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, + 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, 0x3A, 0x91, 0x11, 0x41, + 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, + 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, + 0x1C, 0x75, 0xDF, 0x6E, 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, + 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, 0xFC, 0x56, 0x3E, 0x4B, + 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, + 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, + 0x27, 0x80, 0xEC, 0x5F, 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, + 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, 0xA0, 0xE0, 0x3B, 0x4D, + 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, + 0x55, 0x21, 0x0C, 0x7D +}; + + +static void ShiftRowsR(BYTE *state) +{ + BYTE b[AES_BLOCK_BYTES]; + uint_fast8_t i; + + memcpy(b, state, AES_BLOCK_BYTES); + + for (i = 0; i < AES_BLOCK_BYTES; i++) + state[i] = b[(i - ((i & 0x3) << 2)) & 0xf]; +} + + +static void SubBytesR(BYTE *block) +{ + uint_fast8_t i; + + for (i = 0; i < AES_BLOCK_BYTES; i++) + block[i] = SBoxR[ block[i] ]; +} + + +void AesEncryptCbc(const AesCtx *const Ctx, BYTE *restrict iv, BYTE *restrict data, size_t *restrict len) +{ + // Pad up to blocksize inclusive + size_t i; + uint_fast8_t pad = (~*len & (AES_BLOCK_BYTES - 1)) + 1; + + #if defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ == 8) // gcc 4.8 memset bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56977 + for (i = 0; i < pad; i++) data[*len + i] = pad; + #else + memset(data + *len, pad, pad); + #endif + *len += pad; + + if ( iv ) XorBlock(iv, data); + AesEncryptBlock(Ctx, data); + + for (i = *len - AES_BLOCK_BYTES; i; i -= AES_BLOCK_BYTES) + { + XorBlock(data, data + AES_BLOCK_BYTES); + data += AES_BLOCK_BYTES; + AesEncryptBlock(Ctx, data); + } +} + + +void AesDecryptBlock(const AesCtx *const Ctx, BYTE *block) +{ + uint_fast8_t i; + + AddRoundKey(block, &Ctx->Key[ Ctx->rounds << 2 ]); + + for ( i = ( Ctx->rounds - 1 ) << 2 ;; i -= 4 ) + { + ShiftRowsR(block); + SubBytesR(block); + AddRoundKey(block, &Ctx->Key[ i ]); + + if ( i == 0 ) break; + + MixColumnsR(block); + } +} + + +void AesDecryptCbc(const AesCtx *const Ctx, BYTE *iv, BYTE *data, size_t len) +{ + BYTE *cc; + + for (cc = data + len - AES_BLOCK_BYTES; cc > data; cc -= AES_BLOCK_BYTES) + { + AesDecryptBlock(Ctx, cc); + XorBlock(cc - AES_BLOCK_BYTES, cc); + } + + AesDecryptBlock(Ctx, cc); + if ( iv ) XorBlock(iv, cc); +} +#endif // _CRYPTO_OPENSSL || OPENSSL_VERSION_NUMBER < 0x10000000L +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include +#include +#include +#include +#include +#if !defined(_WIN32) +#include +#endif + +#include "output.h" +#include "crypto.h" +#include "endian.h" +#include "kms.h" +#include "shared_globals.h" +#include "helpers.h" + +#define FRIENDLY_NAME_WINDOWS "Windows" +#define FRIENDLY_NAME_OFFICE2010 "Office 2010" +#define FRIENDLY_NAME_OFFICE2013 "Office" + +#ifndef NO_BASIC_PRODUCT_LIST +// Do not change the order of this list. Append items as necessary +const KmsIdList ProductList[] = { + /* 000 */ { { 0x212a64dc, 0x43b1, 0x4d3d, { 0xa3, 0x0c, 0x2f, 0xc6, 0x9d, 0x20, 0x95, 0xc6 } } /*"212a64dc-43b1-4d3d-a30c-2fc69d2095c6"*/, "Vista", EPID_WINDOWS, 4, 25 }, + /* 001 */ { { 0x7fde5219, 0xfbfa, 0x484a, { 0x82, 0xc9, 0x34, 0xd1, 0xad, 0x53, 0xe8, 0x56 } } /*"7fde5219-fbfa-484a-82c9-34d1ad53e856"*/, "Windows 7", EPID_WINDOWS, 4, 25 }, + /* 002 */ { { 0x3c40b358, 0x5948, 0x45af, { 0x92, 0x3b, 0x53, 0xd2, 0x1f, 0xcc, 0x7e, 0x79 } } /*"3c40b358-5948-45af-923b-53d21fcc7e79"*/, "Windows 8 VL", EPID_WINDOWS, 5, 25 }, + /* 003 */ { { 0x5f94a0bb, 0xd5a0, 0x4081, { 0xa6, 0x85, 0x58, 0x19, 0x41, 0x8b, 0x2f, 0xe0 } } /*"5f94a0bb-d5a0-4081-a685-5819418b2fe0"*/, "Windows Preview", EPID_WINDOWS, 6, 25 }, + /* 004 */ { { 0xbbb97b3b, 0x8ca4, 0x4a28, { 0x97, 0x17, 0x89, 0xfa, 0xbd, 0x42, 0xc4, 0xac } } /*"bbb97b3b-8ca4-4a28-9717-89fabd42c4ac"*/, "Windows 8 Retail", EPID_WINDOWS, 5, 25 }, + /* 005 */ { { 0xcb8fc780, 0x2c05, 0x495a, { 0x97, 0x10, 0x85, 0xaf, 0xff, 0xc9, 0x04, 0xd7 } } /*"cb8fc780-2c05-495a-9710-85afffc904d7"*/, "Windows 8.1 VL", EPID_WINDOWS, 6, 25 }, + /* 006 */ { { 0x6d646890, 0x3606, 0x461a, { 0x86, 0xab, 0x59, 0x8b, 0xb8, 0x4a, 0xce, 0x82 } } /*"6d646890-3606-461a-86ab-598bb84ace82"*/, "Windows 8.1 Retail", EPID_WINDOWS, 6, 25 }, + /* 007 */ { { 0x33e156e4, 0xb76f, 0x4a52, { 0x9f, 0x91, 0xf6, 0x41, 0xdd, 0x95, 0xac, 0x48 } } /*"33e156e4-b76f-4a52-9f91-f641dd95ac48"*/, "Windows 2008 A", EPID_WINDOWS, 4, 5 }, + /* 008 */ { { 0x8fe53387, 0x3087, 0x4447, { 0x89, 0x85, 0xf7, 0x51, 0x32, 0x21, 0x5a, 0xc9 } } /*"8fe53387-3087-4447-8985-f75132215ac9"*/, "Windows 2008 B", EPID_WINDOWS, 4, 5 }, + /* 009 */ { { 0x8a21fdf3, 0xcbc5, 0x44eb, { 0x83, 0xf3, 0xfe, 0x28, 0x4e, 0x66, 0x80, 0xa7 } } /*"8a21fdf3-cbc5-44eb-83f3-fe284e6680a7"*/, "Windows 2008 C", EPID_WINDOWS, 4, 5 }, + /* 010 */ { { 0x0fc6ccaf, 0xff0e, 0x4fae, { 0x9d, 0x08, 0x43, 0x70, 0x78, 0x5b, 0xf7, 0xed } } /*"0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed"*/, "Windows 2008 R2 A", EPID_WINDOWS, 4, 5 }, + /* 011 */ { { 0xca87f5b6, 0xcd46, 0x40c0, { 0xb0, 0x6d, 0x8e, 0xcd, 0x57, 0xa4, 0x37, 0x3f } } /*"ca87f5b6-cd46-40c0-b06d-8ecd57a4373f"*/, "Windows 2008 R2 B", EPID_WINDOWS, 4, 5 }, + /* 012 */ { { 0xb2ca2689, 0xa9a8, 0x42d7, { 0x93, 0x8d, 0xcf, 0x8e, 0x9f, 0x20, 0x19, 0x58 } } /*"b2ca2689-a9a8-42d7-938d-cf8e9f201958"*/, "Windows 2008 R2 C", EPID_WINDOWS, 4, 5 }, + /* 013 */ { { 0x8665cb71, 0x468c, 0x4aa3, { 0xa3, 0x37, 0xcb, 0x9b, 0xc9, 0xd5, 0xea, 0xac } } /*"8665cb71-468c-4aa3-a337-cb9bc9d5eaac"*/, "Windows 2012", EPID_WINDOWS, 5, 5 }, + /* 014 */ { { 0x8456EFD3, 0x0C04, 0x4089, { 0x87, 0x40, 0x5b, 0x72, 0x38, 0x53, 0x5a, 0x65 } } /*"8456EFD3-0C04-4089-8740-5B7238535A65"*/, "Windows 2012 R2", EPID_WINDOWS, 6, 5 }, + /* 015 */ { { 0xe85af946, 0x2e25, 0x47b7, { 0x83, 0xe1, 0xbe, 0xbc, 0xeb, 0xea, 0xc6, 0x11 } } /*"e85af946-2e25-47b7-83e1-bebcebeac611"*/, "Office 2010", EPID_OFFICE2010, 4, 5 }, + /* 016 */ { { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } /*"e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0"*/, "Office 2013", EPID_OFFICE2013, 6, 5 }, + /* 017 */ { { 0x6d5f5270, 0x31ac, 0x433e, { 0xb9, 0x0a, 0x39, 0x89, 0x29, 0x23, 0xc6, 0x57 } } /*"6d5f5270-31ac-433e-b90a-39892923c657"*/, "Windows Server Preview", EPID_WINDOWS, 6, 5 }, + /* 018 */ { { 0x85b5f61b, 0x320b, 0x4be3, { 0x81, 0x4a, 0xb7, 0x6b, 0x2b, 0xfa, 0xfc, 0x82 } } /*"85b5f61b-320b-4be3-814a-b76b2bfafc82"*/, "Office 2016", EPID_OFFICE2013, 6, 5 }, + /* 019 */ { { 0x58e2134f, 0x8e11, 0x4d17, { 0x9c, 0xb2, 0x91, 0x06, 0x9c, 0x15, 0x11, 0x48 } } /*"58e2134f-8e11-4d17-9cb2-91069c151148"*/, "Windows 10 VL", EPID_WINDOWS, 6, 25 }, + /* 020 */ { { 0xe1c51358, 0xfe3e, 0x4203, { 0xa4, 0xa2, 0x3b, 0x6b, 0x20, 0xc9, 0x73, 0x4e } } /*"e1c51358-fe3e-4203-a4a2-3b6b20c9734e"*/, "Windows 10 Retail", EPID_WINDOWS, 6, 25 }, + /* 021 */ { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 } +}; +#endif + +// Application ID is used by KMS server to count KeyManagementServiceCurrentCount +// Do not change the order of this list. Append items as necessary +const KmsIdList AppList[] = { + /* 000 */ { { 0x55c92734, 0xd682, 0x4d71, { 0x98, 0x3e, 0xd6, 0xec, 0x3f, 0x16, 0x05, 0x9f } } /*"55C92734-D682-4D71-983E-D6EC3F16059F"*/, FRIENDLY_NAME_WINDOWS, EPID_WINDOWS, 0, 0}, + /* 001 */ { { 0x59A52881, 0xa989, 0x479d, { 0xaf, 0x46, 0xf2, 0x75, 0xc6, 0x37, 0x06, 0x63 } } /*"59A52881-A989-479D-AF46-F275C6370663"*/, FRIENDLY_NAME_OFFICE2010, EPID_OFFICE2010, 0, 0}, + /* 002 */ { { 0x0FF1CE15, 0xA989, 0x479D, { 0xaf, 0x46, 0xf2, 0x75, 0xc6, 0x37, 0x06, 0x63 } } /*"0FF1CE15-A989-479D-AF46-F275C6370663"*/, FRIENDLY_NAME_OFFICE2013, EPID_OFFICE2013, 0, 0}, + /* 003 */ { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 } +}; + +#ifndef NO_EXTENDED_PRODUCT_LIST +const KmsIdList ExtendedProductList [] = { + + // Windows Server + + { { 0xad2542d4, 0x9154, 0x4c6d, { 0x8a, 0x44, 0x30, 0xf1, 0x1e, 0xe9, 0x69, 0x89, } } /*ad2542d4-9154-4c6d-8a44-30f11ee96989*/, "Windows Server 2008 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, + { { 0x2401e3d0, 0xc50a, 0x4b58, { 0x87, 0xb2, 0x7e, 0x79, 0x4b, 0x7d, 0x26, 0x07, } } /*2401e3d0-c50a-4b58-87b2-7e794b7d2607*/, "Windows Server 2008 Standard V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, + { { 0x68b6e220, 0xcf09, 0x466b, { 0x92, 0xd3, 0x45, 0xcd, 0x96, 0x4b, 0x95, 0x09, } } /*68b6e220-cf09-466b-92d3-45cd964b9509*/, "Windows Server 2008 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + { { 0xfd09ef77, 0x5647, 0x4eff, { 0x80, 0x9c, 0xaf, 0x2b, 0x64, 0x65, 0x9a, 0x45, } } /*fd09ef77-5647-4eff-809c-af2b64659a45*/, "Windows Server 2008 Datacenter V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + { { 0xc1af4d90, 0xd1bc, 0x44ca, { 0x85, 0xd4, 0x00, 0x3b, 0xa3, 0x3d, 0xb3, 0xb9, } } /*c1af4d90-d1bc-44ca-85d4-003ba33db3b9*/, "Windows Server 2008 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B }, + { { 0x8198490a, 0xadd0, 0x47b2, { 0xb3, 0xba, 0x31, 0x6b, 0x12, 0xd6, 0x47, 0xb4, } } /*8198490a-add0-47b2-b3ba-316b12d647b4*/, "Windows Server 2008 Enterprise V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B }, + { { 0xddfa9f7c, 0xf09e, 0x40b9, { 0x8c, 0x1a, 0xbe, 0x87, 0x7a, 0x9a, 0x7f, 0x4b, } } /*ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b*/, "Windows Server 2008 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, + { { 0x7afb1156, 0x2c1d, 0x40fc, { 0xb2, 0x60, 0xaa, 0xb7, 0x44, 0x2b, 0x62, 0xfe, } } /*7afb1156-2c1d-40fc-b260-aab7442b62fe*/, "Windows Server 2008 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + { { 0x68531fb9, 0x5511, 0x4989, { 0x97, 0xbe, 0xd1, 0x1a, 0x0f, 0x55, 0x63, 0x3f, } } /*68531fb9-5511-4989-97be-d11a0f55633f*/, "Windows Server 2008 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A }, + { { 0x7482e61b, 0xc589, 0x4b7f, { 0x8e, 0xcc, 0x46, 0xd4, 0x55, 0xac, 0x3b, 0x87, } } /*7482e61b-c589-4b7f-8ecc-46d455ac3b87*/, "Windows Server 2008 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C }, + { { 0x620e2b3d, 0x09e7, 0x42fd, { 0x80, 0x2a, 0x17, 0xa1, 0x36, 0x52, 0xfe, 0x7a, } } /*620e2b3d-09e7-42fd-802a-17a13652fe7a*/, "Windows Server 2008 R2 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2B }, + { { 0xa78b8bd9, 0x8017, 0x4df5, { 0xb8, 0x6a, 0x09, 0xf7, 0x56, 0xaf, 0xfa, 0x7c, } } /*a78b8bd9-8017-4df5-b86a-09f756affa7c*/, "Windows Server 2008 R2 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A }, + { { 0xcda18cf3, 0xc196, 0x46ad, { 0xb2, 0x89, 0x60, 0xc0, 0x72, 0x86, 0x99, 0x94, } } /*cda18cf3-c196-46ad-b289-60c072869994*/, "Windows Server 2008 R2 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C }, + { { 0xd3643d60, 0x0c42, 0x412d, { 0xa7, 0xd6, 0x52, 0xe6, 0x63, 0x53, 0x27, 0xf6, } } /*d3643d60-0c42-412d-a7d6-52e6635327f6*/, "Windows Server 2012 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0xf0f5ec41, 0x0d55, 0x4732, { 0xaf, 0x02, 0x44, 0x0a, 0x44, 0xa3, 0xcf, 0x0f, } } /*f0f5ec41-0d55-4732-af02-440a44a3cf0f*/, "Windows Server 2012 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0x95fd1c83, 0x7df5, 0x494a, { 0xbe, 0x8b, 0x13, 0x00, 0xe1, 0xc9, 0xd1, 0xcd, } } /*95fd1c83-7df5-494a-be8b-1300e1c9d1cd*/, "Windows Server 2012 MultiPoint Premium", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0x7d5486c7, 0xe120, 0x4771, { 0xb7, 0xf1, 0x7b, 0x56, 0xc6, 0xd3, 0x17, 0x0c, } } /*7d5486c7-e120-4771-b7f1-7b56c6d3170c*/, "Windows Server 2012 MultiPoint Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0x00091344, 0x1ea4, 0x4f37, { 0xb7, 0x89, 0x01, 0x75, 0x0b, 0xa6, 0x98, 0x8c, } } /*00091344-1ea4-4f37-b789-01750ba6988c*/, "Windows Server 2012 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0xb3ca044e, 0xa358, 0x4d68, { 0x98, 0x83, 0xaa, 0xa2, 0x94, 0x1a, 0xca, 0x99, } } /*b3ca044e-a358-4d68-9883-aaa2941aca99*/, "Windows Server 2012 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0xb743a2be, 0x68d4, 0x4dd3, { 0xaf, 0x32, 0x92, 0x42, 0x5b, 0x7b, 0xb6, 0x23, } } /*b743a2be-68d4-4dd3-af32-92425b7bb623*/, "Windows Server 2012 R2 Cloud Storage", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0x21db6ba4, 0x9a7b, 0x4a14, { 0x9e, 0x29, 0x64, 0xa6, 0x0c, 0x59, 0x30, 0x1d, } } /*21db6ba4-9a7b-4a14-9e29-64a60c59301d*/, "Windows Server 2012 R2 Essentials", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0xba947c44, 0xd19d, 0x4786, { 0xb6, 0xae, 0x22, 0x77, 0x0b, 0xc9, 0x4c, 0x54, } } /*ba947c44-d19d-4786-b6ae-22770bc94c54*/, "Windows Server 2016 Datacenter Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_SRV_BETA }, + + + // Windows 10 Preview +# ifdef INCLUDE_BETAS + { { 0x6496e59d, 0x89dc, 0x49eb, { 0xa3, 0x53, 0x09, 0xce, 0xb9, 0x40, 0x48, 0x45, } } /*6496e59d-89dc-49eb-a353-09ceb9404845*/, "Windows 10 Core Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0xa4383e6b, 0xdada, 0x423d, { 0xa4, 0x3d, 0xf2, 0x56, 0x78, 0x42, 0x96, 0x76, } } /*a4383e6b-dada-423d-a43d-f25678429676*/, "Windows 10 Professional Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0xcf59a07b, 0x1a2a, 0x4be0, { 0xbf, 0xe0, 0x42, 0x3b, 0x58, 0x23, 0xe6, 0x63, } } /*cf59a07b-1a2a-4be0-bfe0-423b5823e663*/, "Windows 10 Professional WMC Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0xcde952c7, 0x2f96, 0x4d9d, { 0x8f, 0x2b, 0x2d, 0x34, 0x9f, 0x64, 0xfc, 0x51, } } /*cde952c7-2f96-4d9d-8f2b-2d349f64fc51*/, "Windows 10 Enterprise Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, +# endif + + + // Windows 10 + + { { 0x73111121, 0x5638, 0x40f6, { 0xbc, 0x11, 0xf1, 0xd7, 0xb0, 0xd6, 0x43, 0x00, } } /*73111121-5638-40f6-bc11-f1d7b0d64300*/, "Windows 10 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0xe272e3e2, 0x732f, 0x4c65, { 0xa8, 0xf0, 0x48, 0x47, 0x47, 0xd0, 0xd9, 0x47, } } /*e272e3e2-732f-4c65-a8f0-484747d0d947*/, "Windows 10 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x7b51a46c, 0x0c04, 0x4e8f, { 0x9a, 0xf4, 0x84, 0x96, 0xcc, 0xa9, 0x0d, 0x5e, } } /*7b51a46c-0c04-4e8f-9af4-8496cca90d5e*/, "Windows 10 Enterprise LTSB", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x87b838b7, 0x41b6, 0x4590, { 0x83, 0x18, 0x57, 0x97, 0x95, 0x1d, 0x85, 0x29, } } /*87b838b7-41b6-4590-8318-5797951d8529*/, "Windows 10 Enterprise LTSB N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0xe0c42288, 0x980c, 0x4788, { 0xa0, 0x14, 0xc0, 0x80, 0xd2, 0xe1, 0x92, 0x6e, } } /*e0c42288-980c-4788-a014-c080d2e1926e*/, "Windows 10 Education", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x3c102355, 0xd027, 0x42c6, { 0xad, 0x23, 0x2e, 0x7e, 0xf8, 0xa0, 0x25, 0x85, } } /*3c102355-d027-42c6-ad23-2e7ef8a02585*/, "Windows 10 Education N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x2de67392, 0xb7a7, 0x462a, { 0xb1, 0xca, 0x10, 0x8d, 0xd1, 0x89, 0xf5, 0x88, } } /*2de67392-b7a7-462a-b1ca-108dd189f588*/, "Windows 10 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0xa80b5abf, 0x75ad, 0x428b, { 0xb0, 0x5d, 0xa4, 0x7d, 0x2d, 0xff, 0xee, 0xbf, } } /*a80b5abf-76ad-428b-b05d-a47d2dffeebf*/, "Windows 10 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x58e97c99, 0xf377, 0x4ef1, { 0x81, 0xd5, 0x4a, 0xd5, 0x52, 0x2b, 0x5f, 0xd8, } } /*58e97c99-f377-4ef1-81d5-4ad5522b5fd8*/, "Windows 10 Home", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + { { 0x7b9e1751, 0xa8da, 0x4f75, { 0x95, 0x60, 0x5f, 0xad, 0xfe, 0x3d, 0x8e, 0x38, } } /*7b9e1751-a8da-4f75-9560-5fadfe3d8e38*/, "Windows 10 Home N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + { { 0xcd918a57, 0xa41b, 0x4c82, { 0x8d, 0xce, 0x1a, 0x53, 0x8e, 0x22, 0x1a, 0x83, } } /*cd918a57-a41b-4c82-8dce-1a538e221a83*/, "Windows 10 Home Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + { { 0xa9107544, 0xf4a0, 0x4053, { 0xa9, 0x6a, 0x14, 0x79, 0xab, 0xde, 0xf9, 0x12, } } /*a9107544-f4a0-4053-a96a-1479abdef912*/, "Windows 10 Home Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + + + // Windows 8.x + +# ifdef INCLUDE_BETAS + { { 0x2B9C337F, 0x7A1D, 0x4271, { 0x90, 0xA3, 0xC6, 0x85, 0x5A, 0x2B, 0x8A, 0x1C, } } /*2B9C337F-7A1D-4271-90A3-C6855A2B8A1C*/, "Windows 8.x Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0x631EAD72, 0xA8AB, 0x4DF8, { 0xBB, 0xDF, 0x37, 0x20, 0x29, 0x98, 0x9B, 0xDD, } } /*631EAD72-A8AB-4DF8-BBDF-372029989BDD*/, "Windows 8.x Preview ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, +# endif + { { 0x81671aaf, 0x79d1, 0x4eb1, { 0xb0, 0x04, 0x8c, 0xbb, 0xe1, 0x73, 0xaf, 0xea, } } /*81671aaf-79d1-4eb1-b004-8cbbe173afea*/, "Windows 8.1 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0x113e705c, 0xfa49, 0x48a4, { 0xbe, 0xea, 0x7d, 0xd8, 0x79, 0xb4, 0x6b, 0x14, } } /*113e705c-fa49-48a4-beea-7dd879b46b14*/, "Windows 8.1 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0x096ce63d, 0x4fac, 0x48a9, { 0x82, 0xa9, 0x61, 0xae, 0x9e, 0x80, 0x0e, 0x5f, } } /*096ce63d-4fac-48a9-82a9-61ae9e800e5f*/, "Windows 8.1 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xc06b6981, 0xd7fd, 0x4a35, { 0xb7, 0xb4, 0x05, 0x47, 0x42, 0xb7, 0xaf, 0x67, } } /*c06b6981-d7fd-4a35-b7b4-054742b7af67*/, "Windows 8.1 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0x7476d79f, 0x8e48, 0x49b4, { 0xab, 0x63, 0x4d, 0x0b, 0x81, 0x3a, 0x16, 0xe4, } } /*7476d79f-8e48-49b4-ab63-4d0b813a16e4*/, "Windows 8.1 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xfe1c3238, 0x432a, 0x43a1, { 0x8e, 0x25, 0x97, 0xe7, 0xd1, 0xef, 0x10, 0xf3, } } /*fe1c3238-432a-43a1-8e25-97e7d1ef10f3*/, "Windows 8.1 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0x78558a64, 0xdc19, 0x43fe, { 0xa0, 0xd0, 0x80, 0x75, 0xb2, 0xa3, 0x70, 0xa3, } } /*78558a64-dc19-43fe-a0d0-8075b2a370a3*/, "Windows 8.1 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xffee456a, 0xcd87, 0x4390, { 0x8e, 0x07, 0x16, 0x14, 0x6c, 0x67, 0x2f, 0xd0, } } /*ffee456a-cd87-4390-8e07-16146c672fd0*/, "Windows 8.1 Core ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xc72c6a1d, 0xf252, 0x4e7e, { 0xbd, 0xd1, 0x3f, 0xca, 0x34, 0x2a, 0xcb, 0x35, } } /*c72c6a1d-f252-4e7e-bdd1-3fca342acb35*/, "Windows 8.1 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xdb78b74f, 0xef1c, 0x4892, { 0xab, 0xfe, 0x1e, 0x66, 0xb8, 0x23, 0x1d, 0xf6, } } /*db78b74f-ef1c-4892-abfe-1e66b8231df6*/, "Windows 8.1 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xe9942b32, 0x2e55, 0x4197, { 0xb0, 0xbd, 0x5f, 0xf5, 0x8c, 0xba, 0x88, 0x60, } } /*e9942b32-2e55-4197-b0bd-5ff58cba8860*/, "Windows 8.1 Core Connected", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xc6ddecd6, 0x2354, 0x4c19, { 0x90, 0x9b, 0x30, 0x6a, 0x30, 0x58, 0x48, 0x4e, } } /*c6ddecd6-2354-4c19-909b-306a3058484e*/, "Windows 8.1 Core Connected N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xb8f5e3a3, 0xed33, 0x4608, { 0x81, 0xe1, 0x37, 0xd6, 0xc9, 0xdc, 0xfd, 0x9c, } } /*b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c*/, "Windows 8.1 Core Connected Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xba998212, 0x460a, 0x44db, { 0xbf, 0xb5, 0x71, 0xbf, 0x09, 0xd1, 0xc6, 0x8b, } } /*ba998212-460a-44db-bfb5-71bf09d1c68b*/, "Windows 8.1 Core Connected Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xe58d87b5, 0x8126, 0x4580, { 0x80, 0xfb, 0x86, 0x1b, 0x22, 0xf7, 0x92, 0x96, } } /*e58d87b5-8126-4580-80fb-861b22f79296*/, "Windows 8.1 Professional Student", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xcab491c7, 0xa918, 0x4f60, { 0xb5, 0x02, 0xda, 0xb7, 0x5e, 0x33, 0x4f, 0x40, } } /*cab491c7-a918-4f60-b502-dab75e334f40*/, "Windows 8.1 Professional Student N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xa00018a3, 0xf20f, 0x4632, { 0xbf, 0x7c, 0x8d, 0xaa, 0x53, 0x51, 0xc9, 0x14, } } /*a00018a3-f20f-4632-bf7c-8daa5351c914*/, "Windows 8 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0xa98bcd6d, 0x5343, 0x4603, { 0x8a, 0xfe, 0x59, 0x08, 0xe4, 0x61, 0x11, 0x12, } } /*a98bcd6d-5343-4603-8afe-5908e4611112*/, "Windows 8 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0xebf245c1, 0x29a8, 0x4daf, { 0x9c, 0xb1, 0x38, 0xdf, 0xc6, 0x08, 0xa8, 0xc8, } } /*ebf245c1-29a8-4daf-9cb1-38dfc608a8c8*/, "Windows 8 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0x458e1bec, 0x837a, 0x45f6, { 0xb9, 0xd5, 0x92, 0x5e, 0xd5, 0xd2, 0x99, 0xde, } } /*458e1bec-837a-45f6-b9d5-925ed5d299de*/, "Windows 8 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0xe14997e7, 0x800a, 0x4cf7, { 0xad, 0x10, 0xde, 0x4b, 0x45, 0xb5, 0x78, 0xdb, } } /*e14997e7-800a-4cf7-ad10-de4b45b578db*/, "Windows 8 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0xc04ed6bf, 0x55c8, 0x4b47, { 0x9f, 0x8e, 0x5a, 0x1f, 0x31, 0xce, 0xee, 0x60, } } /*c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60*/, "Windows 8 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0x197390a0, 0x65f6, 0x4a95, { 0xbd, 0xc4, 0x55, 0xd5, 0x8a, 0x3b, 0x02, 0x53, } } /*197390a0-65f6-4a95-bdc4-55d58a3b0253*/, "Windows 8 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0x9d5584a2, 0x2d85, 0x419a, { 0x98, 0x2c, 0xa0, 0x08, 0x88, 0xbb, 0x9d, 0xdf, } } /*9d5584a2-2d85-419a-982c-a00888bb9ddf*/, "Windows 8 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0x8860fcd4, 0xa77b, 0x4a20, { 0x90, 0x45, 0xa1, 0x50, 0xff, 0x11, 0xd6, 0x09, } } /*8860fcd4-a77b-4a20-9045-a150ff11d609*/, "Windows 8 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + + + // Windows 7 + + { { 0xae2ee509, 0x1b34, 0x41c0, { 0xac, 0xb7, 0x6d, 0x46, 0x50, 0x16, 0x89, 0x15, } } /*ae2ee509-1b34-41c0-acb7-6d4650168915*/, "Windows 7 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x1cb6d605, 0x11b3, 0x4e14, { 0xbb, 0x30, 0xda, 0x91, 0xc8, 0xe3, 0x98, 0x3a, } } /*1cb6d605-11b3-4e14-bb30-da91c8e3983a*/, "Windows 7 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0xb92e9980, 0xb9d5, 0x4821, { 0x9c, 0x94, 0x14, 0x0f, 0x63, 0x2f, 0x63, 0x12, } } /*b92e9980-b9d5-4821-9c94-140f632f6312*/, "Windows 7 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x54a09a0d, 0xd57b, 0x4c10, { 0x8b, 0x69, 0xa8, 0x42, 0xd6, 0x59, 0x0a, 0xd5, } } /*54a09a0d-d57b-4c10-8b69-a842d6590ad5*/, "Windows 7 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + + + // Windows Vista + + { { 0xcfd8ff08, 0xc0d7, 0x452b, { 0x9f, 0x60, 0xef, 0x5c, 0x70, 0xc3, 0x20, 0x94, } } /*cfd8ff08-c0d7-452b-9f60-ef5c70c32094*/, "Windows Vista Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + { { 0xd4f54950, 0x26f2, 0x4fb4, { 0xba, 0x21, 0xff, 0xab, 0x16, 0xaf, 0xca, 0xde, } } /*d4f54950-26f2-4fb4-ba21-ffab16afcade*/, "Windows Vista Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + { { 0x4f3d1606, 0x3fea, 0x4c01, { 0xbe, 0x3c, 0x8d, 0x67, 0x1c, 0x40, 0x1e, 0x3b, } } /*4f3d1606-3fea-4c01-be3c-8d671c401e3b*/, "Windows Vista Business", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + { { 0x2c682dc2, 0x8b68, 0x4f63, { 0xa1, 0x65, 0xae, 0x29, 0x1d, 0x4c, 0xf1, 0x38, } } /*2c682dc2-8b68-4f63-a165-ae291d4cf138*/, "Windows Vista Business N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + + + // Windows Embedded + + { { 0xaa6dd3aa, 0xc2b4, 0x40e2, { 0xa5, 0x44, 0xa6, 0xbb, 0xb3, 0xf5, 0xc3, 0x95, } } /*aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395*/, "Windows ThinPC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0xdb537896, 0x376f, 0x48ae, { 0xa4, 0x92, 0x53, 0xd0, 0x54, 0x77, 0x73, 0xd0, } } /*db537896-376f-48ae-a492-53d0547773d0*/, "Windows Embedded POSReady 7", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x0ab82d54, 0x47f4, 0x4acb, { 0x81, 0x8c, 0xcc, 0x5b, 0xf0, 0xec, 0xb6, 0x49, } } /*0ab82d54-47f4-4acb-818c-cc5bf0ecb649*/, "Windows Embedded Industry 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xcd4e2d9f, 0x5059, 0x4a50, { 0xa9, 0x2d, 0x05, 0xd5, 0xbb, 0x12, 0x67, 0xc7, } } /*cd4e2d9f-5059-4a50-a92d-05d5bb1267c7*/, "Windows Embedded Industry E 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xf7e88590, 0xdfc7, 0x4c78, { 0xbc, 0xcb, 0x6f, 0x38, 0x65, 0xb9, 0x9d, 0x1a, } } /*f7e88590-dfc7-4c78-bccb-6f3865b99d1a*/, "Windows Embedded Industry A 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + + // Office 2010 + + { { 0x8ce7e872, 0x188c, 0x4b98, { 0x9d, 0x90, 0xf8, 0xf9, 0x0b, 0x7a, 0xad, 0x02, } } /*8ce7e872-188c-4b98-9d90-f8f90b7aad02*/, "Office Access 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xcee5d470, 0x6e3b, 0x4fcc, { 0x8c, 0x2b, 0xd1, 0x74, 0x28, 0x56, 0x8a, 0x9f, } } /*cee5d470-6e3b-4fcc-8c2b-d17428568a9f*/, "Office Excel 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x8947d0b8, 0xc33b, 0x43e1, { 0x8c, 0x56, 0x9b, 0x67, 0x4c, 0x05, 0x28, 0x32, } } /*8947d0b8-c33b-43e1-8c56-9b674c052832*/, "Office Groove 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xca6b6639, 0x4ad6, 0x40ae, { 0xa5, 0x75, 0x14, 0xde, 0xe0, 0x7f, 0x64, 0x30, } } /*ca6b6639-4ad6-40ae-a575-14dee07f6430*/, "Office InfoPath 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x09ed9640, 0xf020, 0x400a, { 0xac, 0xd8, 0xd7, 0xd8, 0x67, 0xdf, 0xd9, 0xc2, } } /*09ed9640-f020-400a-acd8-d7d867dfd9c2*/, "Office Mondo 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xef3d4e49, 0xa53d, 0x4d81, { 0xa2, 0xb1, 0x2c, 0xa6, 0xc2, 0x55, 0x6b, 0x2c, } } /*ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c*/, "Office Mondo 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xab586f5c, 0x5256, 0x4632, { 0x96, 0x2f, 0xfe, 0xfd, 0x8b, 0x49, 0xe6, 0xf4, } } /*ab586f5c-5256-4632-962f-fefd8b49e6f4*/, "Office OneNote 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xecb7c192, 0x73ab, 0x4ded, { 0xac, 0xf4, 0x23, 0x99, 0xb0, 0x95, 0xd0, 0xcc, } } /*ecb7c192-73ab-4ded-acf4-2399b095d0cc*/, "Office OutLook 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x45593b1d, 0xdfb1, 0x4e91, { 0xbb, 0xfb, 0x2d, 0x5d, 0x0c, 0xe2, 0x22, 0x7a, } } /*45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a*/, "Office PowerPoint 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xdf133ff7, 0xbf14, 0x4f95, { 0xaf, 0xe3, 0x7b, 0x48, 0xe7, 0xe3, 0x31, 0xef, } } /*df133ff7-bf14-4f95-afe3-7b48e7e331ef*/, "Office Project Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x5dc7bf61, 0x5ec9, 0x4996, { 0x9c, 0xcb, 0xdf, 0x80, 0x6a, 0x2d, 0x0e, 0xfe, } } /*5dc7bf61-5ec9-4996-9ccb-df806a2d0efe*/, "Office Project Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xb50c4f75, 0x599b, 0x43e8, { 0x8d, 0xcd, 0x10, 0x81, 0xa7, 0x96, 0x72, 0x41, } } /*b50c4f75-599b-43e8-8dcd-1081a7967241*/, "Office Publisher 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x92236105, 0xbb67, 0x494f, { 0x94, 0xc7, 0x7f, 0x7a, 0x60, 0x79, 0x29, 0xbd, } } /*92236105-bb67-494f-94c7-7f7a607929bd*/, "Office Visio Premium 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xe558389c, 0x83c3, 0x4b29, { 0xad, 0xfe, 0x5e, 0x4d, 0x7f, 0x46, 0xc3, 0x58, } } /*e558389c-83c3-4b29-adfe-5e4d7f46c358*/, "Office Visio Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x9ed833ff, 0x4f92, 0x4f36, { 0xb3, 0x70, 0x86, 0x83, 0xa4, 0xf1, 0x32, 0x75, } } /*9ed833ff-4f92-4f36-b370-8683a4f13275*/, "Office Visio Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x2d0882e7, 0xa4e7, 0x423b, { 0x8c, 0xcc, 0x70, 0xd9, 0x1e, 0x01, 0x58, 0xb1, } } /*2d0882e7-a4e7-423b-8ccc-70d91e0158b1*/, "Office Word 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x6f327760, 0x8c5c, 0x417c, { 0x9b, 0x61, 0x83, 0x6a, 0x98, 0x28, 0x7e, 0x0c, } } /*6f327760-8c5c-417c-9b61-836a98287e0c*/, "Office Professional Plus 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x9da2a678, 0xfb6b, 0x4e67, { 0xab, 0x84, 0x60, 0xdd, 0x6a, 0x9c, 0x81, 0x9a, } } /*9da2a678-fb6b-4e67-ab84-60dd6a9c819a*/, "Office Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xea509e87, 0x07a1, 0x4a45, { 0x9e, 0xdc, 0xeb, 0xa5, 0xa3, 0x9f, 0x36, 0xaf, } } /*ea509e87-07a1-4a45-9edc-eba5a39f36af*/, "Office Small Business Basics 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + + // Office 2013 + + { { 0x6ee7622c, 0x18d8, 0x4005, { 0x9f, 0xb7, 0x92, 0xdb, 0x64, 0x4a, 0x27, 0x9b, } } /*6ee7622c-18d8-4005-9fb7-92db644a279b*/, "Office Access 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xf7461d52, 0x7c2b, 0x43b2, { 0x87, 0x44, 0xea, 0x95, 0x8e, 0x0b, 0xd0, 0x9a, } } /*f7461d52-7c2b-43b2-8744-ea958e0bd09a*/, "Office Excel 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xa30b8040, 0xd68a, 0x423f, { 0xb0, 0xb5, 0x9c, 0xe2, 0x92, 0xea, 0x5a, 0x8f, } } /*a30b8040-d68a-423f-b0b5-9ce292ea5a8f*/, "Office InfoPath 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x1b9f11e3, 0xc85c, 0x4e1b, { 0xbb, 0x29, 0x87, 0x9a, 0xd2, 0xc9, 0x09, 0xe3, } } /*1b9f11e3-c85c-4e1b-bb29-879ad2c909e3*/, "Office Lync 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xdc981c6b, 0xfc8e, 0x420f, { 0xaa, 0x43, 0xf8, 0xf3, 0x3e, 0x5c, 0x09, 0x23, } } /*dc981c6b-fc8e-420f-aa43-f8f33e5c0923*/, "Office Mondo 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xefe1f3e6, 0xaea2, 0x4144, { 0xa2, 0x08, 0x32, 0xaa, 0x87, 0x2b, 0x65, 0x45, } } /*efe1f3e6-aea2-4144-a208-32aa872b6545*/, "Office OneNote 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x771c3afa, 0x50c5, 0x443f, { 0xb1, 0x51, 0xff, 0x25, 0x46, 0xd8, 0x63, 0xa0, } } /*771c3afa-50c5-443f-b151-ff2546d863a0*/, "Office OutLook 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x8c762649, 0x97d1, 0x4953, { 0xad, 0x27, 0xb7, 0xe2, 0xc2, 0x5b, 0x97, 0x2e, } } /*8c762649-97d1-4953-ad27-b7e2c25b972e*/, "Office PowerPoint 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x4a5d124a, 0xe620, 0x44ba, { 0xb6, 0xff, 0x65, 0x89, 0x61, 0xb3, 0x3b, 0x9a, } } /*4a5d124a-e620-44ba-b6ff-658961b33b9a*/, "Office Project Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x427a28d1, 0xd17c, 0x4abf, { 0xb7, 0x17, 0x32, 0xc7, 0x80, 0xba, 0x6f, 0x07, } } /*427a28d1-d17c-4abf-b717-32c780ba6f07*/, "Office Project Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x00c79ff1, 0x6850, 0x443d, { 0xbf, 0x61, 0x71, 0xcd, 0xe0, 0xde, 0x30, 0x5f, } } /*00c79ff1-6850-443d-bf61-71cde0de305f*/, "Office Publisher 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xac4efaf0, 0xf81f, 0x4f61, { 0xbd, 0xf7, 0xea, 0x32, 0xb0, 0x2a, 0xb1, 0x17, } } /*ac4efaf0-f81f-4f61-bdf7-ea32b02ab117*/, "Office Visio Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xe13ac10e, 0x75d0, 0x4aff, { 0xa0, 0xcd, 0x76, 0x49, 0x82, 0xcf, 0x54, 0x1c, } } /*e13ac10e-75d0-4aff-a0cd-764982cf541c*/, "Office Visio Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xd9f5b1c6, 0x5386, 0x495a, { 0x88, 0xf9, 0x9a, 0xd6, 0xb4, 0x1a, 0xc9, 0xb3, } } /*d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3*/, "Office Word 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } } /*b322da9c-a2e2-4058-9e4e-f59a6970bd69*/, "Office Professional Plus 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xb13afb38, 0xcd79, 0x4ae5, { 0x9f, 0x7f, 0xee, 0xd0, 0x58, 0xd7, 0x50, 0xca, } } /*b13afb38-cd79-4ae5-9f7f-eed058d750ca*/, "Office Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + + // Office 2016 + + { { 0xd450596f, 0x894d, 0x49e0, { 0x96, 0x6a, 0xfd, 0x39, 0xed, 0x4c, 0x4c, 0x64, } } /*d450596f-894d-49e0-966a-fd39ed4c4c64*/, "Office Professional Plus 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x4f414197, 0x0fc2, 0x4c01, { 0xb6, 0x8a, 0x86, 0xcb, 0xb9, 0xac, 0x25, 0x4c, } } /*4f414197-0fc2-4c01-b68a-86cbb9ac254c*/, "Office Project Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x6bf301c1, 0xb94a, 0x43e9, { 0xba, 0x31, 0xd4, 0x94, 0x59, 0x8c, 0x47, 0xfb, } } /*6bf301c1-b94a-43e9-ba31-d494598c47fb*/, "Office Visio Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x041a06cb, 0xc5b8, 0x4772, { 0x80, 0x9f, 0x41, 0x6d, 0x03, 0xd1, 0x66, 0x54, } } /*041a06cb-c5b8-4772-809f-416d03d16654*/, "Office Publisher 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x67c0fc0c, 0xdeba, 0x401b, { 0xbf, 0x8b, 0x9c, 0x8a, 0xd8, 0x39, 0x58, 0x04, } } /*67c0fc0c-deba-401b-bf8b-9c8ad8395804*/, "Office Access 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x83e04ee1, 0xfa8d, 0x436d, { 0x89, 0x94, 0xd3, 0x1a, 0x86, 0x2c, 0xab, 0x77, } } /*83e04ee1-fa8d-436d-8994-d31a862cab77*/, "Office Skype for Business 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x9caabccb, 0x61b1, 0x4b4b, { 0x8b, 0xec, 0xd1, 0x0a, 0x3c, 0x3a, 0xc2, 0xce, } } /*9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce*/, "Office Mondo 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xaa2a7821, 0x1827, 0x4c2c, { 0x8f, 0x1d, 0x45, 0x13, 0xa3, 0x4d, 0xda, 0x97, } } /*aa2a7821-1827-4c2c-8f1d-4513a34dda97*/, "Office Visio Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xbb11badf, 0xd8aa, 0x470e, { 0x93, 0x11, 0x20, 0xea, 0xf8, 0x0f, 0xe5, 0xcc, } } /*bb11badf-d8aa-470e-9311-20eaf80fe5cc*/, "Office Word 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xc3e65d36, 0x141f, 0x4d2f, { 0xa3, 0x03, 0xa8, 0x42, 0xee, 0x75, 0x6a, 0x29, } } /*c3e65d36-141f-4d2f-a303-a842ee756a29*/, "Office Excel 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xd70b1bba, 0xb893, 0x4544, { 0x96, 0xe2, 0xb7, 0xa3, 0x18, 0x09, 0x1c, 0x33, } } /*d70b1bba-b893-4544-96e2-b7a318091c33*/, "Office Powerpoint 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xd8cace59, 0x33d2, 0x4ac7, { 0x9b, 0x1b, 0x9b, 0x72, 0x33, 0x9c, 0x51, 0xc8, } } /*d8cace59-33d2-4ac7-9b1b-9b72339c51c8*/, "Office OneNote 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xda7ddabc, 0x3fbe, 0x4447, { 0x9e, 0x01, 0x6a, 0xb7, 0x44, 0x0b, 0x4c, 0xd4, } } /*da7ddabc-3fbe-4447-9e01-6ab7440b4cd4*/, "Office Project Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xdedfa23d, 0x6ed1, 0x45a6, { 0x85, 0xdc, 0x63, 0xca, 0xe0, 0x54, 0x6d, 0xe6, } } /*dedfa23d-6ed1-45a6-85dc-63cae0546de6*/, "Office Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xe914ea6e, 0xa5fa, 0x4439, { 0xa3, 0x94, 0xa9, 0xbb, 0x32, 0x93, 0xca, 0x09, } } /*e914ea6e-a5fa-4439-a394-a9bb3293ca09*/, "Office Mondo R 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xec9d9265, 0x9d1e, 0x4ed0, { 0x83, 0x8a, 0xcd, 0xc2, 0x0f, 0x25, 0x51, 0xa1, } } /*ec9d9265-9d1e-4ed0-838a-cdc20f2551a1*/, "Office Outlook 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + + // End marker (necessity should be removed when time permits) + + { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 } +}; + + +// necessary because other .c files cannot access _countof() +__pure ProdListIndex_t getExtendedProductListSize(void) +{ + return _countof(ExtendedProductList) - 1; +} + +__pure ProdListIndex_t getAppListSize(void) +{ + return _countof(AppList); +} + +#endif + +#ifndef NO_RANDOM_EPID +// HostType and OSBuild +static const struct KMSHostOS { uint16_t Type; uint16_t Build; } HostOS[] = +{ + { 55041, 6002 }, // Windows Server 2008 SP2 + { 55041, 7601 }, // Windows Server 2008 R2 SP1 + { 5426, 9200 }, // Windows Server 2012 + { 6401, 9600 }, // Windows Server 2012 R2 + { 3612, 10240}, // Windows Server 2016 +}; + +// GroupID and PIDRange +static const struct PKEYCONFIG { uint16_t GroupID; uint32_t RangeMin; uint32_t RangeMax; } pkeyconfig[] = { + { 206, 152000000, 191999999 }, // Windows Server 2012 KMS Host pkeyconfig + { 206, 271000000, 310999999 }, // Windows Server 2012 R2 KMS Host pkeyconfig + { 96, 199000000, 217999999 }, // Office2010 KMS Host pkeyconfig + { 206, 234000000, 255999999 }, // Office2013 KMS Host pkeyconfig +}; + +// Valid language identifiers to be used in the ePID +static const uint16_t LcidList[] = { + 1078, 1052, 1025, 2049, 3073, 4097, 5121, 6145, 7169, 8193, 9217, 10241, 11265, 12289, 13313, 14337, 15361, 16385, + 1067, 1068, 2092, 1069, 1059, 1093, 5146, 1026, 1027, 1028, 2052, 3076, 4100, 5124, 1050, 4122, 1029, 1030, 1125, 1043, 2067, + 1033, 2057, 3081, 4105, 5129, 6153, 7177, 8201, 9225, 10249, 11273, 12297, 13321, 1061, 1080, 1065, 1035, 1036, 2060, + 3084, 4108, 5132, 6156, 1079, 1110, 1031, 2055, 3079, 4103, 5127, 1032, 1095, 1037, 1081, 1038, 1039, 1057, 1040, 2064, 1041, 1099, + 1087, 1111, 1042, 1088, 1062, 1063, 1071, 1086, 2110, 1100, 1082, 1153, 1102, 1104, 1044, 2068, 1045, 1046, 2070, + 1094, 1131, 2155, 3179, 1048, 1049, 9275, 4155, 5179, 3131, 1083, 2107, 8251, 6203, 7227, 1103, 2074, 6170, 3098, + 7194, 1051, 1060, 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, 12298, 13322, 14346, 15370, 16394, + 17418, 18442, 19466, 20490, 1089, 1053, 2077, 1114, 1097, 1092, 1098, 1054, 1074, 1058, 1056, 1091, 2115, 1066, 1106, 1076, 1077 +}; + + +#ifdef _PEDANTIC +uint16_t IsValidLcid(const uint16_t Lcid) +{ + uint16_t i; + + for (i = 0; i < _countof(LcidList); i++) + { + if (Lcid == LcidList[i]) return Lcid; + } + + return 0; +} +#endif // _PEDANTIC +#endif // NO_RANDOM_EPID + + +// Unix time is seconds from 1970-01-01. Should be 64 bits to avoid Year 2035 overflow bug. +// FILETIME is 100 nanoseconds from 1601-01-01. Must be 64 bits. +void getUnixTimeAsFileTime(FILETIME *const ts) +{ + int64_t unixtime = (int64_t)time(NULL); + int64_t *filetime = (int64_t*)ts; + + *filetime = LE64( (unixtime + 11644473600LL) * 10000000LL ); +} + +__pure int64_t fileTimeToUnixTime(const FILETIME *const ts) +{ + return LE64( *((const int64_t *const)ts) ) / 10000000LL - 11644473600LL; +} + + +/* + * Get's a product name with a GUID in host-endian order. + * List can be any list defined above. + */ +const char* getProductNameHE(const GUID *const guid, const KmsIdList *const List, ProdListIndex_t *const i) +{ + for (*i = 0; List[*i].name != NULL; (*i)++) + { + if (IsEqualGUID(guid, &List[*i].guid)) + return List[*i].name; + } + + return "Unknown"; +} + + +/* + * same as getProductnameHE except GUID is in little-endian (network) order + */ +const char* getProductNameLE(const GUID *const guid, const KmsIdList *const List, ProdListIndex_t *const i) +{ + #if __BYTE_ORDER != __LITTLE_ENDIAN + GUID HeGUID; + LEGUID(&HeGUID, guid); + return getProductNameHE(&HeGUID, List, i); + #else + return getProductNameHE(guid, List, i); + #endif +} + + +#ifndef NO_RANDOM_EPID +// formats an int with a fixed number of digits with leading zeros (helper for ePID generation) +static char* itoc(char *const c, const int i, uint_fast8_t digits) +{ + char formatString[8]; + if (digits > 9) digits = 0; + strcpy(formatString,"%"); + + if (digits) + { + formatString[1] = '0'; + formatString[2] = digits | 0x30; + formatString[3] = 0; + } + + strcat(formatString, "u"); + sprintf(c, formatString, i); + return c; +} + +static int getRandomServerType() +{ +# ifndef USE_MSRPC + if (!UseRpcBTFN) +# endif // USE_MSRPC + { + // This isn't possible at all, e.g. KMS host on XP + return rand() % (int)_countof(HostOS); + } +# ifndef USE_MSRPC + else + { + // return 9200/9600/10240 if NDR64 is in use, otherwise 6002/7601 + if (UseRpcNDR64) return (rand() % 3) + 2; + return (rand() % 2); + } +# endif // USE_MSRPC +} + + +/* + * Generates a random ePID + */ +static void generateRandomPid(const int index, char *const szPid, int serverType, int16_t lang) +{ + int clientApp; + char numberBuffer[12]; + + if (serverType < 0 || serverType >= (int)_countof(HostOS)) + { + serverType = getRandomServerType(); + } + + strcpy(szPid, itoc(numberBuffer, HostOS[serverType].Type, 5)); + strcat(szPid, "-"); + + if (index == 2) + clientApp = 3; + else if (index == 1) + clientApp = 2; + else + clientApp = serverType == 3 /*change if HostOS changes*/ ? 1 : 0; + + strcat(szPid, itoc(numberBuffer, pkeyconfig[clientApp].GroupID, 5)); + strcat(szPid, "-"); + + int keyId = (rand32() % (pkeyconfig[clientApp].RangeMax - pkeyconfig[clientApp].RangeMin)) + pkeyconfig[clientApp].RangeMin; + strcat(szPid, itoc(numberBuffer, keyId / 1000000, 3)); + strcat(szPid, "-"); + strcat(szPid, itoc(numberBuffer, keyId % 1000000, 6)); + strcat(szPid, "-03-"); + + if (lang < 0) lang = LcidList[rand() % _countof(LcidList)]; + strcat(szPid, itoc(numberBuffer, lang, 0)); + strcat(szPid, "-"); + + strcat(szPid, itoc(numberBuffer, HostOS[serverType].Build, 0)); + strcat(szPid, ".0000-"); + +# define minTime ((time_t)1436958000) // Release Date Windows 10 RTM Escrow + + time_t maxTime, kmsTime; + time(&maxTime); + + if (maxTime < minTime) // Just in case the system time is < 07/15/2015 1:00 pm + maxTime = (time_t)BUILD_TIME; + + kmsTime = (rand32() % (maxTime - minTime)) + minTime; +# undef minTime + + struct tm *pidTime; + pidTime = gmtime(&kmsTime); + + strcat(szPid, itoc(numberBuffer, pidTime->tm_yday, 3)); + strcat(szPid, itoc(numberBuffer, pidTime->tm_year + 1900, 4)); +} + + +/* + * Generates random ePIDs and stores them if not already read from ini file. + * For use with randomization level 1 + */ +void randomPidInit() +{ + ProdListIndex_t i; + + int serverType = getRandomServerType(); + int16_t lang = Lcid ? Lcid : LcidList[rand() % _countof(LcidList)]; + + for (i = 0; i < _countof(AppList) - 1; i++) + { + if (KmsResponseParameters[i].Epid) continue; + + char Epid[PID_BUFFER_SIZE]; + + generateRandomPid(i, Epid, serverType, lang); + KmsResponseParameters[i].Epid = (const char*)vlmcsd_malloc(strlen(Epid) + 1); + + strcpy((char*)KmsResponseParameters[i].Epid, Epid); + + #ifndef NO_LOG + KmsResponseParameters[i].EpidSource = "randomized at program start"; + #endif // NO_LOG + } +} + +#endif // NO_RANDOM_EPID + + +#ifndef NO_LOG +/* + * Logs a Request + */ +static void logRequest(const REQUEST *const baseRequest) +{ + const char *productName; + char clientname[64]; + ProdListIndex_t index; + + #ifndef NO_EXTENDED_PRODUCT_LIST + productName = getProductNameLE(&baseRequest->ActID, ExtendedProductList, &index); + if (++index >= (int)_countof(ExtendedProductList)) + #endif // NO_EXTENDED_PRODUCT_LIST + { + #ifndef NO_BASIC_PRODUCT_LIST + productName = getProductNameLE(&baseRequest->KMSID, ProductList, &index); + if (++index >= (int)_countof(ProductList)) + #endif // NO_BASIC_PRODUCT_LIST + { + productName = getProductNameLE(&baseRequest->AppID, AppList, &index); + } + } + + #ifndef NO_VERBOSE_LOG + if (logverbose) + { + logger("<<< Incoming KMS request\n"); + logRequestVerbose(baseRequest, &logger); + } + else + { + #endif // NO_VERBOSE_LOG + ucs2_to_utf8(baseRequest->WorkstationName, clientname, 64, 64); + logger("KMS v%i.%i request from %s for %s\n", LE16(baseRequest->MajorVer), LE16(baseRequest->MinorVer), clientname, productName); + #ifndef NO_VERBOSE_LOG + } + #endif // NO_VERBOSE_LOG +} +#endif // NO_LOG + + +/* + * Converts a utf-8 ePID string to UCS-2 and writes it to a RESPONSE struct + */ +static void getEpidFromString(RESPONSE *const Response, const char *const pid) +{ + size_t length = utf8_to_ucs2(Response->KmsPID, pid, PID_BUFFER_SIZE, PID_BUFFER_SIZE * 3); + Response->PIDSize = LE32(((unsigned int )length + 1) << 1); +} + + +/* + * get ePID from appropriate source + */ +static void getEpid(RESPONSE *const baseResponse, const char** EpidSource, const ProdListIndex_t index, BYTE *const HwId) +{ + const char* pid; + if (KmsResponseParameters[index].Epid == NULL) + { + #ifndef NO_RANDOM_EPID + if (RandomizationLevel == 2) + { + char szPid[PID_BUFFER_SIZE]; + generateRandomPid(index, szPid, -1, Lcid ? Lcid : -1); + pid = szPid; + + #ifndef NO_LOG + *EpidSource = "randomized on every request"; + #endif // NO_LOG + } + else + #endif // NO_RANDOM_EPID + { + pid = AppList[index].pid; + #ifndef NO_LOG + *EpidSource = "vlmcsd default"; + #endif // NO_LOG + } + } + else + { + pid = KmsResponseParameters[index].Epid; + + if (HwId && KmsResponseParameters[index].HwId != NULL) + memcpy(HwId, KmsResponseParameters[index].HwId, sizeof(((RESPONSE_V6 *)0)->HwId)); + + #ifndef NO_LOG + *EpidSource = KmsResponseParameters[index].EpidSource; + #endif // NO_LOG + } + getEpidFromString(baseResponse, pid); +} + + +#if !defined(NO_LOG) && defined(_PEDANTIC) +static BOOL CheckVersion4Uuid(const GUID *const guid, const char *const szGuidName) +{ + if (LE16(guid->Data3) >> 12 != 4 || guid->Data4[0] >> 6 != 2) + { + logger("Warning: %s does not conform to version 4 UUID according to RFC 4122\n", szGuidName); + return FALSE; + } + return TRUE; +} + + +static void CheckRequest(const REQUEST *const Request) +{ + CheckVersion4Uuid(&Request->CMID, "Client machine ID"); + CheckVersion4Uuid(&Request->AppID, "Application ID"); + CheckVersion4Uuid(&Request->KMSID, "Server SKU ID"); + CheckVersion4Uuid(&Request->ActID, "Client SKU ID"); + + if (LE32(Request->IsClientVM) > 1) + logger("Warning: Virtual Machine field in request must be 0 or 1 but is %u\n", LE32(Request->IsClientVM)); + + if (LE32(Request->LicenseStatus) > 6 ) + logger("Warning: License status must be between 0 and 6 but is %u\n", LE32(Request->LicenseStatus)); +} +#endif // !defined(NO_LOG) && defined(_PEDANTIC) + + +#ifndef NO_LOG +/* + * Logs the Response + */ +static void logResponse(const RESPONSE *const baseResponse, const BYTE *const hwId, const char *const EpidSource) +{ + char utf8pid[PID_BUFFER_SIZE * 3]; + ucs2_to_utf8(baseResponse->KmsPID, utf8pid, PID_BUFFER_SIZE, PID_BUFFER_SIZE * 3); + + #ifndef NO_VERBOSE_LOG + if (!logverbose) + { + #endif // NO_VERBOSE_LOG + logger("Sending ePID (%s): %s\n", EpidSource, utf8pid); + #ifndef NO_VERBOSE_LOG + } + else + { + logger(">>> Sending response, ePID source = %s\n", EpidSource); + logResponseVerbose(utf8pid, hwId, baseResponse, &logger); + } + #endif // NO_VERBOSE_LOG + +} +#endif + + +/* + * Creates the unencrypted base response + */ +static BOOL __stdcall CreateResponseBaseCallback(const REQUEST *const baseRequest, RESPONSE *const baseResponse, BYTE *const hwId, const char* const ipstr) +{ + const char* EpidSource; + #ifndef NO_LOG + logRequest(baseRequest); + #ifdef _PEDANTIC + CheckRequest(baseRequest); + #endif // _PEDANTIC + #endif // NO_LOG + + ProdListIndex_t index; + + getProductNameLE(&baseRequest->AppID, AppList, &index); + + if (index >= _countof(AppList) - 1) index = 0; //default to Windows + + getEpid(baseResponse, &EpidSource, index, hwId); + + baseResponse->Version = baseRequest->Version; + + memcpy(&baseResponse->CMID, &baseRequest->CMID, sizeof(GUID)); + memcpy(&baseResponse->ClientTime, &baseRequest->ClientTime, sizeof(FILETIME)); + + baseResponse->Count = LE32(LE32(baseRequest->N_Policy) << 1); + baseResponse->VLActivationInterval = LE32(VLActivationInterval); + baseResponse->VLRenewalInterval = LE32(VLRenewalInterval); + + #ifndef NO_LOG + logResponse(baseResponse, hwId, EpidSource); + #endif // NO_LOG + + return !0; +} + +RequestCallback_t CreateResponseBase = &CreateResponseBaseCallback; + +////TODO: Move to helpers.c +void get16RandomBytes(void* ptr) +{ + int i; + for (i = 0; i < 4; i++) ((DWORD*)ptr)[i] = rand32(); +} + + +/* + * Creates v4 response + */ +size_t CreateResponseV4(REQUEST_V4 *const request_v4, BYTE *const responseBuffer, const char* const ipstr) +{ + RESPONSE_V4* Response = (RESPONSE_V4*)responseBuffer; + + if ( !CreateResponseBase(&request_v4->RequestBase, &Response->ResponseBase, NULL, ipstr) ) return 0; + + DWORD pidSize = LE32(Response->ResponseBase.PIDSize); + BYTE* postEpidPtr = responseBuffer + V4_PRE_EPID_SIZE + pidSize; + memmove(postEpidPtr, &Response->ResponseBase.CMID, V4_POST_EPID_SIZE); + + size_t encryptSize = V4_PRE_EPID_SIZE + V4_POST_EPID_SIZE + pidSize; + AesCmacV4(responseBuffer, encryptSize, responseBuffer + encryptSize); + + return encryptSize + sizeof(Response->MAC); +} + +/* +// Workaround for buggy GCC 4.2/4.3 +#if defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ < 4) +__attribute__((noinline)) +#endif +__pure static uint64_t TimestampInterval(void *ts) +{ + return ( GET_UA64LE(ts) / TIME_C1 ) * TIME_C2 + TIME_C3; +}*/ + + +/* + * Creates the HMAC for v6 + */ +static int_fast8_t CreateV6Hmac(BYTE *const encrypt_start, const size_t encryptSize, int_fast8_t tolerance) +{ + BYTE hash[32]; +# define halfHashSize (sizeof(hash) >> 1) + uint64_t timeSlot; + BYTE *responseEnd = encrypt_start + encryptSize; + + // This is the time from the response + FILETIME* ft = (FILETIME*)(responseEnd - V6_POST_EPID_SIZE + sizeof(((RESPONSE*)0)->CMID)); + + // Generate a time slot that changes every 4.11 hours. + // Request and repsonse time must match +/- 1 slot. + // When generating a response tolerance must be 0. + // If verifying the hash, try tolerance -1, 0 and +1. One of them must match. + + timeSlot = LE64( (GET_UA64LE(ft) / TIME_C1 * TIME_C2 + TIME_C3) + (tolerance * TIME_C1) ); + + // The time slot is hashed with SHA256 so it is not so obvious that it is time + Sha256((BYTE*) &timeSlot, sizeof(timeSlot), hash); + + // The last 16 bytes of the hashed time slot are the actual HMAC key + if (!Sha256Hmac + ( + hash + halfHashSize, // Use last 16 bytes of SHA256 as HMAC key + encrypt_start, // hash only the encrypted part of the v6 response + encryptSize - sizeof(((RESPONSE_V6*)0)->HMAC), // encryptSize minus the HMAC itself + hash // use same buffer for resulting hash where the key came from + )) + { + return FALSE; + } + + memcpy(responseEnd - sizeof(((RESPONSE_V6*)0)->HMAC), hash + halfHashSize, halfHashSize); + return TRUE; +# undef halfHashSize +} + + +/* + * Creates v5 or v6 response + */ +size_t CreateResponseV6(REQUEST_V6 *restrict request_v6, BYTE *const responseBuffer, const char* const ipstr) +{ + // The response will be created in a fixed sized struct to + // avoid unaligned access macros and packed structs on RISC systems + // which largely increase code size. + // + // The fixed sized struct with 64 WCHARs for the ePID will be converted + // to a variable sized struct later and requires unaligned access macros. + + RESPONSE_V6* Response = (RESPONSE_V6*)responseBuffer; + RESPONSE* baseResponse = &Response->ResponseBase; + + #ifdef _DEBUG + RESPONSE_V6_DEBUG* xxx = (RESPONSE_V6_DEBUG*)responseBuffer; + #endif + + static const BYTE DefaultHwid[8] = { HWID }; + int_fast8_t v6 = LE16(request_v6->MajorVer) > 5; + AesCtx aesCtx; + + AesInitKey(&aesCtx, v6 ? AesKeyV6 : AesKeyV5, v6, AES_KEY_BYTES); + AesDecryptCbc(&aesCtx, NULL, request_v6->IV, V6_DECRYPT_SIZE); + + // get random salt and SHA256 it + get16RandomBytes(Response->RandomXoredIVs); + Sha256(Response->RandomXoredIVs, sizeof(Response->RandomXoredIVs), Response->Hash); + + if (v6) // V6 specific stuff + { + // In v6 a random IV is generated + Response->Version = request_v6->Version; + get16RandomBytes(Response->IV); + + // pre-fill with default HwId (not required for v5) + memcpy(Response->HwId, DefaultHwid, sizeof(Response->HwId)); + + // Just copy decrypted request IV (using Null IV) here. Note this is identical + // to XORing non-decrypted request and reponse IVs + memcpy(Response->XoredIVs, request_v6->IV, sizeof(Response->XoredIVs)); + } + else // V5 specific stuff + { + // In v5 IVs of request and response must be identical (MS client checks this) + // The following memcpy copies Version and IVs at once + memcpy(Response, request_v6, V6_UNENCRYPTED_SIZE); + } + + // Xor Random bytes with decrypted request IV + XorBlock(request_v6->IV, Response->RandomXoredIVs); + + // Get the base response + if ( !CreateResponseBase(&request_v6->RequestBase, baseResponse, Response->HwId, ipstr) ) return 0; + + // Convert the fixed sized struct into variable sized + DWORD pidSize = LE32(baseResponse->PIDSize); + BYTE* postEpidPtr = responseBuffer + V6_PRE_EPID_SIZE + pidSize; + size_t post_epid_size = v6 ? V6_POST_EPID_SIZE : V5_POST_EPID_SIZE; + + memmove(postEpidPtr, &baseResponse->CMID, post_epid_size); + + // number of bytes to encrypt + size_t encryptSize = + V6_PRE_EPID_SIZE + - sizeof(Response->Version) + + pidSize + + post_epid_size; + + //AesDecryptBlock(&aesCtx, Response->IV); + if (v6 && !CreateV6Hmac(Response->IV, encryptSize, 0)) return 0; + + // Padding auto handled by encryption func + AesEncryptCbc(&aesCtx, NULL, Response->IV, &encryptSize); + + return encryptSize + sizeof(Response->Version); +} + + +// Create Hashed KMS Client Request Data for KMS Protocol Version 4 +BYTE *CreateRequestV4(size_t *size, const REQUEST* requestBase) +{ + *size = sizeof(REQUEST_V4); + + // Build a proper KMS client request data + BYTE *request = (BYTE *)vlmcsd_malloc(sizeof(REQUEST_V4)); + + // Temporary Pointer for access to REQUEST_V4 structure + REQUEST_V4 *request_v4 = (REQUEST_V4 *)request; + + // Set KMS Client Request Base + memcpy(&request_v4->RequestBase, requestBase, sizeof(REQUEST)); + + // Generate Hash Signature + AesCmacV4(request, sizeof(REQUEST), request_v4->MAC); + + // Return Request Data + return request; +} + + +// Create Encrypted KMS Client Request Data for KMS Protocol Version 6 +BYTE* CreateRequestV6(size_t *size, const REQUEST* requestBase) +{ + *size = sizeof(REQUEST_V6); + + // Temporary Pointer for access to REQUEST_V5 structure + REQUEST_V6 *request = (REQUEST_V6 *)vlmcsd_malloc(sizeof(REQUEST_V6)); + + // KMS Protocol Version + request->Version = requestBase->Version; + + // Initialize the IV + get16RandomBytes(request->IV); + + // Set KMS Client Request Base + memcpy(&request->RequestBase, requestBase, sizeof(REQUEST)); + + // Encrypt KMS Client Request + size_t encryptSize = sizeof(request->RequestBase); + AesCtx Ctx; + int_fast8_t v6 = LE16(request->MajorVer) > 5; + AesInitKey(&Ctx, v6 ? AesKeyV6 : AesKeyV5, v6, 16); + AesEncryptCbc(&Ctx, request->IV, (BYTE*)(&request->RequestBase), &encryptSize); + + // Return Proper Request Data + return (BYTE*)request; +} + + +/* + * Checks whether Length of ePID is valid + */ +static uint8_t checkPidLength(const RESPONSE *const responseBase) +{ + unsigned int i; + + if (LE32(responseBase->PIDSize) > (PID_BUFFER_SIZE << 1)) return FALSE; + if (responseBase->KmsPID[(LE32(responseBase->PIDSize) >> 1) - 1]) return FALSE; + + for (i = 0; i < (LE32(responseBase->PIDSize) >> 1) - 2; i++) + { + if (!responseBase->KmsPID[i]) return FALSE; + } + + return TRUE; +} + + +/* + * "Decrypts" a KMS v4 response. Actually just copies to a fixed size buffer + */ +RESPONSE_RESULT DecryptResponseV4(RESPONSE_V4* response_v4, const int responseSize, BYTE* const rawResponse, const BYTE* const rawRequest) +{ + int copySize = + V4_PRE_EPID_SIZE + + (LE32(((RESPONSE_V4*)rawResponse)->ResponseBase.PIDSize) <= PID_BUFFER_SIZE << 1 ? + LE32(((RESPONSE_V4*)rawResponse)->ResponseBase.PIDSize) : + PID_BUFFER_SIZE << 1); + + int messageSize = copySize + V4_POST_EPID_SIZE; + + memcpy(response_v4, rawResponse, copySize); + memcpy(&response_v4->ResponseBase.CMID, rawResponse + copySize, responseSize - copySize); + + // ensure PID is null terminated + response_v4->ResponseBase.KmsPID[PID_BUFFER_SIZE-1] = 0; + + uint8_t* mac = rawResponse + messageSize; + AesCmacV4(rawResponse, messageSize, mac); + + REQUEST_V4* request_v4 = (REQUEST_V4*)rawRequest; + RESPONSE_RESULT result; + + result.mask = (DWORD)~0; + result.PidLengthOK = checkPidLength((RESPONSE*)rawResponse); + result.VersionOK = response_v4->ResponseBase.Version == request_v4->RequestBase.Version; + result.HashOK = !memcmp(&response_v4->MAC, mac, sizeof(response_v4->MAC)); + result.TimeStampOK = !memcmp(&response_v4->ResponseBase.ClientTime, &request_v4->RequestBase.ClientTime, sizeof(FILETIME)); + result.ClientMachineIDOK = !memcmp(&response_v4->ResponseBase.CMID, &request_v4->RequestBase.CMID, sizeof(GUID)); + result.effectiveResponseSize = responseSize; + result.correctResponseSize = sizeof(RESPONSE_V4) - sizeof(response_v4->ResponseBase.KmsPID) + LE32(response_v4->ResponseBase.PIDSize); + + return result; +} + + +static RESPONSE_RESULT VerifyResponseV6(RESPONSE_RESULT result, const AesCtx* Ctx, RESPONSE_V6* response_v6, REQUEST_V6* request_v6, BYTE* const rawResponse) +{ + // Check IVs + result.IVsOK = !memcmp // In V6 the XoredIV is actually the request IV + ( + response_v6->XoredIVs, + request_v6->IV, + sizeof(response_v6->XoredIVs) + ); + + result.IVnotSuspicious = !!memcmp // If IVs are identical, it is obviously an emulator + ( + request_v6->IV, + response_v6->IV, + sizeof(request_v6->IV) + ); + + // Check Hmac + int_fast8_t tolerance; + BYTE OldHmac[sizeof(response_v6->HMAC)]; + + result.HmacSha256OK = FALSE; + + memcpy // Save received HMAC to compare with calculated HMAC later + ( + OldHmac, + response_v6->HMAC, + sizeof(response_v6->HMAC) + ); + + //AesEncryptBlock(Ctx, Response_v6->IV); // CreateV6Hmac needs original IV as received over the network + + for (tolerance = -1; tolerance < 2; tolerance++) + { + CreateV6Hmac + ( + rawResponse + sizeof(response_v6->Version), // Pointer to start of the encrypted part of the response + (size_t)result.correctResponseSize - V6_UNENCRYPTED_SIZE, // size of the encrypted part + tolerance // tolerance -1, 0, or +1 + ); + + if + (( + result.HmacSha256OK = !memcmp // Compare both HMACs + ( + OldHmac, + rawResponse + (size_t)result.correctResponseSize - sizeof(response_v6->HMAC), + sizeof(OldHmac) + ) + )) + { + break; + } + } + return result; +} + + +static RESPONSE_RESULT VerifyResponseV5(RESPONSE_RESULT result, REQUEST_V5* request_v5, RESPONSE_V5* response_v5) +{ + // Check IVs: in V5 (and only v5) request and response IVs must match + result.IVsOK = !memcmp(request_v5->IV, response_v5->IV, sizeof(request_v5->IV)); + + // V5 has no Hmac, always set to TRUE + result.HmacSha256OK = TRUE; + + return result; +} + + +/* + * Decrypts a KMS v5 or v6 response received from a server. + * hwid must supply a valid 16 byte buffer for v6. hwid is ignored in v5 + */ +RESPONSE_RESULT DecryptResponseV6(RESPONSE_V6* response_v6, int responseSize, BYTE* const response, const BYTE* const rawRequest, BYTE* hwid) +{ + RESPONSE_RESULT result; + result.mask = ~0; // Set all bits in the results mask to 1. Assume success first. + result.effectiveResponseSize = responseSize; + + int copySize1 = + sizeof(response_v6->Version); + + // Decrypt KMS Server Response (encrypted part starts after RequestIV) + responseSize -= copySize1; + + AesCtx Ctx; + int_fast8_t v6 = LE16(((RESPONSE_V6*)response)->MajorVer) > 5; + + AesInitKey(&Ctx, v6 ? AesKeyV6 : AesKeyV5, v6, AES_KEY_BYTES); + AesDecryptCbc(&Ctx, NULL, response + copySize1, responseSize); + + // Check padding + BYTE* lastPadByte = response + (size_t)result.effectiveResponseSize - 1; + + // Must be from 1 to 16 + if (!*lastPadByte || *lastPadByte > AES_BLOCK_BYTES) + { + result.DecryptSuccess = FALSE; + return result; + } + + // Check if pad bytes are all the same + BYTE* padByte; + for (padByte = lastPadByte - *lastPadByte + 1; padByte < lastPadByte; padByte++) + if (*padByte != *lastPadByte) + { + result.DecryptSuccess = FALSE; + return result; + } + + // Add size of Version, KmsPIDLen and variable size PID + DWORD pidSize = LE32(((RESPONSE_V6*) response)->ResponseBase.PIDSize); + + copySize1 += + V6_UNENCRYPTED_SIZE + + sizeof(response_v6->ResponseBase.PIDSize) + + (pidSize <= PID_BUFFER_SIZE << 1 ? pidSize : PID_BUFFER_SIZE << 1); + + // Copy part 1 of response up to variable sized PID + memcpy(response_v6, response, copySize1); + + // ensure PID is null terminated + response_v6->ResponseBase.KmsPID[PID_BUFFER_SIZE - 1] = 0; + + // Copy part 2 + size_t copySize2 = v6 ? V6_POST_EPID_SIZE : V5_POST_EPID_SIZE; + memcpy(&response_v6->ResponseBase.CMID, response + copySize1, copySize2); + + // Decrypting the response is finished here. Now we check the results for validity + // A basic client doesn't need the stuff below this comment but we want to use vlmcs + // as a debug tool for KMS emulators. + + REQUEST_V6* request_v6 = (REQUEST_V6*) rawRequest; + DWORD decryptSize = sizeof(request_v6->IV) + sizeof(request_v6->RequestBase) + sizeof(request_v6->Pad); + + AesDecryptCbc(&Ctx, NULL, request_v6->IV, decryptSize); + + // Check that all version informations are the same + result.VersionOK = + request_v6->Version == response_v6->ResponseBase.Version && + request_v6->Version == response_v6->Version && + request_v6->Version == request_v6->RequestBase.Version; + + // Check Base Request + result.PidLengthOK = checkPidLength(&((RESPONSE_V6*) response)->ResponseBase); + result.TimeStampOK = !memcmp(&response_v6->ResponseBase.ClientTime, &request_v6->RequestBase.ClientTime, sizeof(FILETIME)); + result.ClientMachineIDOK = IsEqualGUID(&response_v6->ResponseBase.CMID, &request_v6->RequestBase.CMID); + + // Rebuild Random Key and Sha256 Hash + BYTE HashVerify[sizeof(response_v6->Hash)]; + BYTE RandomKey[sizeof(response_v6->RandomXoredIVs)]; + + memcpy(RandomKey, request_v6->IV, sizeof(RandomKey)); + XorBlock(response_v6->RandomXoredIVs, RandomKey); + Sha256(RandomKey, sizeof(RandomKey), HashVerify); + + result.HashOK = !memcmp(response_v6->Hash, HashVerify, sizeof(HashVerify)); + + // size before encryption (padding not included) + result.correctResponseSize = + (v6 ? sizeof(RESPONSE_V6) : sizeof(RESPONSE_V5)) + - sizeof(response_v6->ResponseBase.KmsPID) + + LE32(response_v6->ResponseBase.PIDSize); + + // Version specific stuff + if (v6) + { + // Copy the HwId + memcpy(hwid, response_v6->HwId, sizeof(response_v6->HwId)); + + // Verify the V6 specific part of the response + result = VerifyResponseV6(result, &Ctx, response_v6, request_v6, response); + } + else // V5 + { + // Verify the V5 specific part of the response + result = VerifyResponseV5(result, request_v6, (RESPONSE_V5*)response_v6); + } + + // padded size after encryption + result.correctResponseSize += (~(result.correctResponseSize - sizeof(response_v6->ResponseBase.Version)) & 0xf) + 1; + + return result; +} + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "endian.h" + +#if defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN) \ + && defined(BS16) && defined(BS32) && defined(BS64) + +#else // ! defined(__BYTE_ORDER) + +void PUT_UAA64BE(void *p, unsigned long long v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + _p[ 0 ] = v >> 56; + _p[ 1 ] = v >> 48; + _p[ 2 ] = v >> 40; + _p[ 3 ] = v >> 32; + _p[ 4 ] = v >> 24; + _p[ 5 ] = v >> 16; + _p[ 6 ] = v >> 8; + _p[ 7 ] = v; +} + +void PUT_UAA32BE(void *p, unsigned int v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + _p[ 0 ] = v >> 24; + _p[ 1 ] = v >> 16; + _p[ 2 ] = v >> 8; + _p[ 3 ] = v; +} + +void PUT_UAA16BE(void *p, unsigned short v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + _p[ 0 ] = v >> 8; + _p[ 1 ] = v; +} + + +void PUT_UAA64LE(void *p, unsigned long long v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + _p[ 0 ] = v; + _p[ 1 ] = v >> 8; + _p[ 2 ] = v >> 16; + _p[ 3 ] = v >> 24; + _p[ 4 ] = v >> 32; + _p[ 5 ] = v >> 40; + _p[ 6 ] = v >> 48; + _p[ 7 ] = v >> 56; +} + +void PUT_UAA32LE(void *p, unsigned int v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + _p[ 0 ] = v; + _p[ 1 ] = v >> 8; + _p[ 2 ] = v >> 16; + _p[ 3 ] = v >> 24; +} + +void PUT_UAA16LE(void *p, unsigned short v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + _p[ 0 ] = v; + _p[ 1 ] = v >> 8; +} + + +unsigned long long GET_UAA64BE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + return + (unsigned long long)_p[ 0 ] << 56 | + (unsigned long long)_p[ 1 ] << 48 | + (unsigned long long)_p[ 2 ] << 40 | + (unsigned long long)_p[ 3 ] << 32 | + (unsigned long long)_p[ 4 ] << 24 | + (unsigned long long)_p[ 5 ] << 16 | + (unsigned long long)_p[ 6 ] << 8 | + (unsigned long long)_p[ 7 ]; + +} + +unsigned int GET_UAA32BE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + return + (unsigned int)_p[ 0 ] << 24 | + (unsigned int)_p[ 1 ] << 16 | + (unsigned int)_p[ 2 ] << 8 | + (unsigned int)_p[ 3 ]; +} + +unsigned short GET_UAA16BE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + return + (unsigned short)_p[ 0 ] << 8 | + (unsigned short)_p[ 1 ]; +} + + +unsigned long long GET_UAA64LE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + return + (unsigned long long)_p[ 0 ] | + (unsigned long long)_p[ 1 ] << 8 | + (unsigned long long)_p[ 2 ] << 16 | + (unsigned long long)_p[ 3 ] << 24 | + (unsigned long long)_p[ 4 ] << 32 | + (unsigned long long)_p[ 5 ] << 40 | + (unsigned long long)_p[ 6 ] << 48 | + (unsigned long long)_p[ 7 ] << 56; + +} + +unsigned int GET_UAA32LE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + return + (unsigned int)_p[ 0 ] | + (unsigned int)_p[ 1 ] << 8 | + (unsigned int)_p[ 2 ] << 16 | + (unsigned int)_p[ 3 ] << 24; +} + +unsigned short GET_UAA16LE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + return + (unsigned short)_p[ 0 ] | + (unsigned short)_p[ 1 ] << 8; +} + + +unsigned short BE16(unsigned short x) +{ + return GET_UAA16BE(&x, 0); +} + +unsigned short LE16(unsigned short x) +{ + return GET_UAA16LE(&x, 0); +} + +unsigned int BE32(unsigned int x) +{ + return GET_UAA32BE(&x, 0); +} + +unsigned int LE32(unsigned int x) +{ + return GET_UAA32LE(&x, 0); +} + +unsigned long long BE64(unsigned long long x) +{ + return GET_UAA64BE(&x, 0); +} + +inline unsigned long long LE64(unsigned long long x) +{ + return GET_UAA64LE(&x, 0); +} + +#endif // defined(__BYTE_ORDER) +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE +#endif // _DEFAULT_SOURCE + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "output.h" +#include "shared_globals.h" +#include "endian.h" +#include "helpers.h" + +#ifndef NO_LOG +static void vlogger(const char *message, va_list args) +{ + FILE *log; + + #ifdef _NTSERVICE + if (!IsNTService && logstdout) log = stdout; + #else + if (logstdout) log = stdout; + #endif + else + { + if (fn_log == NULL) return; + + #ifndef _WIN32 + if (!strcmp(fn_log, "syslog")) + { + openlog("vlmcsd", LOG_CONS | LOG_PID, LOG_USER); + + ////PORTABILITY: vsyslog is not in Posix but virtually all Unixes have it + vsyslog(LOG_INFO, message, args); + + closelog(); + return; + } + #endif // _WIN32 + + log = fopen(fn_log, "a"); + if ( !log ) return; + } + + time_t now = time(0); + + #ifdef USE_THREADS + char mbstr[2048]; + #else + char mbstr[24]; + #endif + + strftime(mbstr, sizeof(mbstr), "%Y-%m-%d %X", localtime(&now)); + + #ifndef USE_THREADS + + fprintf(log, "%s: ", mbstr); + vfprintf(log, message, args); + fflush(log); + + #else // USE_THREADS + + // We write everything to a string before we really log inside the critical section + // so formatting the output can be concurrent + strcat(mbstr, ": "); + int len = strlen(mbstr); + vsnprintf(mbstr + len, sizeof(mbstr) - len, message, args); + + lock_mutex(&logmutex); + fputs(mbstr, log); + fflush(log); + unlock_mutex(&logmutex); + + #endif // USE_THREADS + if (log != stdout) fclose(log); +} + + +// Always sends to log output +int logger(const char *const fmt, ...) +{ + va_list args; + + va_start(args, fmt); + vlogger(fmt, args); + va_end(args); + return 0; +} + +#endif //NO_LOG + + +// Output to stderr if it is available or to log otherwise (e.g. if running as daemon/service) +void printerrorf(const char *const fmt, ...) +{ + va_list arglist; + + va_start(arglist, fmt); + + #ifndef NO_LOG + #ifdef _NTSERVICE + if (InetdMode || IsNTService) + #else // !_NTSERVICE + if (InetdMode) + #endif // NTSERVIICE + vlogger(fmt, arglist); + else + #endif //NO_LOG + { + vfprintf(stderr, fmt, arglist); + fflush(stderr); + } + + va_end(arglist); +} + + +// Always output to stderr +int errorout(const char* fmt, ...) +{ + va_list args; + + va_start(args, fmt); + int i = vfprintf(stderr, fmt, args); + va_end(args); + fflush(stderr); + + return i; +} + + +static const char *LicenseStatusText[] = +{ + "Unlicensed", "Licensed", "OOB grace", "OOT grace", "Non-Genuine", "Notification", "Extended grace" +}; + + +void uuid2StringLE(const GUID *const guid, char *const string) +{ + sprintf(string, + #ifdef _WIN32 + "%08x-%04x-%04x-%04x-%012I64x", + #else + "%08x-%04x-%04x-%04x-%012llx", + #endif + (unsigned int)LE32( guid->Data1 ), + (unsigned int)LE16( guid->Data2 ), + (unsigned int)LE16( guid->Data3 ), + (unsigned int)BE16( *(uint16_t*)guid->Data4 ), + (unsigned long long)BE64(*(uint64_t*)(guid->Data4)) & 0xffffffffffffLL + ); +} + + +void logRequestVerbose(const REQUEST *const Request, const PRINTFUNC p) +{ + char guidBuffer[GUID_STRING_LENGTH + 1]; + char WorkstationBuffer[3 * WORKSTATION_NAME_BUFFER]; + const char *productName; + ProdListIndex_t index; + + p("Protocol version : %u.%u\n", LE16(Request->MajorVer), LE16(Request->MinorVer)); + p("Client is a virtual machine : %s\n", LE32(Request->VMInfo) ? "Yes" : "No"); + p("Licensing status : %u (%s)\n", (uint32_t)LE32(Request->LicenseStatus), LE32(Request->LicenseStatus) < _countof(LicenseStatusText) ? LicenseStatusText[LE32(Request->LicenseStatus)] : "Unknown"); + p("Remaining time (0 = forever) : %i minutes\n", (uint32_t)LE32(Request->BindingExpiration)); + + uuid2StringLE(&Request->AppID, guidBuffer); + productName = getProductNameLE(&Request->AppID, AppList, &index); + p("Application ID : %s (%s)\n", guidBuffer, productName); + + uuid2StringLE(&Request->ActID, guidBuffer); + + #ifndef NO_EXTENDED_PRODUCT_LIST + productName = getProductNameLE(&Request->ActID, ExtendedProductList, &index); + #else + productName = "Unknown"; + #endif + + p("Activation ID (Product) : %s (%s)\n", guidBuffer, productName); + + uuid2StringLE(&Request->KMSID, guidBuffer); + + #ifndef NO_BASIC_PRODUCT_LIST + productName = getProductNameLE(&Request->KMSID, ProductList, &index); + #else + productName = "Unknown"; + #endif + + p("Key Management Service ID : %s (%s)\n", guidBuffer, productName); + + uuid2StringLE(&Request->CMID, guidBuffer); + p("Client machine ID : %s\n", guidBuffer); + + uuid2StringLE(&Request->CMID_prev, guidBuffer); + p("Previous client machine ID : %s\n", guidBuffer); + + + char mbstr[64]; + time_t st; + st = fileTimeToUnixTime(&Request->ClientTime); + strftime(mbstr, sizeof(mbstr), "%Y-%m-%d %X", gmtime(&st)); + p("Client request timestamp (UTC) : %s\n", mbstr); + + ucs2_to_utf8(Request->WorkstationName, WorkstationBuffer, WORKSTATION_NAME_BUFFER, sizeof(WorkstationBuffer)); + + p("Workstation name : %s\n", WorkstationBuffer); + p("N count policy (minimum clients): %u\n", (uint32_t)LE32(Request->N_Policy)); +} + + +void logResponseVerbose(const char *const ePID, const BYTE *const hwid, const RESPONSE *const response, const PRINTFUNC p) +{ + char guidBuffer[GUID_STRING_LENGTH + 1]; + //SYSTEMTIME st; + + p("Protocol version : %u.%u\n", (uint32_t)LE16(response->MajorVer), (uint32_t)LE16(response->MinorVer)); + p("KMS host extended PID : %s\n", ePID); + if (LE16(response->MajorVer) > 5) +# ifndef _WIN32 + p("KMS host Hardware ID : %016llX\n", (unsigned long long)BE64(*(uint64_t*)hwid)); +# else // _WIN32 + p("KMS host Hardware ID : %016I64X\n", (unsigned long long)BE64(*(uint64_t*)hwid)); +# endif // WIN32 + + uuid2StringLE(&response->CMID, guidBuffer); + p("Client machine ID : %s\n", guidBuffer); + + char mbstr[64]; + time_t st; + + st = fileTimeToUnixTime(&response->ClientTime); + strftime(mbstr, sizeof(mbstr), "%Y-%m-%d %X", gmtime(&st)); + p("Client request timestamp (UTC) : %s\n", mbstr); + + p("KMS host current active clients : %u\n", (uint32_t)LE32(response->Count)); + p("Renewal interval policy : %u\n", (uint32_t)LE32(response->VLRenewalInterval)); + p("Activation interval policy : %u\n", (uint32_t)LE32(response->VLActivationInterval)); +} + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "shared_globals.h" + +int global_argc, multi_argc = 0; +CARGV global_argv, multi_argv = NULL; +const char *const Version = VERSION; +DWORD VLActivationInterval = 60 * 2; // 2 hours +DWORD VLRenewalInterval = 60 * 24 * 7; // 7 days +int_fast8_t DisconnectImmediately = FALSE; +const char *const cIPv4 = "IPv4"; +const char *const cIPv6 = "IPv6"; + +#ifndef USE_MSRPC +int_fast8_t UseMultiplexedRpc = TRUE; +int_fast8_t UseRpcNDR64 = TRUE; +int_fast8_t UseRpcBTFN = TRUE; +#endif // USE_MSRPC + +#ifndef NO_SOCKETS +const char *defaultport = "1688"; +#endif // NO_SOCKETS + +KmsResponseParam_t KmsResponseParameters[MAX_KMSAPPS]; + +#if !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) +int_fast8_t IsRestarted = FALSE; +#endif // !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) + +#if !defined(NO_TIMEOUT) && !__minix__ +DWORD ServerTimeout = 30; +#endif // !defined(NO_TIMEOUT) && !__minix__ + +#if !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ +#ifdef USE_MSRPC +uint32_t MaxTasks = RPC_C_LISTEN_MAX_CALLS_DEFAULT; +#else // !USE_MSRPC +uint32_t MaxTasks = SEM_VALUE_MAX; +#endif // !USE_MSRPC +#endif // !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ + +#ifndef NO_LOG +char *fn_log = NULL; +int_fast8_t logstdout = 0; +#ifndef NO_VERBOSE_LOG +int_fast8_t logverbose = 0; +#endif // NO_VERBOSE_LOG +#endif // NO_LOG + +#ifndef NO_SOCKETS +int_fast8_t nodaemon = 0; +int_fast8_t InetdMode = 0; +#else +int_fast8_t nodaemon = 1; +int_fast8_t InetdMode = 1; +#endif + +#ifndef NO_RANDOM_EPID +int_fast8_t RandomizationLevel = 1; +uint16_t Lcid = 0; +#endif + +#ifndef NO_SOCKETS +SOCKET *SocketList; +int numsockets = 0; + +#if !defined(NO_LIMIT) && !__minix__ +#ifndef _WIN32 // Posix +sem_t *Semaphore; +#else // _WIN32 +HANDLE Semaphore; +#endif // _WIN32 + +#endif // !defined(NO_LIMIT) && !__minix__ +#endif // NO_SOCKETS + +#ifdef _NTSERVICE +int_fast8_t IsNTService = TRUE; +int_fast8_t ServiceShutdown = FALSE; +#endif // _NTSERVICE + +#ifndef NO_LOG +#ifdef USE_THREADS +#if !defined(_WIN32) && !defined(__CYGWIN__) +pthread_mutex_t logmutex = PTHREAD_MUTEX_INITIALIZER; +#else +CRITICAL_SECTION logmutex; +#endif // !defined(_WIN32) && !defined(__CYGWIN__) +#endif // USE_THREADS +#endif // NO_LOG + + + + + +/* + * Helper functions used by other modules + */ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef _WIN32 +#include +#endif // _WIN32 +#include +#include +#include +#include +#include "helpers.h" +#include "output.h" +#include "endian.h" +#include "shared_globals.h" + + +/* + * UCS2 <-> UTF-8 functions + * All functions use little endian UCS2 since we only need it to communicate with Windows via RPC + */ + +// Convert one character from UTF-8 to UCS2 +// Returns 0xffff, if utf-8 evaluates to > 0xfffe (outside basic multilingual pane) +WCHAR utf8_to_ucs2_char (const unsigned char *input, const unsigned char **end_ptr) +{ + *end_ptr = input; + if (input[0] == 0) + return ~0; + + if (input[0] < 0x80) { + *end_ptr = input + 1; + return LE16(input[0]); + } + + if ((input[0] & 0xE0) == 0xE0) { + + if (input[1] == 0 || input[2] == 0) + return ~0; + + *end_ptr = input + 3; + + return + LE16((input[0] & 0x0F)<<12 | + (input[1] & 0x3F)<<6 | + (input[2] & 0x3F)); + } + + if ((input[0] & 0xC0) == 0xC0) { + if (input[1] == 0) + return ~0; + + *end_ptr = input + 2; + + return + LE16((input[0] & 0x1F)<<6 | + (input[1] & 0x3F)); + } + return ~0; +} + +// Convert one character from UCS2 to UTF-8 +// Returns length of UTF-8 char (1, 2 or 3) or -1 on error (UTF-16 outside UCS2) +// char *utf8 must be large enough to hold 3 bytes +int ucs2_to_utf8_char (const WCHAR ucs2_le, char *utf8) +{ + const WCHAR ucs2 = LE16(ucs2_le); + + if (ucs2 < 0x80) { + utf8[0] = ucs2; + utf8[1] = '\0'; + return 1; + } + + if (ucs2 >= 0x80 && ucs2 < 0x800) { + utf8[0] = (ucs2 >> 6) | 0xC0; + utf8[1] = (ucs2 & 0x3F) | 0x80; + utf8[2] = '\0'; + return 2; + } + + if (ucs2 >= 0x800 && ucs2 < 0xFFFF) { + + if (ucs2 >= 0xD800 && ucs2 <= 0xDFFF) { + /* Ill-formed (UTF-16 ouside of BMP) */ + return -1; + } + + utf8[0] = ((ucs2 >> 12) ) | 0xE0; + utf8[1] = ((ucs2 >> 6 ) & 0x3F) | 0x80; + utf8[2] = ((ucs2 ) & 0x3F) | 0x80; + utf8[3] = '\0'; + return 3; + } + + return -1; +} + + +// Converts UTF8 to UCS2. Returns size in bytes of the converted string or -1 on error +size_t utf8_to_ucs2(WCHAR* const ucs2_le, const char* const utf8, const size_t maxucs2, const size_t maxutf8) +{ + const unsigned char* current_utf8 = (unsigned char*)utf8; + WCHAR* current_ucs2_le = ucs2_le; + + for (; *current_utf8; current_ucs2_le++) + { + size_t size = (char*)current_utf8 - utf8; + + if (size >= maxutf8) return (size_t)-1; + if (((*current_utf8 & 0xc0) == 0xc0) && (size >= maxutf8 - 1)) return (size_t)-1; + if (((*current_utf8 & 0xe0) == 0xe0) && (size >= maxutf8 - 2)) return (size_t)-1; + if (current_ucs2_le - ucs2_le >= (intptr_t)maxucs2 - 1) return (size_t)-1; + + *current_ucs2_le = utf8_to_ucs2_char(current_utf8, ¤t_utf8); + current_ucs2_le[1] = 0; + + if (*current_ucs2_le == (WCHAR)-1) return (size_t)-1; + } + return current_ucs2_le - ucs2_le; +} + +// Converts UCS2 to UTF-8. Return TRUE or FALSE +BOOL ucs2_to_utf8(const WCHAR* const ucs2_le, char* utf8, size_t maxucs2, size_t maxutf8) +{ + char utf8_char[4]; + const WCHAR* current_ucs2 = ucs2_le; + unsigned int index_utf8 = 0; + + for(*utf8 = 0; *current_ucs2; current_ucs2++) + { + if (current_ucs2 - ucs2_le > (intptr_t)maxucs2) return FALSE; + int len = ucs2_to_utf8_char(*current_ucs2, utf8_char); + if (index_utf8 + len > maxutf8) return FALSE; + strncat(utf8, utf8_char, len); + index_utf8+=len; + } + + return TRUE; +} + +/* End of UTF-8 <-> UCS2 conversion */ + + +// Checks, whether a string is a valid integer number between min and max. Returns TRUE or FALSE. Puts int value in *value +BOOL stringToInt(const char *const szValue, const unsigned int min, const unsigned int max, unsigned int *const value) +{ + char *nextchar; + + errno = 0; + long long result = strtoll(szValue, &nextchar, 10); + + if (errno || result < (long long)min || result > (long long)max || *nextchar) + { + return FALSE; + } + + *value = (unsigned int)result; + return TRUE; +} + + +//Converts a String Guid to a host binary guid in host endianess +int_fast8_t string2Uuid(const char *const restrict input, GUID *const restrict guid) +{ + int i; + + if (strlen(input) < GUID_STRING_LENGTH) return FALSE; + if (input[8] != '-' || input[13] != '-' || input[18] != '-' || input[23] != '-') return FALSE; + + for (i = 0; i < GUID_STRING_LENGTH; i++) + { + if (i == 8 || i == 13 || i == 18 || i == 23) continue; + + const char c = toupper((int)input[i]); + + if (c < '0' || c > 'F' || (c > '9' && c < 'A')) return FALSE; + } + + char inputCopy[GUID_STRING_LENGTH + 1]; + strncpy(inputCopy, input, GUID_STRING_LENGTH + 1); + inputCopy[8] = inputCopy[13] = inputCopy[18] = 0; + + hex2bin((BYTE*)&guid->Data1, inputCopy, 8); + hex2bin((BYTE*)&guid->Data2, inputCopy + 9, 4); + hex2bin((BYTE*)&guid->Data3, inputCopy + 14, 4); + hex2bin(guid->Data4, input + 19, 16); + + guid->Data1 = BE32(guid->Data1); + guid->Data2 = BE16(guid->Data2); + guid->Data3 = BE16(guid->Data3); + return TRUE; +} + + +// convert GUID to little-endian +void LEGUID(GUID *const restrict out, const GUID* const restrict in) +{ + #if __BYTE_ORDER != __LITTLE_ENDIAN + out->Data1 = LE32(in->Data1); + out->Data2 = LE16(in->Data2); + out->Data3 = LE16(in->Data3); + memcpy(out->Data4, in->Data4, sizeof(out->Data4)); + #else + memcpy(out, in, sizeof(GUID)); + #endif +} + + +//Checks a command line argument if it is numeric and between min and max. Returns the numeric value or exits on error +__pure unsigned int getOptionArgumentInt(const char o, const unsigned int min, const unsigned int max) +{ + unsigned int result; + + if (!stringToInt(optarg, min, max, &result)) + { + printerrorf("Fatal: Option \"-%c\" must be numeric between %u and %u.\n", o, min, max); + exit(!0); + } + + return result; +} + + +// Resets getopt() to start parsing from the beginning +void optReset(void) +{ + #if __minix__ || defined(__BSD__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) + optind = 1; + optreset = 1; // Makes newer BSD getopt happy + #elif defined(__UCLIBC__) // uClibc headers also define __GLIBC__ so be careful here + optind = 0; // uClibc seeks compatibility with GLIBC + #elif defined(__GLIBC__) + optind = 0; // Makes GLIBC getopt happy + #else // Standard for most systems + optind = 1; + #endif +} + + +#if defined(_WIN32) || defined(USE_MSRPC) + +// Returns a static message buffer containing text for a given Win32 error. Not thread safe (same as strerror) +char* win_strerror(const int message) +{ + #define STRERROR_BUFFER_SIZE 256 + static char buffer[STRERROR_BUFFER_SIZE]; + + FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, NULL, message, 0, buffer, STRERROR_BUFFER_SIZE, NULL); + return buffer; +} + +#endif // defined(_WIN32) || defined(USE_MSRPC) + + +/* + * parses an address in the form host:[port] in addr + * returns host and port in seperate strings + */ +void parseAddress(char *const addr, char** szHost, char** szPort) +{ + *szHost = addr; + +# ifndef NO_SOCKETS + *szPort = (char*)defaultport; +# else // NO_SOCKETS + *szPort = "1688"; +# endif // NO_SOCKETS + + char *lastcolon = strrchr(addr, ':'); + char *firstcolon = strchr(addr, ':'); + char *closingbracket = strrchr(addr, ']'); + + if (*addr == '[' && closingbracket) //Address in brackets + { + *closingbracket = 0; + (*szHost)++; + + if (closingbracket[1] == ':') + *szPort = closingbracket + 2; + } + else if (firstcolon && firstcolon == lastcolon) //IPv4 address or hostname with port + { + *firstcolon = 0; + *szPort = firstcolon + 1; + } +} + + +// Initialize random generator (needs to be done in each thread) +void randomNumberInit() +{ + struct timeval tv; + gettimeofday(&tv, NULL); + srand((unsigned int)(tv.tv_sec ^ tv.tv_usec)); +} + + +// We always exit immediately if any OOM condition occurs +__noreturn void OutOfMemory(void) +{ + errorout("Fatal: Out of memory"); + exit(!0); +} + + +void* vlmcsd_malloc(size_t len) +{ + void* buf = malloc(len); + if (!buf) OutOfMemory(); + return buf; +} + + +/* + * Converts hex digits to bytes in big-endian order. + * Ignores any non-hex characters + */ +void hex2bin(BYTE *const bin, const char *hex, const size_t maxbin) +{ + static const char *const hexdigits = "0123456789ABCDEF"; + char* nextchar; + size_t i; + + for (i = 0; (i < 16) && utf8_to_ucs2_char((const unsigned char*)hex, (const unsigned char**)&nextchar) != (WCHAR)-1; hex = nextchar) + { + const char* pos = strchr(hexdigits, toupper((int)*hex)); + if (!pos) continue; + + if (!(i & 1)) bin[i >> 1] = 0; + bin[i >> 1] |= (char)(pos - hexdigits); + if (!(i & 1)) bin[i >> 1] <<= 4; + i++; + if (i >> 1 > maxbin) break; + } +} + + +__pure BOOL getArgumentBool(int_fast8_t *result, const char *const argument) +{ + if ( + !strncasecmp(argument, "true", 4) || + !strncasecmp(argument, "on", 4) || + !strncasecmp(argument, "yes", 3) || + !strncasecmp(argument, "1", 1) + ) + { + *result = TRUE; + return TRUE; + } + else if ( + !strncasecmp(argument, "false", 5) || + !strncasecmp(argument, "off", 3) || + !strncasecmp(argument, "no", 2) || + !strncasecmp(argument, "0", 1) + ) + { + *result = FALSE; + return TRUE; + } + + return FALSE; +} + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef USE_MSRPC + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include +#ifndef _WIN32 +#include +#include +#include +#include +#include +#endif // WIN32 + +#include "network.h" +#include "endian.h" +#include "output.h" +#include "helpers.h" +#include "shared_globals.h" +#include "rpc.h" + + +#ifndef _WIN32 +typedef ssize_t (*sendrecv_t)(int, void*, size_t, int); +#else +typedef int (WINAPI *sendrecv_t)(SOCKET, void*, int, int); +#endif + + +// Send or receive a fixed number of bytes regardless if received in one or more chunks +int_fast8_t sendrecv(SOCKET sock, BYTE *data, int len, int_fast8_t do_send) +{ + int n; + sendrecv_t f = do_send + ? (sendrecv_t) send + : (sendrecv_t) recv; + + do + { + n = f(sock, data, len, 0); + } + while ( + ( n < 0 && socket_errno == VLMCSD_EINTR ) || ( n > 0 && ( data += n, (len -= n) > 0 ) )); + + return ! len; +} + + +static int_fast8_t ip2str(char *restrict result, const size_t resultLength, const struct sockaddr *const restrict socketAddress, const socklen_t socketLength) +{ + static const char *const fIPv4 = "%s:%s"; + static const char *const fIPv6 = "[%s]:%s"; + char ipAddress[64], portNumber[8]; + + if (getnameinfo + ( + socketAddress, + socketLength, + ipAddress, + sizeof(ipAddress), + portNumber, + sizeof(portNumber), + NI_NUMERICHOST | NI_NUMERICSERV + )) + { + return FALSE; + } + + if ((unsigned int)snprintf(result, resultLength, socketAddress->sa_family == AF_INET6 ? fIPv6 : fIPv4, ipAddress, portNumber) > resultLength) return FALSE; + return TRUE; +} + + +static int_fast8_t getSocketList(struct addrinfo **saList, const char *const addr, const int flags, const int AddressFamily) +{ + int status; + char *szHost, *szPort; + size_t len = strlen(addr) + 1; + + // Don't alloca too much + if (len > 264) return FALSE; + + char *addrcopy = (char*)alloca(len); + memcpy(addrcopy, addr, len); + + parseAddress(addrcopy, &szHost, &szPort); + + struct addrinfo hints; + + memset(&hints, 0, sizeof(struct addrinfo)); + + hints.ai_family = AddressFamily; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + hints.ai_flags = flags; + + if ((status = getaddrinfo(szHost, szPort, &hints, saList))) + { + printerrorf("Warning: %s: %s\n", addr, gai_strerror(status)); + return FALSE; + } + + return TRUE; +} + + +static int_fast8_t setBlockingEnabled(SOCKET fd, int_fast8_t blocking) +{ + if (fd == INVALID_SOCKET) return FALSE; + + #ifdef _WIN32 + + unsigned long mode = blocking ? 0 : 1; + return (ioctlsocket(fd, FIONBIO, &mode) == 0) ? TRUE : FALSE; + + #else // POSIX + + int flags = fcntl(fd, F_GETFL, 0); + + if (flags < 0) return FALSE; + + flags = blocking ? (flags & ~O_NONBLOCK) : (flags | O_NONBLOCK); + return (fcntl(fd, F_SETFL, flags) == 0) ? TRUE : FALSE; + + #endif // POSIX +} + + +int_fast8_t isDisconnected(const SOCKET s) +{ + char buffer[1]; + + if (!setBlockingEnabled(s, FALSE)) return TRUE; + + int n = recv(s, buffer, 1, MSG_PEEK); + + if (!setBlockingEnabled(s, TRUE)) return TRUE; + if (n == 0) return TRUE; + + return FALSE; +} + + +// Connect to TCP address addr (e.g. "kms.example.com:1688") and return an +// open socket for the connection if successful or INVALID_SOCKET otherwise +SOCKET connectToAddress(const char *const addr, const int AddressFamily, int_fast8_t showHostName) +{ + struct addrinfo *saList, *sa; + SOCKET s = INVALID_SOCKET; + char szAddr[128]; + + if (!getSocketList(&saList, addr, 0, AddressFamily)) return INVALID_SOCKET; + + for (sa = saList; sa; sa = sa->ai_next) + { + // struct sockaddr_in* addr4 = (struct sockaddr_in*)sa->ai_addr; + // struct sockaddr_in6* addr6 = (struct sockaddr_in6*)sa->ai_addr; + + if (ip2str(szAddr, sizeof(szAddr), sa->ai_addr, sa->ai_addrlen)) + { + if (showHostName) + printf("Connecting to %s (%s) ... ", addr, szAddr); + else + printf("Connecting to %s ... ", szAddr); + + fflush(stdout); + } + + s = socket(sa->ai_family, SOCK_STREAM, IPPROTO_TCP); + +# if !defined(NO_TIMEOUT) && !__minix__ +# ifndef _WIN32 // Standard Posix timeout structure + + struct timeval to; + to.tv_sec = 10; + to.tv_usec = 0; + +# else // Windows requires a DWORD with milliseconds + + DWORD to = 10000; + +# endif // _WIN32 + + setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (sockopt_t)&to, sizeof(to)); + setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, (sockopt_t)&to, sizeof(to)); +# endif // !defined(NO_TIMEOUT) && !__minix__ + + if (!connect(s, sa->ai_addr, sa->ai_addrlen)) + { + printf("successful\n"); + break; + } + + errorout("%s\n", socket_errno == VLMCSD_EINPROGRESS ? "Timed out" : vlmcsd_strerror(socket_errno)); + + socketclose(s); + s = INVALID_SOCKET; + } + + freeaddrinfo(saList); + return s; +} + + +#ifndef NO_SOCKETS + +// Create a Listening socket for addrinfo sa and return socket s +// szHost and szPort are for logging only +static int listenOnAddress(const struct addrinfo *const ai, SOCKET *s) +{ + int error; + char ipstr[64]; + + ip2str(ipstr, sizeof(ipstr), ai->ai_addr, ai->ai_addrlen); + + //*s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); + *s = socket(ai->ai_family, SOCK_STREAM, IPPROTO_TCP); + + if (*s == INVALID_SOCKET) + { + error = socket_errno; + printerrorf("Warning: %s error. %s\n", ai->ai_family == AF_INET6 ? cIPv6 : cIPv4, vlmcsd_strerror(error)); + return error; + } + +# if !defined(_WIN32) && !defined(NO_SIGHUP) + + int flags = fcntl(*s, F_GETFD, 0); + + if (flags != -1) + { + flags |= FD_CLOEXEC; + fcntl(*s, F_SETFD, flags); + } +# ifdef _PEDANTIC + else + { + printerrorf("Warning: Could not set FD_CLOEXEC flag on %s: %s\n", ipstr, vlmcsd_strerror(errno)); + } +# endif // _PEDANTIC + +# endif // !defined(_WIN32) && !defined(NO_SIGHUP) + + BOOL socketOption = TRUE; + + // fix for lame tomato toolchain +# ifndef IPV6_V6ONLY +# ifdef __linux__ +# define IPV6_V6ONLY (26) +# endif // __linux__ +# endif // IPV6_V6ONLY + +# ifdef IPV6_V6ONLY + if (ai->ai_family == AF_INET6) setsockopt(*s, IPPROTO_IPV6, IPV6_V6ONLY, (sockopt_t)&socketOption, sizeof(socketOption)); +# endif + +# ifndef _WIN32 + setsockopt(*s, SOL_SOCKET, SO_REUSEADDR, (sockopt_t)&socketOption, sizeof(socketOption)); +# endif + + if (bind(*s, ai->ai_addr, ai->ai_addrlen) || listen(*s, SOMAXCONN)) + { + error = socket_errno; + printerrorf("Warning: %s: %s\n", ipstr, vlmcsd_strerror(error)); + socketclose(*s); + return error; + } + +# ifndef NO_LOG + logger("Listening on %s\n", ipstr); +# endif + + return 0; +} + + +// Adds a listening socket for an address string, +// e.g. 127.0.0.1:1688 or [2001:db8:dead:beef::1]:1688 +BOOL addListeningSocket(const char *const addr) +{ + struct addrinfo *aiList, *ai; + int result = FALSE; + SOCKET *s = SocketList + numsockets; + + if (getSocketList(&aiList, addr, AI_PASSIVE | AI_NUMERICHOST, AF_UNSPEC)) + { + for (ai = aiList; ai; ai = ai->ai_next) + { + // struct sockaddr_in* addr4 = (struct sockaddr_in*)sa->ai_addr; + // struct sockaddr_in6* addr6 = (struct sockaddr_in6*)sa->ai_addr; + + if (numsockets >= FD_SETSIZE) + { + #ifdef _PEDANTIC // Do not report this error in normal builds to keep file size low + printerrorf("Warning: Cannot listen on %s. Your OS only supports %u listening sockets in an FD_SET.\n", addr, FD_SETSIZE); + #endif + break; + } + + if (!listenOnAddress(ai, s)) + { + numsockets++; + result = TRUE; + } + } + + freeaddrinfo(aiList); + } + return result; +} + + +// Just create some dummy sockets to see if we have a specific protocol (IPv4 or IPv6) +__pure int_fast8_t checkProtocolStack(const int addressfamily) +{ + SOCKET s; // = INVALID_SOCKET; + + s = socket(addressfamily, SOCK_STREAM, 0); + int_fast8_t success = (s != INVALID_SOCKET); + + socketclose(s); + return success; +} + + +// Build an fd_set of all listening socket then use select to wait for an incoming connection +static SOCKET network_accept_any() +{ + fd_set ListeningSocketsList; + SOCKET maxSocket, sock; + int i; + int status; + + FD_ZERO(&ListeningSocketsList); + maxSocket = 0; + + for (i = 0; i < numsockets; i++) + { + FD_SET(SocketList[i], &ListeningSocketsList); + if (SocketList[i] > maxSocket) maxSocket = SocketList[i]; + } + + status = select(maxSocket + 1, &ListeningSocketsList, NULL, NULL, NULL); + + if (status < 0) return INVALID_SOCKET; + + sock = INVALID_SOCKET; + + for (i = 0; i < numsockets; i++) + { + if (FD_ISSET(SocketList[i], &ListeningSocketsList)) + { + sock = SocketList[i]; + break; + } + } + + if (sock == INVALID_SOCKET) + return INVALID_SOCKET; + else + return accept(sock, NULL, NULL); +} + + +void closeAllListeningSockets() +{ + int i; + + for (i = 0; i < numsockets; i++) + { + shutdown(SocketList[i], VLMCSD_SHUT_RDWR); + socketclose(SocketList[i]); + } +} +#endif // NO_SOCKETS + + +static void serveClient(const SOCKET s_client, const DWORD RpcAssocGroup) +{ +# if !defined(NO_TIMEOUT) && !__minix__ + +# ifndef _WIN32 // Standard Posix timeout structure + + struct timeval to; + to.tv_sec = ServerTimeout; + to.tv_usec = 0; + + #else // Windows requires a DWORD with milliseconds + + DWORD to = ServerTimeout * 1000; + +# endif // _WIN32 + +# if !defined(NO_LOG) && defined(_PEDANTIC) + + int result = + setsockopt(s_client, SOL_SOCKET, SO_RCVTIMEO, (sockopt_t)&to, sizeof(to)) || + setsockopt(s_client, SOL_SOCKET, SO_SNDTIMEO, (sockopt_t)&to, sizeof(to)); + + if (result) logger("Warning: Set timeout failed: %s\n", vlmcsd_strerror(socket_errno)); + +# else // !(!defined(NO_LOG) && defined(_PEDANTIC)) + + setsockopt(s_client, SOL_SOCKET, SO_RCVTIMEO, (sockopt_t)&to, sizeof(to)); + setsockopt(s_client, SOL_SOCKET, SO_SNDTIMEO, (sockopt_t)&to, sizeof(to)); + +# endif // !(!defined(NO_LOG) && defined(_PEDANTIC)) + +# endif // !defined(NO_TIMEOUT) && !__minix__ + + char ipstr[64]; + socklen_t len; + struct sockaddr_storage addr; + + len = sizeof addr; + + if (getpeername(s_client, (struct sockaddr*)&addr, &len) || + !ip2str(ipstr, sizeof(ipstr), (struct sockaddr*)&addr, len)) + { +# if !defined(NO_LOG) && defined(_PEDANTIC) + logger("Fatal: Cannot determine client's IP address: %s\n", vlmcsd_strerror(errno)); +# endif // !defined(NO_LOG) && defined(_PEDANTIC) + socketclose(s_client); + return; + } + + +# ifndef NO_LOG + const char *const connection_type = addr.ss_family == AF_INET6 ? cIPv6 : cIPv4; + static const char *const cAccepted = "accepted"; + static const char *const cClosed = "closed"; + static const char *const fIP = "%s connection %s: %s.\n"; + + logger(fIP, connection_type, cAccepted, ipstr); + #endif // NO_LOG + + rpcServer(s_client, RpcAssocGroup, ipstr); + +# ifndef NO_LOG + logger(fIP, connection_type, cClosed, ipstr); +# endif // NO_LOG + + socketclose(s_client); +} + + +#ifndef NO_SOCKETS +static void post_sem(void) +{ + #if !defined(NO_LIMIT) && !__minix__ + if (!InetdMode && MaxTasks != SEM_VALUE_MAX) + { + semaphore_post(Semaphore); + } + #endif // !defined(NO_LIMIT) && !__minix__ +} + + +static void wait_sem(void) +{ + #if !defined(NO_LIMIT) && !__minix__ + if (!InetdMode && MaxTasks != SEM_VALUE_MAX) + { + semaphore_wait(Semaphore); + } + #endif // !defined(NO_LIMIT) && !__minix__ +} +#endif // NO_SOCKETS + +#if defined(USE_THREADS) && !defined(NO_SOCKETS) + +#if defined(_WIN32) || defined(__CYGWIN__) // Win32 Threads +static DWORD WINAPI serveClientThreadProc(PCLDATA clData) +#else // Posix threads +static void *serveClientThreadProc (PCLDATA clData) +#endif // Thread proc is identical in WIN32 and Posix threads +{ + serveClient(clData->socket, clData->RpcAssocGroup); + free(clData); + post_sem(); + + return 0; +} + +#endif // USE_THREADS + + +#ifndef NO_SOCKETS + +#if defined(USE_THREADS) && (defined(_WIN32) || defined(__CYGWIN__)) // Windows Threads +static int serveClientAsyncWinThreads(const PCLDATA thr_CLData) +{ + wait_sem(); + + HANDLE h = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)serveClientThreadProc, thr_CLData, 0, NULL); + + if (h) + CloseHandle(h); + else + { + socketclose(thr_CLData->socket); + free(thr_CLData); + post_sem(); + return GetLastError(); + } + + return NO_ERROR; +} +#endif // defined(USE_THREADS) && defined(_WIN32) // Windows Threads + + +#if defined(USE_THREADS) && !defined(_WIN32) && !defined(__CYGWIN__) // Posix Threads +static int ServeClientAsyncPosixThreads(const PCLDATA thr_CLData) +{ + pthread_t p_thr; + pthread_attr_t attr; + + wait_sem(); + + // Must set detached state to avoid memory leak + if (pthread_attr_init(&attr) || + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) || + pthread_create(&p_thr, &attr, (void * (*)(void *))serveClientThreadProc, thr_CLData)) + { + socketclose(thr_CLData->socket); + free(thr_CLData); + post_sem(); + return !0; + } + + return 0; +} +#endif // defined(USE_THREADS) && !defined(_WIN32) // Posix Threads + +#ifndef USE_THREADS // fork() implementation +static void ChildSignalHandler(const int signal) +{ + if (signal == SIGHUP) return; + + post_sem(); + + #ifndef NO_LOG + logger("Warning: Child killed/crashed by %s\n", strsignal(signal)); + #endif // NO_LOG + + exit(!0); +} + +static int ServeClientAsyncFork(const SOCKET s_client, const DWORD RpcAssocGroup) +{ + int pid; + wait_sem(); + + if ((pid = fork()) < 0) + { + return errno; + } + else if ( pid ) + { + // Parent process + socketclose(s_client); + return 0; + } + else + { + // Child process + + // Setup a Child Handler for most common termination signals + struct sigaction sa; + + sa.sa_flags = 0; + sa.sa_handler = ChildSignalHandler; + + static int signallist[] = { SIGHUP, SIGINT, SIGTERM, SIGSEGV, SIGILL, SIGFPE, SIGBUS }; + + if (!sigemptyset(&sa.sa_mask)) + { + uint_fast8_t i; + + for (i = 0; i < _countof(signallist); i++) + { + sigaction(signallist[i], &sa, NULL); + } + } + + serveClient(s_client, RpcAssocGroup); + post_sem(); + exit(0); + } +} +#endif + + +int serveClientAsync(const SOCKET s_client, const DWORD RpcAssocGroup) +{ + #ifndef USE_THREADS // fork() implementation + + return ServeClientAsyncFork(s_client, RpcAssocGroup); + + #else // threads implementation + + PCLDATA thr_CLData = (PCLDATA)vlmcsd_malloc(sizeof(CLDATA)); + thr_CLData->socket = s_client; + thr_CLData->RpcAssocGroup = RpcAssocGroup; + + #if defined(_WIN32) || defined (__CYGWIN__) // Windows threads + + return serveClientAsyncWinThreads(thr_CLData); + + #else // Posix Threads + + return ServeClientAsyncPosixThreads(thr_CLData); + + #endif // Posix Threads + + #endif // USE_THREADS +} + +#endif // NO_SOCKETS + + +int runServer() +{ + DWORD RpcAssocGroup = rand32(); + + // If compiled for inetd-only mode just serve the stdin socket + #ifdef NO_SOCKETS + serveClient(STDIN_FILENO, RpcAssocGroup); + return 0; + #else + // In inetd mode just handle the stdin socket + if (InetdMode) + { + serveClient(STDIN_FILENO, RpcAssocGroup); + return 0; + } + + // Standalone mode + for (;;) + { + int error; + SOCKET s_client; + + if ( (s_client = network_accept_any()) == INVALID_SOCKET ) + { + error = socket_errno; + + if (error == VLMCSD_EINTR || error == VLMCSD_ECONNABORTED) continue; + + #ifdef _NTSERVICE + if (ServiceShutdown) return 0; + #endif + + #ifndef NO_LOG + logger("Fatal: %s\n",vlmcsd_strerror(error)); + #endif + + return error; + } + + RpcAssocGroup++; + serveClientAsync(s_client, RpcAssocGroup); + } + #endif // NO_SOCKETS + + return 0; +} + +#endif // USE_MSRPC +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE +#endif // _DEFAULT_SOURCE + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef USE_MSRPC + +#include +#include +#include +#include +#include +#include +#if !defined(_WIN32) +#include +#include +#endif +#include "rpc.h" +#include "output.h" +#include "crypto.h" +#include "endian.h" +#include "helpers.h" +#include "network.h" +#include "shared_globals.h" + +/* Forwards */ + +static int checkRpcHeader(const RPC_HEADER *const Header, const BYTE desiredPacketType, const PRINTFUNC p); + + +/* Data definitions */ + +// All GUIDs are defined as BYTE[16] here. No big-endian/little-endian byteswapping required. +static const BYTE TransferSyntaxNDR32[] = { + 0x04, 0x5D, 0x88, 0x8A, 0xEB, 0x1C, 0xC9, 0x11, 0x9F, 0xE8, 0x08, 0x00, 0x2B, 0x10, 0x48, 0x60 +}; + +static const BYTE InterfaceUuid[] = { + 0x75, 0x21, 0xc8, 0x51, 0x4e, 0x84, 0x50, 0x47, 0xB0, 0xD8, 0xEC, 0x25, 0x55, 0x55, 0xBC, 0x06 +}; + +static const BYTE TransferSyntaxNDR64[] = { + 0x33, 0x05, 0x71, 0x71, 0xba, 0xbe, 0x37, 0x49, 0x83, 0x19, 0xb5, 0xdb, 0xef, 0x9c, 0xcc, 0x36 +}; + +static const BYTE BindTimeFeatureNegotiation[] = { + 0x2c, 0x1c, 0xb7, 0x6c, 0x12, 0x98, 0x40, 0x45, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + + +// +// Dispatch RPC payload to kms.c +// +typedef int (*CreateResponse_t)(const void *const, void *const, const char* const); + +static const struct { + unsigned int RequestSize; + CreateResponse_t CreateResponse; +} _Versions[] = { + { sizeof(REQUEST_V4), (CreateResponse_t) CreateResponseV4 }, + { sizeof(REQUEST_V6), (CreateResponse_t) CreateResponseV6 }, + { sizeof(REQUEST_V6), (CreateResponse_t) CreateResponseV6 } +}; + +RPC_FLAGS RpcFlags; +static int_fast8_t firstPacketSent; + +// +// RPC request (server) +// +#if defined(_PEDANTIC) && !defined(NO_LOG) +static void CheckRpcRequest(const RPC_REQUEST64 *const Request, const unsigned int len, WORD* NdrCtx, WORD* Ndr64Ctx, WORD Ctx) +{ + uint_fast8_t kmsMajorVersion; + uint32_t requestSize = Ctx != *Ndr64Ctx ? sizeof(RPC_REQUEST) : sizeof(RPC_REQUEST64); + + if (len < requestSize) + { + logger("Fatal: RPC request (including header) must be at least %i bytes but is only %i bytes.\n", + (int)(sizeof(RPC_HEADER) + requestSize), + (int)(len + sizeof(RPC_HEADER)) + ); + + return; + } + + if (len < requestSize + sizeof(DWORD)) + { + logger("Fatal: KMS Request too small to contain version info (less than 4 bytes).\n"); + return; + } + + if (Ctx != *Ndr64Ctx) + kmsMajorVersion = LE16(((WORD*)Request->Ndr.Data)[1]); + else + kmsMajorVersion = LE16(((WORD*)Request->Ndr64.Data)[1]); + + if (kmsMajorVersion > 6) + { + logger("Fatal: KMSv%u is not supported.\n", (unsigned int)kmsMajorVersion); + } + else + { + if (len >_Versions[kmsMajorVersion].RequestSize + requestSize) + logger("Warning: %u excess bytes in RPC request.\n", + len - _Versions[kmsMajorVersion].RequestSize + ); + } + + if (Ctx != *Ndr64Ctx && Ctx != *NdrCtx) + logger("Warning: Context id should be %u (NDR32) or %u (NDR64) but is %u.\n", + (unsigned int)*NdrCtx, + (unsigned int)*Ndr64Ctx, + Ctx + ); + + if (Request->Opnum) + logger("Warning: OpNum should be 0 but is %u.\n", + (unsigned int)LE16(Request->Opnum) + ); + + if (LE32(Request->AllocHint) != len - sizeof(RPC_REQUEST) + sizeof(Request->Ndr)) + logger("Warning: Allocation hint should be %u but is %u.\n", + len + sizeof(Request->Ndr), + LE32(Request->AllocHint) + ); + + if (Ctx != *Ndr64Ctx) + { + if (LE32(Request->Ndr.DataLength) != len - sizeof(RPC_REQUEST)) + logger("Warning: NDR32 data length field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST), + LE32(Request->Ndr.DataLength) + ); + + if (LE32(Request->Ndr.DataSizeIs) != len - sizeof(RPC_REQUEST)) + logger("Warning: NDR32 data size field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST), + LE32(Request->Ndr.DataSizeIs) + ); + } + else + { + if (LE64(Request->Ndr64.DataLength) != len - sizeof(RPC_REQUEST64)) + logger("Warning: NDR32 data length field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST) + sizeof(Request->Ndr), + LE64(Request->Ndr64.DataLength) + ); + + if (LE64(Request->Ndr64.DataSizeIs) != len - sizeof(RPC_REQUEST64)) + logger("Warning: NDR32 data size field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST64), + LE64(Request->Ndr64.DataSizeIs) + ); + } +} +#endif // defined(_PEDANTIC) && !defined(NO_LOG) + +/* + * check RPC request for (somewhat) correct size + * allow any size that does not cause CreateResponse to fail badly + */ +static unsigned int checkRpcRequestSize(const RPC_REQUEST64 *const Request, const unsigned int requestSize, WORD* NdrCtx, WORD* Ndr64Ctx) +{ + WORD Ctx = LE16(Request->ContextId); + +# if defined(_PEDANTIC) && !defined(NO_LOG) + CheckRpcRequest(Request, requestSize, NdrCtx, Ndr64Ctx, Ctx); +# endif // defined(_PEDANTIC) && !defined(NO_LOG) + + // Anything that is smaller than a v4 request is illegal + if (requestSize < sizeof(REQUEST_V4) + (Ctx != *Ndr64Ctx ? sizeof(RPC_REQUEST) : sizeof(RPC_REQUEST64))) return 0; + + // Get KMS major version + uint_fast16_t _v; + + if (Ctx != *Ndr64Ctx) + _v = LE16(((WORD*)Request->Ndr.Data)[1]) - 4; + else + _v = LE16(((WORD*)Request->Ndr64.Data)[1]) - 4; + + // Only KMS v4, v5 and v6 are supported + if (_v >= vlmcsd_countof(_Versions)) + { +# ifndef NO_LOG + logger("Fatal: KMSv%i unsupported\n", _v + 4); +# endif // NO_LOG + return 0; + } + + // Could check for equality but allow bigger requests to support buggy RPC clients (e.g. wine) + // Buffer overrun is check by caller. + return (requestSize >= _Versions[_v].RequestSize); +} + + +/* + * Handles the actual KMS request from the client. + * Calls KMS functions (CreateResponseV4 or CreateResponseV6) in kms.c + * Returns size of the KMS response packet or 0 on failure. + * + * The RPC packet size (excluding header) is actually in Response->AllocHint + */ +static int rpcRequest(const RPC_REQUEST64 *const Request, RPC_RESPONSE64 *const Response, const DWORD RpcAssocGroup_unused, const SOCKET sock_unused, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE packetType, const char* const ipstr) +{ + uint_fast16_t _v; + int ResponseSize; + WORD Ctx = LE16(Request->ContextId); + BYTE* requestData; + BYTE* responseData; + BYTE* pRpcReturnCode; + int len; + + if (Ctx != *Ndr64Ctx) + { + requestData = (BYTE*)&Request->Ndr.Data; + responseData = (BYTE*)&Response->Ndr.Data; + } + else + { + requestData = (BYTE*)&Request->Ndr64.Data; + responseData = (BYTE*)&Response->Ndr64.Data; + } + + _v = LE16(((WORD*)requestData)[1]) - 4; + + if (!(ResponseSize = _Versions[_v].CreateResponse(requestData, responseData, ipstr))) + { + return 0; + } + + if (Ctx != *Ndr64Ctx) + { + Response->Ndr.DataSizeMax = LE32(0x00020000); + Response->Ndr.DataLength = Response->Ndr.DataSizeIs = LE32(ResponseSize); + len = ResponseSize + sizeof(Response->Ndr); + } + else + { + Response->Ndr64.DataSizeMax = LE64(0x00020000ULL); + Response->Ndr64.DataLength = Response->Ndr64.DataSizeIs = LE64((uint64_t)ResponseSize); + len = ResponseSize + sizeof(Response->Ndr64); + } + + pRpcReturnCode = ((BYTE*)&Response->Ndr) + len; + UA32(pRpcReturnCode) = 0; //LE32 not needed for 0 + len += sizeof(DWORD); + + // Pad zeros to 32-bit align (seems not neccassary but Windows RPC does it this way) + int pad = ((~len & 3) + 1) & 3; + memset(pRpcReturnCode + sizeof(DWORD), 0, pad); + len += pad; + + Response->AllocHint = LE32(len); + Response->ContextId = Request->ContextId; + + *((WORD*)&Response->CancelCount) = 0; // CancelCount + Pad1 + + return len + 8; +} + + +#if defined(_PEDANTIC) && !defined(NO_LOG) +static void CheckRpcBindRequest(const RPC_BIND_REQUEST *const Request, const unsigned int len) +{ + uint_fast8_t i, HasTransferSyntaxNDR32 = FALSE; + char guidBuffer1[GUID_STRING_LENGTH + 1], guidBuffer2[GUID_STRING_LENGTH + 1]; + + uint32_t CapCtxItems = (len - sizeof(*Request) + sizeof(Request->CtxItems)) / sizeof(Request->CtxItems); + DWORD NumCtxItems = LE32(Request->NumCtxItems); + + if (NumCtxItems < CapCtxItems) // Can't be too small because already handled by RpcBindSize + logger("Warning: Excess bytes in RPC bind request.\n"); + + for (i = 0; i < NumCtxItems; i++) + { + if (!IsEqualGUID(&Request->CtxItems[i].InterfaceUUID, InterfaceUuid)) + { + uuid2StringLE((GUID*)&Request->CtxItems[i].InterfaceUUID, guidBuffer1); + uuid2StringLE((GUID*)InterfaceUuid, guidBuffer2); + logger("Warning: Interface UUID is %s but should be %s in Ctx item %u.\n", guidBuffer1, guidBuffer2, (unsigned int)i); + } + + if (Request->CtxItems[i].NumTransItems != LE16(1)) + logger("Fatal: %u NDR32 transfer items detected in Ctx item %u, but only one is supported.\n", + (unsigned int)LE16(Request->CtxItems[i].NumTransItems), (unsigned int)i + ); + + if (Request->CtxItems[i].InterfaceVerMajor != LE16(1) || Request->CtxItems[i].InterfaceVerMinor != 0) + logger("Warning: NDR32 Interface version is %u.%u but should be 1.0.\n", + (unsigned int)LE16(Request->CtxItems[i].InterfaceVerMajor), + (unsigned int)LE16(Request->CtxItems[i].InterfaceVerMinor) + ); + + if (Request->CtxItems[i].ContextId != LE16((WORD)i)) + logger("Warning: context id of Ctx item %u is %u.\n", (unsigned int)i, (unsigned int)Request->CtxItems[i].ContextId); + + if ( IsEqualGUID((GUID*)TransferSyntaxNDR32, &Request->CtxItems[i].TransferSyntax) ) + { + HasTransferSyntaxNDR32 = TRUE; + + if (Request->CtxItems[i].SyntaxVersion != LE32(2)) + logger("NDR32 transfer syntax version is %u but should be 2.\n", LE32(Request->CtxItems[i].SyntaxVersion)); + } + else if ( IsEqualGUID((GUID*)TransferSyntaxNDR64, &Request->CtxItems[i].TransferSyntax) ) + { + if (Request->CtxItems[i].SyntaxVersion != LE32(1)) + logger("NDR64 transfer syntax version is %u but should be 1.\n", LE32(Request->CtxItems[i].SyntaxVersion)); + } + else if (!memcmp(BindTimeFeatureNegotiation, (BYTE*)(&Request->CtxItems[i].TransferSyntax), 8)) + { + if (Request->CtxItems[i].SyntaxVersion != LE32(1)) + logger("BTFN syntax version is %u but should be 1.\n", LE32(Request->CtxItems[i].SyntaxVersion)); + } + } + + if (!HasTransferSyntaxNDR32) + logger("Warning: RPC bind request has no NDR32 CtxItem.\n"); +} +#endif // defined(_PEDANTIC) && !defined(NO_LOG) + + +/* + * Check, if we receive enough bytes to return a valid RPC bind response + */ +static unsigned int checkRpcBindSize(const RPC_BIND_REQUEST *const Request, const unsigned int RequestSize, WORD* NdrCtx, WORD* Ndr64Ctx) +{ + if ( RequestSize < sizeof(RPC_BIND_REQUEST) ) return FALSE; + + unsigned int _NumCtxItems = LE32(Request->NumCtxItems); + + if ( RequestSize < sizeof(RPC_BIND_REQUEST) - sizeof(Request->CtxItems[0]) + _NumCtxItems * sizeof(Request->CtxItems[0]) ) return FALSE; + + #if defined(_PEDANTIC) && !defined(NO_LOG) + CheckRpcBindRequest(Request, RequestSize); + #endif // defined(_PEDANTIC) && !defined(NO_LOG) + + return TRUE; +} + + +/* + * Accepts a bind or alter context request from the client and composes the bind response. + * Needs the socket because the tcp port number is part of the response. + * len is not used here. + * + * Returns TRUE on success. + */ +static int rpcBind(const RPC_BIND_REQUEST *const Request, RPC_BIND_RESPONSE* Response, const DWORD RpcAssocGroup, const SOCKET sock, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE packetType, const char* const ipstr_unused) +{ + unsigned int i, _st = FALSE; + DWORD numCtxItems = LE32(Request->NumCtxItems); + int_fast8_t IsNDR64possible = FALSE; + uint_fast8_t portNumberSize; + + socklen_t socklen; + struct sockaddr_storage addr; + + // M$ RPC does not do this. Pad bytes contain apparently random data + // memset(Response->SecondaryAddress, 0, sizeof(Response->SecondaryAddress)); + + socklen = sizeof addr; + + if ( + packetType == RPC_PT_ALTERCONTEXT_REQ || + getsockname(sock, (struct sockaddr*)&addr, &socklen) || + getnameinfo((struct sockaddr*)&addr, socklen, NULL, 0, (char*)Response->SecondaryAddress, sizeof(Response->SecondaryAddress), NI_NUMERICSERV)) + { + portNumberSize = Response->SecondaryAddressLength = 0; + } + else + { + portNumberSize = strlen((char*)Response->SecondaryAddress) + 1; + Response->SecondaryAddressLength = LE16(portNumberSize); + } + + Response->MaxXmitFrag = Request->MaxXmitFrag; + Response->MaxRecvFrag = Request->MaxRecvFrag; + Response->AssocGroup = LE32(RpcAssocGroup); + + // This is really ugly (but efficient) code to support padding after the secondary address field + if (portNumberSize < 3) + { + Response = (RPC_BIND_RESPONSE*)((BYTE*)Response - 4); + } + + Response->NumResults = Request->NumCtxItems; + + if (UseRpcNDR64) + { + for (i = 0; i < numCtxItems; i++) + { + if ( IsEqualGUID((GUID*)TransferSyntaxNDR32, &Request->CtxItems[i].TransferSyntax) ) + { + /*if (packetType == RPC_PT_BIND_REQ)*/ + *NdrCtx = LE16(Request->CtxItems[i].ContextId); + } + + if ( IsEqualGUID((GUID*)TransferSyntaxNDR64, &Request->CtxItems[i].TransferSyntax) ) + { + IsNDR64possible = TRUE; + + /*if (packetType == RPC_PT_BIND_REQ)*/ + *Ndr64Ctx = LE16(Request->CtxItems[i].ContextId); + } + } + } + + for (i = 0; i < numCtxItems; i++) + { + memset(&Response->Results[i].TransferSyntax, 0, sizeof(GUID)); + + if ( !IsNDR64possible && IsEqualGUID((GUID*)TransferSyntaxNDR32, &Request->CtxItems[i].TransferSyntax) ) + { + Response->Results[i].SyntaxVersion = LE32(2); + Response->Results[i].AckResult = + Response->Results[i].AckReason = RPC_BIND_ACCEPT; + memcpy(&Response->Results[i].TransferSyntax, TransferSyntaxNDR32, sizeof(GUID)); + + _st = TRUE; + } + else if ( IsNDR64possible && IsEqualGUID((GUID*)TransferSyntaxNDR64, &Request->CtxItems[i].TransferSyntax) ) + { + Response->Results[i].SyntaxVersion = LE32(1); + Response->Results[i].AckResult = + Response->Results[i].AckReason = RPC_BIND_ACCEPT; + memcpy(&Response->Results[i].TransferSyntax, TransferSyntaxNDR64, sizeof(GUID)); + + _st = TRUE; + } + else if ( UseRpcBTFN && !memcmp(BindTimeFeatureNegotiation, (BYTE*)(&Request->CtxItems[i].TransferSyntax), 8) ) + { + Response->Results[i].SyntaxVersion = 0; + Response->Results[i].AckResult = RPC_BIND_ACK; + + // Features requested are actually encoded in the GUID + Response->Results[i].AckReason = + ((WORD*)(&Request->CtxItems[i].TransferSyntax))[4] & + (RPC_BTFN_SEC_CONTEXT_MULTIPLEX | RPC_BTFN_KEEP_ORPHAN); + } + else + { + Response->Results[i].SyntaxVersion = 0; + Response->Results[i].AckResult = + Response->Results[i].AckReason = RPC_BIND_NACK; // Unsupported + } + } + + if ( !_st ) return 0; + + return sizeof(RPC_BIND_RESPONSE) + numCtxItems * sizeof(((RPC_BIND_RESPONSE *)0)->Results[0]) - (portNumberSize < 3 ? 4 : 0); +} + + +// +// Main RPC handling routine +// +typedef unsigned int (*GetResponseSize_t)(const void *const request, const unsigned int requestSize, WORD* NdrCtx, WORD* Ndr64Ctx); +typedef int (*GetResponse_t)(const void* const request, void* response, const DWORD rpcAssocGroup, const SOCKET socket, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE packetType, const char* const ipstr); + +static const struct { + BYTE ResponsePacketType; + GetResponseSize_t CheckRequestSize; + GetResponse_t GetResponse; +} +_Actions[] = { + { RPC_PT_BIND_ACK, (GetResponseSize_t)checkRpcBindSize, (GetResponse_t) rpcBind }, + { RPC_PT_RESPONSE, (GetResponseSize_t)checkRpcRequestSize, (GetResponse_t) rpcRequest }, + { RPC_PT_ALTERCONTEXT_ACK, (GetResponseSize_t)checkRpcBindSize, (GetResponse_t) rpcBind }, +}; + + +/* + * This is the main RPC server loop. Returns after KMS request has been serviced + * or a timeout has occured. + */ +void rpcServer(const SOCKET sock, const DWORD RpcAssocGroup, const char* const ipstr) +{ + RPC_HEADER rpcRequestHeader; + WORD NdrCtx = INVALID_NDR_CTX, Ndr64Ctx = INVALID_NDR_CTX; + + randomNumberInit(); + + while (_recv(sock, &rpcRequestHeader, sizeof(rpcRequestHeader))) + { + //int_fast8_t _st; + unsigned int request_len, response_len; + uint_fast8_t _a; + + #if defined(_PEDANTIC) && !defined(NO_LOG) + checkRpcHeader(&rpcRequestHeader, rpcRequestHeader.PacketType, &logger); + #endif // defined(_PEDANTIC) && !defined(NO_LOG) + + switch (rpcRequestHeader.PacketType) + { + case RPC_PT_BIND_REQ: _a = 0; break; + case RPC_PT_REQUEST: _a = 1; break; + case RPC_PT_ALTERCONTEXT_REQ: _a = 2; break; + default: return; + } + + request_len = LE16(rpcRequestHeader.FragLength) - sizeof(rpcRequestHeader); + + BYTE requestBuffer[MAX_REQUEST_SIZE + sizeof(RPC_RESPONSE64)]; + BYTE responseBuffer[MAX_RESPONSE_SIZE + sizeof(RPC_HEADER) + sizeof(RPC_RESPONSE64)]; + + RPC_HEADER *rpcResponseHeader = (RPC_HEADER *)responseBuffer; + RPC_RESPONSE* rpcResponse = (RPC_RESPONSE*)(responseBuffer + sizeof(rpcRequestHeader)); + + // The request is larger than the buffer size + if (request_len > MAX_REQUEST_SIZE + sizeof(RPC_REQUEST64)) return; + + // Unable to receive the complete request + if (!_recv(sock, requestBuffer, request_len)) return; + + // Request is invalid + if (!_Actions[_a].CheckRequestSize(requestBuffer, request_len, &NdrCtx, &Ndr64Ctx)) return; + + // Unable to create a valid response from request + if (!(response_len = _Actions[_a].GetResponse(requestBuffer, rpcResponse, RpcAssocGroup, sock, &NdrCtx, &Ndr64Ctx, rpcRequestHeader.PacketType, ipstr))) return; + + response_len += sizeof(RPC_HEADER); + + memcpy(rpcResponseHeader, &rpcRequestHeader, sizeof(RPC_HEADER)); + + rpcResponseHeader->FragLength = LE16(response_len); + rpcResponseHeader->PacketType = _Actions[_a].ResponsePacketType; + + if (rpcResponseHeader->PacketType == RPC_PT_ALTERCONTEXT_ACK) + rpcResponseHeader->PacketFlags = RPC_PF_FIRST | RPC_PF_LAST; + + if (!_send(sock, responseBuffer, response_len)) return; + + if (DisconnectImmediately && rpcResponseHeader->PacketType == RPC_PT_RESPONSE) + shutdown(sock, VLMCSD_SHUT_RDWR); + } +} + + +/* RPC client functions */ + +static DWORD CallId = 2; // M$ starts with CallId 2. So we do the same. + + +/* + * Checks RPC header. Returns 0 on success. + * This is mainly for debugging a non Microsoft KMS server that uses its own RPC code. + */ +static int checkRpcHeader(const RPC_HEADER *const Header, const BYTE desiredPacketType, const PRINTFUNC p) +{ + int status = 0; + + if (Header->PacketType != desiredPacketType) + { + p("Fatal: Received wrong RPC packet type. Expected %u but got %u\n", + (uint32_t)desiredPacketType, + Header->PacketType + ); + status = !0; + } + + if (Header->DataRepresentation != BE32(0x10000000)) + { + p("Fatal: RPC response does not conform to Microsoft's limited support of DCE RPC\n"); + status = !0; + } + + if (Header->AuthLength != 0) + { + p("Fatal: RPC response requests authentication\n"); + status = !0; + } + + // vlmcsd does not support fragmented packets (not yet neccassary) + if ( (Header->PacketFlags & (RPC_PF_FIRST | RPC_PF_LAST)) != (RPC_PF_FIRST | RPC_PF_LAST) ) + { + p("Fatal: RPC packet flags RPC_PF_FIRST and RPC_PF_LAST are not both set.\n"); + status = !0; + } + + if (Header->PacketFlags & RPC_PF_CANCEL_PENDING) p("Warning: %s should not be set\n", "RPC_PF_CANCEL_PENDING"); + if (Header->PacketFlags & RPC_PF_RESERVED) p("Warning: %s should not be set\n", "RPC_PF_RESERVED"); + if (Header->PacketFlags & RPC_PF_NOT_EXEC) p("Warning: %s should not be set\n", "RPC_PF_NOT_EXEC"); + if (Header->PacketFlags & RPC_PF_MAYBE) p("Warning: %s should not be set\n", "RPC_PF_MAYBE"); + if (Header->PacketFlags & RPC_PF_OBJECT) p("Warning: %s should not be set\n", "RPC_PF_OBJECT"); + + if (Header->VersionMajor != 5 || Header->VersionMinor != 0) + { + p("Fatal: Expected RPC version 5.0 and got %u.%u\n", Header->VersionMajor, Header->VersionMinor); + status = !0; + } + + return status; +} + + +/* + * Checks an RPC response header. Does basic header checks by calling checkRpcHeader() + * and then does additional checks if response header complies with the respective request header. + * PRINTFUNC p can be anything that has the same prototype as printf. + * Returns 0 on success. + */ +static int checkRpcResponseHeader(const RPC_HEADER *const ResponseHeader, const RPC_HEADER *const RequestHeader, const BYTE desiredPacketType, const PRINTFUNC p) +{ + static int_fast8_t WineBugDetected = FALSE; + int status = checkRpcHeader(ResponseHeader, desiredPacketType, p); + + if (desiredPacketType == RPC_PT_BIND_ACK) + { + if ((ResponseHeader->PacketFlags & RPC_PF_MULTIPLEX) != (RequestHeader->PacketFlags & RPC_PF_MULTIPLEX)) + { + p("Warning: RPC_PF_MULTIPLEX of RPC request and response should match\n"); + } + } + else + { + if (ResponseHeader->PacketFlags & RPC_PF_MULTIPLEX) + { + p("Warning: %s should not be set\n", "RPC_PF_MULTIPLEX"); + } + } + + if (!status && ResponseHeader->CallId == LE32(1)) + { + if (!WineBugDetected) + { + p("Warning: Buggy RPC of Wine detected. Call Id of Response is always 1\n"); + WineBugDetected = TRUE; + } + } + else if (ResponseHeader->CallId != RequestHeader->CallId) + { + p("Fatal: Sent Call Id %u but received answer for Call Id %u\n", + (uint32_t)LE32(RequestHeader->CallId), + (uint32_t)LE32(ResponseHeader->CallId) + ); + + status = !0; + } + + return status; +} + +/* + * Initializes an RPC request header as needed for KMS, i.e. packet always fits in one fragment. + * size cannot be greater than fragment length negotiated during RPC bind. + */ +static void createRpcRequestHeader(RPC_HEADER* RequestHeader, BYTE packetType, WORD size) +{ + RequestHeader->PacketType = packetType; + RequestHeader->PacketFlags = RPC_PF_FIRST | RPC_PF_LAST; + RequestHeader->VersionMajor = 5; + RequestHeader->VersionMinor = 0; + RequestHeader->AuthLength = 0; + RequestHeader->DataRepresentation = BE32(0x10000000); // Little endian, ASCII charset, IEEE floating point + RequestHeader->CallId = LE32(CallId); + RequestHeader->FragLength = LE16(size); +} + + +/* + * Sends a KMS request via RPC and receives a response. + * Parameters are raw (encrypted) reqeuests / responses. + * Returns 0 on success. + */ +RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const size_t requestSize, BYTE **KmsResponse, size_t *const responseSize) +{ + #define MAX_EXCESS_BYTES 16 + RPC_HEADER *RequestHeader, ResponseHeader; + RPC_REQUEST64 *RpcRequest; + RPC_RESPONSE64 _Response; + int status = 0; + int_fast8_t useNdr64 = UseRpcNDR64 && firstPacketSent; + size_t size = sizeof(RPC_HEADER) + (useNdr64 ? sizeof(RPC_REQUEST64) : sizeof(RPC_REQUEST)) + requestSize; + size_t responseSize2; + + *KmsResponse = NULL; + + BYTE *_Request = (BYTE*)vlmcsd_malloc(size); + + RequestHeader = (RPC_HEADER*)_Request; + RpcRequest = (RPC_REQUEST64*)(_Request + sizeof(RPC_HEADER)); + + createRpcRequestHeader(RequestHeader, RPC_PT_REQUEST, size); + + // Increment CallId for next Request + CallId++; + + RpcRequest->Opnum = 0; + + if (useNdr64) + { + RpcRequest->ContextId = LE16(1); // We negotiate NDR64 always as context 1 + RpcRequest->AllocHint = LE32(requestSize + sizeof(RpcRequest->Ndr64)); + RpcRequest->Ndr64.DataLength = LE64((uint64_t)requestSize); + RpcRequest->Ndr64.DataSizeIs = LE64((uint64_t)requestSize); + memcpy(RpcRequest->Ndr64.Data, KmsRequest, requestSize); + } + else + { + RpcRequest->ContextId = 0; // We negotiate NDR32 always as context 0 + RpcRequest->AllocHint = LE32(requestSize + sizeof(RpcRequest->Ndr)); + RpcRequest->Ndr.DataLength = LE32(requestSize); + RpcRequest->Ndr.DataSizeIs = LE32(requestSize); + memcpy(RpcRequest->Ndr.Data, KmsRequest, requestSize); + } + + for(;;) + { + int bytesread; + + if (!_send(sock, _Request, size)) + { + errorout("\nFatal: Could not send RPC request\n"); + status = !0; + break; + } + + if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER))) + { + errorout("\nFatal: No RPC response received from server\n"); + status = !0; + break; + } + + if ((status = checkRpcResponseHeader(&ResponseHeader, RequestHeader, RPC_PT_RESPONSE, &errorout))) break; + + size = useNdr64 ? sizeof(RPC_RESPONSE64) : sizeof(RPC_RESPONSE); + + if (size > LE16(ResponseHeader.FragLength) - sizeof(ResponseHeader)) + size = LE16(ResponseHeader.FragLength) - sizeof(ResponseHeader); + + if (!_recv(sock, &_Response, size)) + { + errorout("\nFatal: RPC response is incomplete\n"); + status = !0; + break; + } + + if (_Response.CancelCount != 0) + { + errorout("\nFatal: RPC response cancel count is not 0\n"); + status = !0; + } + + if (_Response.ContextId != (useNdr64 ? LE16(1) : 0)) + { + errorout("\nFatal: RPC response context id %u is not bound\n", (unsigned int)LE16(_Response.ContextId)); + status = !0; + } + + int_fast8_t sizesMatch; + + if (useNdr64) + { + *responseSize = (size_t)LE64(_Response.Ndr64.DataLength); + responseSize2 = (size_t)LE64(_Response.Ndr64.DataSizeIs); + + if (!*responseSize || !_Response.Ndr64.DataSizeMax) + { + status = (int)LE32(_Response.Ndr64.status); + break; + } + + sizesMatch = (size_t)LE64(_Response.Ndr64.DataLength) == responseSize2; + } + else + { + *responseSize = (size_t)LE32(_Response.Ndr.DataLength); + responseSize2 = (size_t)LE32(_Response.Ndr.DataSizeIs); + + if (!*responseSize || !_Response.Ndr.DataSizeMax) + { + status = (int)LE32(_Response.Ndr.status); + break; + } + + sizesMatch = (size_t)LE32(_Response.Ndr.DataLength) == responseSize2; + } + + if (!sizesMatch) + { + errorout("\nFatal: NDR data length (%u) does not match NDR data size (%u)\n", + (uint32_t)*responseSize, + (uint32_t)LE32(_Response.Ndr.DataSizeIs) + ); + + status = !0; + } + + *KmsResponse = (BYTE*)vlmcsd_malloc(*responseSize + MAX_EXCESS_BYTES); + + // If RPC stub is too short, assume missing bytes are zero (same ill behavior as MS RPC) + memset(*KmsResponse, 0, *responseSize + MAX_EXCESS_BYTES); + + // Read up to 16 bytes more than bytes expected to detect faulty KMS emulators + if ((bytesread = recv(sock, (char*)*KmsResponse, *responseSize + MAX_EXCESS_BYTES, 0)) < (int)*responseSize) + { + errorout("\nFatal: No or incomplete KMS response received. Required %u bytes but only got %i\n", + (uint32_t)*responseSize, + (int32_t)(bytesread < 0 ? 0 : bytesread) + ); + + status = !0; + break; + } + + DWORD *pReturnCode; + + size_t len = *responseSize + (useNdr64 ? sizeof(_Response.Ndr64) : sizeof(_Response.Ndr)) + sizeof(*pReturnCode); + size_t pad = ((~len & 3) + 1) & 3; + + if (len + pad != LE32(_Response.AllocHint)) + { + errorout("\nWarning: RPC stub size is %u, should be %u (probably incorrect padding)\n", (uint32_t)LE32(_Response.AllocHint), (uint32_t)(len + pad)); + } + else + { + size_t i; + for (i = 0; i < pad; i++) + { + if (*(*KmsResponse + *responseSize + sizeof(*pReturnCode) + i)) + { + errorout("\nWarning: RPC stub data not padded to zeros according to Microsoft standard\n"); + break; + } + } + } + + pReturnCode = (DWORD*)(*KmsResponse + *responseSize + pad); + status = LE32(UA32(pReturnCode)); + + if (status) errorout("\nWarning: RPC stub data reported Error %u\n", (uint32_t)status); + + break; + } + + free(_Request); + firstPacketSent = TRUE; + return status; + #undef MAX_EXCESS_BYTES +} + + +static int_fast8_t IsNullGuid(BYTE* guidPtr) +{ + int_fast8_t i; + + for (i = 0; i < 16; i++) + { + if (guidPtr[i]) return FALSE; + } + + return TRUE; +} + +/* + * Perform RPC client bind. Accepts a connected client socket. + * Returns 0 on success. RPC binding is required before any payload can be + * exchanged. It negotiates about protocol details. + */ +RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const int_fast8_t verbose) +{ + RPC_HEADER *RequestHeader, ResponseHeader; + RPC_BIND_REQUEST *bindRequest; + RPC_BIND_RESPONSE *bindResponse; + int status; + WORD ctxItems = 1 + (packetType == RPC_PT_BIND_REQ ? UseRpcNDR64 + UseRpcBTFN : 0); + size_t rpcBindSize = (sizeof(RPC_HEADER) + sizeof(RPC_BIND_REQUEST) + (ctxItems - 1) * sizeof(bindRequest->CtxItems[0])); + WORD ctxIndex = 0; + WORD i; + WORD CtxBTFN = (WORD)~0, CtxNDR64 = (WORD)~0; + BYTE _Request[rpcBindSize]; + + RequestHeader = (RPC_HEADER*)_Request; + bindRequest = (RPC_BIND_REQUEST* )(_Request + sizeof(RPC_HEADER)); + + createRpcRequestHeader(RequestHeader, packetType, rpcBindSize); + RequestHeader->PacketFlags |= UseMultiplexedRpc ? RPC_PF_MULTIPLEX : 0; + + bindRequest->AssocGroup = 0; + bindRequest->MaxRecvFrag = bindRequest->MaxXmitFrag = LE16(5840); + bindRequest->NumCtxItems = LE32(ctxItems); + + // data that is identical in all Ctx items + for (i = 0; i < ctxItems; i++) + { + bindRequest->CtxItems[i].ContextId = LE16(i); + bindRequest->CtxItems[i].InterfaceVerMajor = LE16(1); + bindRequest->CtxItems[i].InterfaceVerMinor = 0; + bindRequest->CtxItems[i].NumTransItems = LE16(1); + bindRequest->CtxItems[i].SyntaxVersion = i ? LE32(1) : LE32(2); + + memcpy(&bindRequest->CtxItems[i].InterfaceUUID, InterfaceUuid, sizeof(GUID)); + } + + memcpy(&bindRequest->CtxItems[0].TransferSyntax, TransferSyntaxNDR32, sizeof(GUID)); + + if (UseRpcNDR64 && packetType == RPC_PT_BIND_REQ) + { + memcpy(&bindRequest->CtxItems[++ctxIndex].TransferSyntax, TransferSyntaxNDR64, sizeof(GUID)); + CtxNDR64 = ctxIndex; + } + + if (UseRpcBTFN && packetType == RPC_PT_BIND_REQ) + { + memcpy(&bindRequest->CtxItems[++ctxIndex].TransferSyntax, BindTimeFeatureNegotiation, sizeof(GUID)); + CtxBTFN = ctxIndex; + } + + if (!_send(sock, _Request, rpcBindSize)) + { + errorout("\nFatal: Sending RPC bind request failed\n"); + return !0; + } + + if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER))) + { + errorout("\nFatal: Did not receive a response from server\n"); + return !0; + } + + if ((status = checkRpcResponseHeader + ( + &ResponseHeader, + RequestHeader, + packetType == RPC_PT_BIND_REQ ? RPC_PT_BIND_ACK : RPC_PT_ALTERCONTEXT_ACK, + &errorout + ))) + { + return status; + } + + bindResponse = (RPC_BIND_RESPONSE*)vlmcsd_malloc(LE16(ResponseHeader.FragLength) - sizeof(RPC_HEADER)); + BYTE* bindResponseBytePtr = (BYTE*)bindResponse; + + if (!_recv(sock, bindResponse, LE16(ResponseHeader.FragLength) - sizeof(RPC_HEADER))) + { + errorout("\nFatal: Incomplete RPC bind acknowledgement received\n"); + free(bindResponseBytePtr); + return !0; + } + else + { + /* + * checking, whether a bind or alter context response is as expected. + * This check is very strict and checks whether a KMS emulator behaves exactly the same way + * as Microsoft's RPC does. + */ + status = 0; + + if (bindResponse->SecondaryAddressLength < LE16(3)) + bindResponse = (RPC_BIND_RESPONSE*)(bindResponseBytePtr - 4); + + if (bindResponse->NumResults != bindRequest->NumCtxItems) + { + errorout("\nFatal: Expected %u CTX items but got %u\n", + (uint32_t)LE32(bindRequest->NumCtxItems), + (uint32_t)LE32(bindResponse->NumResults) + ); + + status = !0; + } + + for (i = 0; i < ctxItems; i++) + { + const char* transferSyntaxName = + i == CtxBTFN ? "BTFN" : i == CtxNDR64 ? "NDR64" : "NDR32"; + + if (bindResponse->Results[i].AckResult == RPC_BIND_NACK) // transfer syntax was declined + { + if (!IsNullGuid((BYTE*)&bindResponse->Results[i].TransferSyntax)) + { + errorout( + "\nWarning: Rejected transfer syntax %s did not return NULL Guid\n", + transferSyntaxName + ); + } + + if (bindResponse->Results[i].SyntaxVersion) + { + errorout( + "\nWarning: Rejected transfer syntax %s did not return syntax version 0 but %u\n", + transferSyntaxName, + LE32(bindResponse->Results[i].SyntaxVersion) + ); + } + + if (bindResponse->Results[i].AckReason == RPC_ABSTRACTSYNTAX_UNSUPPORTED) + { + errorout( + "\nWarning: Transfer syntax %s does not support KMS activation\n", + transferSyntaxName + ); + } + else if (bindResponse->Results[i].AckReason != RPC_SYNTAX_UNSUPPORTED) + { + errorout( + "\nWarning: Rejected transfer syntax %s did not return ack reason RPC_SYNTAX_UNSUPPORTED\n", + transferSyntaxName + ); + } + + continue; + } + + if (i == CtxBTFN) // BTFN + { + if (bindResponse->Results[i].AckResult != RPC_BIND_ACK) + { + errorout("\nWarning: BTFN did not respond with RPC_BIND_ACK or RPC_BIND_NACK\n"); + } + + if (bindResponse->Results[i].AckReason != LE16(3)) + { + errorout("\nWarning: BTFN did not return expected feature mask 0x3 but 0x%X\n", (unsigned int)LE16(bindResponse->Results[i].AckReason)); + } + + if (verbose) printf("... BTFN "); + RpcFlags.HasBTFN = TRUE; + + continue; + } + + // NDR32 or NDR64 Ctx + if (bindResponse->Results[i].AckResult != RPC_BIND_ACCEPT) + { + errorout( + "\nFatal: transfer syntax %s returned an invalid status, neither RPC_BIND_ACCEPT nor RPC_BIND_NACK\n", + transferSyntaxName + ); + + status = !0; + } + + if (!IsEqualGUID(&bindResponse->Results[i].TransferSyntax, &bindRequest->CtxItems[i].TransferSyntax)) + { + errorout( + "\nFatal: Transfer syntax of RPC bind request and response does not match\n" + ); + + status = !0; + } + + if (bindResponse->Results[i].SyntaxVersion != bindRequest->CtxItems[i].SyntaxVersion) + { + errorout("\nFatal: Expected transfer syntax version %u for %s but got %u\n", + (uint32_t)LE32(bindRequest->CtxItems[0].SyntaxVersion), + transferSyntaxName, + (uint32_t)LE32(bindResponse->Results[0].SyntaxVersion) + ); + + status = !0; + } + + // The ack reason field is actually undefined here but Microsoft sets this to 0 + if (bindResponse->Results[i].AckReason != 0) + { + errorout( + "\nWarning: Ack reason should be 0 but is %u\n", + LE16(bindResponse->Results[i].AckReason) + ); + } + + if (!status) + { + if (i == CtxNDR64) + { + RpcFlags.HasNDR64 = TRUE; + if (verbose) printf("... NDR64 "); + } + if (!i) + { + RpcFlags.HasNDR32 = TRUE; + if (verbose) printf("... NDR32 "); + } + + } + } + } + + free(bindResponseBytePtr); + + if (!RpcFlags.HasNDR64 && !RpcFlags.HasNDR32) + { + errorout("\nFatal: Could neither negotiate NDR32 nor NDR64 with the RPC server\n"); + status = !0; + } + + return status; +} + +RpcStatus rpcBindClient(const RpcCtx sock, const int_fast8_t verbose) +{ + firstPacketSent = FALSE; + RpcFlags.mask = 0; + + RpcStatus status = + rpcBindOrAlterClientContext(sock, RPC_PT_BIND_REQ, verbose); + + if (status) return status; + + if (!RpcFlags.HasNDR32) + status = rpcBindOrAlterClientContext(sock, RPC_PT_ALTERCONTEXT_REQ, verbose); + + return status; +} + +#endif // USE_MSRPC +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#if !defined(_CRYPTO_OPENSSL) && !defined(_CRYPTO_POLARSSL) && !defined(_CRYPTO_WINDOWS) +#include "crypto_internal.h" +#include "endian.h" + +#define F0(x, y, z) ( ((x) & (y)) | (~(x) & (z)) ) +#define F1(x, y, z) ( ((x) & (y)) | ((x) & (z)) | ((y) & (z)) ) + +#define SI1(x) ( ROR32(x, 2 ) ^ ROR32(x, 13) ^ ROR32(x, 22) ) +#define SI2(x) ( ROR32(x, 6 ) ^ ROR32(x, 11) ^ ROR32(x, 25) ) +#define SI3(x) ( ROR32(x, 7 ) ^ ROR32(x, 18) ^ ((x) >> 3 ) ) +#define SI4(x) ( ROR32(x, 17) ^ ROR32(x, 19) ^ ((x) >> 10) ) + +static const DWORD k[] = { + 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, + 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, + 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, + 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, + 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, + 0x06CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, + 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, + 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, + 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, + 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, + 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 +}; + + +static void Sha256Init(Sha256Ctx *Ctx) +{ + Ctx->State[0] = 0x6A09E667; + Ctx->State[1] = 0xBB67AE85; + Ctx->State[2] = 0x3C6EF372; + Ctx->State[3] = 0xA54FF53A; + Ctx->State[4] = 0x510E527F; + Ctx->State[5] = 0x9B05688C; + Ctx->State[6] = 0x1F83D9AB; + Ctx->State[7] = 0x5BE0CD19; + Ctx->Len = 0; +} + + +static void Sha256ProcessBlock(Sha256Ctx *Ctx, BYTE *block) +{ + unsigned int i; + DWORD w[64], temp1, temp2; + DWORD a = Ctx->State[0]; + DWORD b = Ctx->State[1]; + DWORD c = Ctx->State[2]; + DWORD d = Ctx->State[3]; + DWORD e = Ctx->State[4]; + DWORD f = Ctx->State[5]; + DWORD g = Ctx->State[6]; + DWORD h = Ctx->State[7]; + + for (i = 0; i < 16; i++) + //w[ i ] = GET_UAA32BE(block, i); + w[i] = BE32(((DWORD*)block)[i]); + + for (i = 16; i < 64; i++) + w[ i ] = SI4(w[ i - 2 ]) + w[ i - 7 ] + SI3(w[ i - 15 ]) + w[ i - 16 ]; + + for (i = 0; i < 64; i++) + { + temp1 = h + SI2(e) + F0(e, f, g) + k[ i ] + w[ i ]; + temp2 = SI1(a) + F1(a, b, c); + + h = g; + g = f; + f = e; + e = d + temp1; + d = c; + c = b; + b = a; + a = temp1 + temp2; + } + + Ctx->State[0] += a; + Ctx->State[1] += b; + Ctx->State[2] += c; + Ctx->State[3] += d; + Ctx->State[4] += e; + Ctx->State[5] += f; + Ctx->State[6] += g; + Ctx->State[7] += h; +} + + +static void Sha256Update(Sha256Ctx *Ctx, BYTE *data, size_t len) +{ + unsigned int b_len = Ctx->Len & 63, + r_len = (b_len ^ 63) + 1; + + Ctx->Len += len; + + if ( len < r_len ) + { + memcpy(Ctx->Buffer + b_len, data, len); + return; + } + + if ( r_len < 64 ) + { + memcpy(Ctx->Buffer + b_len, data, r_len); + len -= r_len; + data += r_len; + Sha256ProcessBlock(Ctx, Ctx->Buffer); + } + + for (; len >= 64; len -= 64, data += 64) + Sha256ProcessBlock(Ctx, data); + + if ( len ) memcpy(Ctx->Buffer, data, len); +} + + +static void Sha256Finish(Sha256Ctx *Ctx, BYTE *hash) +{ + unsigned int i, b_len = Ctx->Len & 63; + + Ctx->Buffer[ b_len ] = 0x80; + if ( b_len ^ 63 ) memset(Ctx->Buffer + b_len + 1, 0, b_len ^ 63); + + if ( b_len >= 56 ) + { + Sha256ProcessBlock(Ctx, Ctx->Buffer); + memset(Ctx->Buffer, 0, 56); + } + + //PUT_UAA64BE(Ctx->Buffer, (unsigned long long)(Ctx->Len * 8), 7); + ((uint64_t*)Ctx->Buffer)[7] = BE64((uint64_t)Ctx->Len << 3); + Sha256ProcessBlock(Ctx, Ctx->Buffer); + + for (i = 0; i < 8; i++) + //PUT_UAA32BE(hash, Ctx->State[i], i); + ((DWORD*)hash)[i] = BE32(Ctx->State[i]); + +} + + +void Sha256(BYTE *data, size_t len, BYTE *hash) +{ + Sha256Ctx Ctx; + + Sha256Init(&Ctx); + Sha256Update(&Ctx, data, len); + Sha256Finish(&Ctx, hash); +} + + +static void _Sha256HmacInit(Sha256HmacCtx *Ctx, BYTE *key, size_t klen) +{ + BYTE IPad[64]; + unsigned int i; + + memset(IPad, 0x36, sizeof(IPad)); + memset(Ctx->OPad, 0x5C, sizeof(Ctx->OPad)); + + if ( klen > 64 ) + { + BYTE *temp = (BYTE*)alloca(32); + Sha256(key, klen, temp); + klen = 32; + key = temp; + } + + for (i = 0; i < klen; i++) + { + IPad[ i ] ^= key[ i ]; + Ctx->OPad[ i ] ^= key[ i ]; + } + + Sha256Init(&Ctx->ShaCtx); + Sha256Update(&Ctx->ShaCtx, IPad, sizeof(IPad)); +} + + +static void _Sha256HmacUpdate(Sha256HmacCtx *Ctx, BYTE *data, size_t len) +{ + Sha256Update(&Ctx->ShaCtx, data, len); +} + + +static void _Sha256HmacFinish(Sha256HmacCtx *Ctx, BYTE *hmac) +{ + BYTE temp[32]; + + Sha256Finish(&Ctx->ShaCtx, temp); + Sha256Init(&Ctx->ShaCtx); + Sha256Update(&Ctx->ShaCtx, Ctx->OPad, sizeof(Ctx->OPad)); + Sha256Update(&Ctx->ShaCtx, temp, sizeof(temp)); + Sha256Finish(&Ctx->ShaCtx, hmac); +} + + + +int_fast8_t Sha256Hmac(BYTE* key, BYTE* restrict data, DWORD len, BYTE* restrict hmac) +{ + Sha256HmacCtx Ctx; + _Sha256HmacInit(&Ctx, key, 16); + _Sha256HmacUpdate(&Ctx, data, len); + _Sha256HmacFinish(&Ctx, hmac); + return TRUE; +} + + +#endif // No external Crypto + +/* + * dns_srv.c + * + * This file contains the code for KMS SRV record lookup in DNS (_vlmcs._tcp.example.com IN SRV 0 0 1688 mykms.example.com) + * + */ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef NO_DNS + +#include "dns_srv.h" + +#include +#include +#ifndef _WIN32 +#include +#include +#include +#include +#include +//#ifndef DNS_PARSER_INTERNAL +#if __ANDROID__ +#include +#include "nameser.h" +#include "resolv.h" +#else // other Unix non-Android +#include +#include +#include +#endif // other Unix non-Android +//#endif // DNS_PARSER_INTERNAL +#else // WIN32 +#include +#endif // WIN32 + +#include "helpers.h" +#include "output.h" +#include "endian.h" + +#if defined(DNS_PARSER_INTERNAL) && !defined(_WIN32) + +#include "ns_name.h" +#include "ns_parse.h" + +// Define macros to redirect DNS parser functions to internal versions + +#undef ns_msg +#undef ns_initparse +#undef ns_parserr +#undef ns_rr +#undef ns_name_uncompress +#undef ns_msg_base +#undef ns_msg_end +#undef ns_rr_rdata +#undef ns_rr_type +#undef ns_msg_count +#undef ns_rr_class +#undef ns_s_an +#define ns_msg ns_msg_vlmcsd +#define ns_initparse ns_initparse_vlmcsd +#define ns_parserr ns_parserr_vlmcsd +#define ns_rr ns_rr_vlmcsd +#define ns_name_uncompress ns_name_uncompress_vlmcsd +#define ns_msg_base ns_msg_base_vlmcsd +#define ns_msg_end ns_msg_end_vlmcsd +#define ns_rr_rdata ns_rr_rdata_vlmcsd +#define ns_rr_type ns_rr_type_vlmcsd +#define ns_msg_count ns_msg_count_vlmcsd +#define ns_rr_class ns_rr_class_vlmcsd +#define ns_s_an ns_s_an_vlmcsd + +#ifndef NS_MAXLABEL +#define NS_MAXLABEL 63 +#endif + +#endif // defined(DNS_PARSER_INTERNAL) && !defined(_WIN32) + + +//TODO: maybe move to helpers.c +static unsigned int isqrt(unsigned int n) +{ + unsigned int c = 0x8000; + unsigned int g = 0x8000; + + for(;;) + { + if(g*g > n) + g ^= c; + + c >>= 1; + + if(c == 0) return g; + + g |= c; + } +} + + +/* + * Compare function for qsort to sort SRV records by priority and weight + * random_weight must be product of weight from SRV record and square root of a random number + */ +static int kmsServerListCompareFunc1(const void* a, const void* b) +{ + if ( !a && !b) return 0; + if ( a && !b) return -1; + if ( !a && b) return 1; + + int priority_order = (int)((*(kms_server_dns_ptr*)a)->priority) - ((int)(*(kms_server_dns_ptr*)b)->priority); + + if (priority_order) return priority_order; + + return (int)((*(kms_server_dns_ptr*)b)->random_weight) - ((int)(*(kms_server_dns_ptr*)a)->random_weight); +} + +/* Sort resulting SRV records */ +void sortSrvRecords(kms_server_dns_ptr* serverlist, const int answers) +{ + int i; + + for (i = 0; i < answers; i++) + { + serverlist[i]->random_weight = (rand32() % 256) * isqrt(serverlist[i]->weight * 1000); + } + + qsort(serverlist, answers, sizeof(kms_server_dns_ptr), kmsServerListCompareFunc1); +} + + +#define RECEIVE_BUFFER_SIZE 2048 +#ifndef _WIN32 // UNIX resolver + +/* + * Retrieves a raw DNS answer (a buffer of what came over the net) + * Result must be parsed + */ +static int getDnsRawAnswer(const char *restrict query, unsigned char** receive_buffer) +{ + if (res_init() < 0) + { + errorout("Cannot initialize resolver: %s", strerror(errno)); + return 0; + } + + //if(!(*receive_buffer = (unsigned char*)malloc(RECEIVE_BUFFER_SIZE))) OutOfMemory(); + *receive_buffer = (unsigned char*)vlmcsd_malloc(RECEIVE_BUFFER_SIZE); + + int bytes_received; + + if (*query == '.') + { +# if __ANDROID__ || __GLIBC__ /* including __UCLIBC__*/ || __APPLE__ || __CYGWIN__ || __FreeBSD__ || __NetBSD__ || __DragonFly__ || __OpenBSD__ || __sun__ + bytes_received = res_querydomain("_vlmcs._tcp", query + 1, ns_c_in, ns_t_srv, *receive_buffer, RECEIVE_BUFFER_SIZE); +# else + char* querystring = (char*)alloca(strlen(query) + 12); + strcpy(querystring, "_vlmcs._tcp"); + strcat(querystring, query); + bytes_received = res_query(querystring, C_IN, ns_t_srv, *receive_buffer, RECEIVE_BUFFER_SIZE); +# endif + } + else + { + bytes_received = res_search("_vlmcs._tcp", ns_c_in, ns_t_srv, *receive_buffer, RECEIVE_BUFFER_SIZE); + } + + if (bytes_received < 0) + { + errorout("Fatal: DNS query to %s%s failed: %s\n", "_vlmcs._tcp", *query == '.' ? query : "", hstrerror(h_errno)); + return 0; + } + + return bytes_received; +} + +/* + * Retrieves an unsorted array of SRV records (Unix / Posix) + */ +int getKmsServerList(kms_server_dns_ptr** serverlist, const char *restrict query) +{ + unsigned char* receive_buffer; + *serverlist = NULL; + + int bytes_received = getDnsRawAnswer(query, &receive_buffer); + + if (bytes_received == 0) return 0; + + ns_msg msg; + + if (ns_initparse(receive_buffer, bytes_received, &msg) < 0) + { + errorout("Fatal: Incorrect DNS response: %s\n", strerror(errno)); + free(receive_buffer); + return 0; + } + + uint16_t i, answers = ns_msg_count(msg, ns_s_an); + //if(!(*serverlist = (kms_server_dns_ptr*)malloc(answers * sizeof(kms_server_dns_ptr)))) OutOfMemory(); + *serverlist = (kms_server_dns_ptr*)malloc(answers * sizeof(kms_server_dns_ptr)); + + memset(*serverlist, 0, answers * sizeof(kms_server_dns_ptr)); + + for (i = 0; i < answers; i++) + { + ns_rr rr; + + if (ns_parserr(&msg, ns_s_an, i, &rr) < 0) + { + errorout("Warning: Error in DNS resource record: %s\n", strerror(errno)); + continue; + } + + if (ns_rr_type(rr) != ns_t_srv) + { + errorout("Warning: DNS server returned non-SRV record\n"); + continue; + } + + if (ns_rr_class(rr) != ns_c_in) + { + errorout("Warning: DNS server returned non-IN class record\n"); + continue; + } + + dns_srv_record_ptr srvrecord = (dns_srv_record_ptr)ns_rr_rdata(rr); + kms_server_dns_ptr kms_server = (kms_server_dns_ptr)vlmcsd_malloc(sizeof(kms_server_dns_t)); + + (*serverlist)[i] = kms_server; + + if (ns_name_uncompress(ns_msg_base(msg), ns_msg_end(msg), srvrecord->name, kms_server->serverName, sizeof(kms_server->serverName)) < 0) + { + errorout("Warning: No valid DNS name returned in SRV record: %s\n", strerror(errno)); + continue; + } + + sprintf(kms_server->serverName + strlen(kms_server->serverName), ":%hu", GET_UA16BE(&srvrecord->port)); + kms_server->priority = GET_UA16BE(&srvrecord->priority); + kms_server->weight = GET_UA16BE(&srvrecord->weight); + + } + + free(receive_buffer); + return answers; +} + +#else // WIN32 (Windows Resolver) + +/* + * Retrieves an unsorted array of SRV records (Windows) + */ +int getKmsServerList(kms_server_dns_ptr** serverlist, const char *const restrict query) +{ +# define MAX_DNS_NAME_SIZE 254 + *serverlist = NULL; + PDNS_RECORD receive_buffer; + char dnsDomain[MAX_DNS_NAME_SIZE]; + char FqdnQuery[MAX_DNS_NAME_SIZE]; + DWORD size = MAX_DNS_NAME_SIZE; + DNS_STATUS result; + int answers = 0; + PDNS_RECORD dns_iterator; + + if (*query == '-') + { + if (!GetComputerNameExA(ComputerNamePhysicalDnsDomain, dnsDomain, &size)) + { + errorout("Fatal: Could not determine computer's DNS name: %s\n", vlmcsd_strerror(GetLastError())); + return 0; + } + + strcpy(FqdnQuery, "_vlmcs._tcp."); + strncat(FqdnQuery, dnsDomain, MAX_DNS_NAME_SIZE - 12); + } + else + { + strcpy(FqdnQuery, "_vlmcs._tcp"); + strncat(FqdnQuery, query, MAX_DNS_NAME_SIZE - 11); + } + + if ((result = DnsQuery_UTF8(FqdnQuery, DNS_TYPE_SRV, 0, NULL, &receive_buffer, NULL)) != 0) + { + errorout("Fatal: DNS query to %s failed: %s\n", FqdnQuery, vlmcsd_strerror(result)); + return 0; + } + + for (dns_iterator = receive_buffer; dns_iterator; dns_iterator = dns_iterator->pNext) + { + if (dns_iterator->Flags.S.Section != 1) continue; + + if (dns_iterator->wType != DNS_TYPE_SRV) + { + errorout("Warning: DNS server returned non-SRV record\n"); + continue; + } + + answers++; + } + + *serverlist = (kms_server_dns_ptr*)vlmcsd_malloc(answers * sizeof(kms_server_dns_ptr)); + + for (answers = 0, dns_iterator = receive_buffer; dns_iterator; dns_iterator = dns_iterator->pNext) + { + if (dns_iterator->wType != DNS_TYPE_SRV) continue; + + kms_server_dns_ptr kms_server = (kms_server_dns_ptr)vlmcsd_malloc(sizeof(kms_server_dns_t)); + + memset(kms_server, 0, sizeof(kms_server_dns_t)); + + snprintf(kms_server->serverName, sizeof(kms_server->serverName), "%s:%hu", dns_iterator->Data.SRV.pNameTarget, dns_iterator->Data.SRV.wPort); + kms_server->priority = dns_iterator->Data.SRV.wPriority; + kms_server->weight = dns_iterator->Data.SRV.wWeight; + + (*serverlist)[answers++] = kms_server; + } + + //sortSrvRecords(*serverlist, answers, NoSrvRecordPriority); + + DnsRecordListFree(receive_buffer, DnsFreeRecordList); + + return answers; +# undef MAX_DNS_NAME_SIZE +} +#endif // _WIN32 +#undef RECEIVE_BUFFER_SIZE +#endif // NO_DNS + + +/* + * Copyright (c) 1996,1999 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +/* + * Modified by Hotbird64 for use with vlmcs. + */ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifdef DNS_PARSER_INTERNAL +#ifndef NO_DNS + +/* Import. */ + +#include +#include +#include + +#include "types.h" +#include "endian.h" +#include "ns_name.h" +#include "ns_parse.h" + +/* Macros. */ + +#define NS_GET16_VLMCSD(s, cp) do { \ + (s) = GET_UA16BE(cp); \ + (cp) += NS_INT16SZ; \ +} while (0) + +#define NS_GET32_VLMCSD(l, cp) do { \ + (l) = GET_UA32BE(cp); \ + (cp) += NS_INT32SZ; \ +} while (0) + +#define RETERR(err) do { errno = (err); return (-1); } while (0) + +/* Forward. */ + +static void setsection_vlmcsd(ns_msg_vlmcsd *msg, ns_sect_vlmcsd sect); + + +static int dn_skipname_vlmcsd(const unsigned char *s, const unsigned char *end) +{ + const unsigned char *p; + for (p=s; p=192) + {if (p+1 0; count--) { + int b, rdlength; + + b = dn_skipname_vlmcsd(ptr, eom); + if (b < 0) + RETERR(EMSGSIZE); + ptr += b/*Name*/ + NS_INT16SZ/*Type*/ + NS_INT16SZ/*Class*/; + if (section != ns_s_qd_vlmcsd) { + if (ptr + NS_INT32SZ + NS_INT16SZ > eom) + RETERR(EMSGSIZE); + ptr += NS_INT32SZ/*TTL*/; + NS_GET16_VLMCSD(rdlength, ptr); + ptr += rdlength/*RData*/; + } + } + if (ptr > eom) + RETERR(EMSGSIZE); + return (ptr - optr); +} + +int +ns_initparse_vlmcsd(const uint8_t *msg, int msglen, ns_msg_vlmcsd *handle) { + const uint8_t *eom = msg + msglen; + int i; + + memset(handle, 0x5e, sizeof *handle); + handle->_msg = msg; + handle->_eom = eom; + if (msg + NS_INT16SZ > eom) + RETERR(EMSGSIZE); + NS_GET16_VLMCSD(handle->_id, msg); + if (msg + NS_INT16SZ > eom) + RETERR(EMSGSIZE); + NS_GET16_VLMCSD(handle->_flags, msg); + for (i = 0; i < ns_s_max_vlmcsd; i++) { + if (msg + NS_INT16SZ > eom) + RETERR(EMSGSIZE); + NS_GET16_VLMCSD(handle->_counts[i], msg); + } + for (i = 0; i < ns_s_max_vlmcsd; i++) + if (handle->_counts[i] == 0) + handle->_sections[i] = NULL; + else { + int b = ns_skiprr_vlmcsd(msg, eom, (ns_sect_vlmcsd)i, + handle->_counts[i]); + + if (b < 0) + return (-1); + handle->_sections[i] = msg; + msg += b; + } + if (msg > eom) + RETERR(EMSGSIZE); + handle->_eom = msg; + setsection_vlmcsd(handle, ns_s_max_vlmcsd); + return (0); +} + +int +ns_parserr_vlmcsd(ns_msg_vlmcsd *handle, ns_sect_vlmcsd section, int rrnum, ns_rr_vlmcsd *rr) { + int b; + + /* Make section right. */ + if (section >= ns_s_max_vlmcsd) + RETERR(ENODEV); + if (section != handle->_sect) + setsection_vlmcsd(handle, section); + + /* Make rrnum right. */ + if (rrnum == -1) + rrnum = handle->_rrnum; + if (rrnum < 0 || rrnum >= handle->_counts[(int)section]) + RETERR(ENODEV); + if (rrnum < handle->_rrnum) + setsection_vlmcsd(handle, section); + if (rrnum > handle->_rrnum) { + b = ns_skiprr_vlmcsd(handle->_msg_ptr, handle->_eom, section, + rrnum - handle->_rrnum); + + if (b < 0) + return (-1); + handle->_msg_ptr += b; + handle->_rrnum = rrnum; + } + + /* Do the parse. */ + b = ns_name_uncompress_vlmcsd(handle->_msg, handle->_eom, + handle->_msg_ptr, rr->name, NS_MAXDNAME); + if (b < 0) + return (-1); + handle->_msg_ptr += b; + if (handle->_msg_ptr + NS_INT16SZ + NS_INT16SZ > handle->_eom) + RETERR(EMSGSIZE); + NS_GET16_VLMCSD(rr->type, handle->_msg_ptr); + NS_GET16_VLMCSD(rr->rr_class, handle->_msg_ptr); + if (section == ns_s_qd_vlmcsd) { + rr->ttl = 0; + rr->rdlength = 0; + rr->rdata = NULL; + } else { + if (handle->_msg_ptr + NS_INT32SZ + NS_INT16SZ > handle->_eom) + RETERR(EMSGSIZE); + NS_GET32_VLMCSD(rr->ttl, handle->_msg_ptr); + NS_GET16_VLMCSD(rr->rdlength, handle->_msg_ptr); + if (handle->_msg_ptr + rr->rdlength > handle->_eom) + RETERR(EMSGSIZE); + rr->rdata = handle->_msg_ptr; + handle->_msg_ptr += rr->rdlength; + } + if (++handle->_rrnum > handle->_counts[(int)section]) + setsection_vlmcsd(handle, (ns_sect_vlmcsd)((int)section + 1)); + + /* All done. */ + return (0); +} + +/* Private. */ + +static void +setsection_vlmcsd(ns_msg_vlmcsd *msg, ns_sect_vlmcsd sect) { + msg->_sect = sect; + if (sect == ns_s_max_vlmcsd) { + msg->_rrnum = -1; + msg->_msg_ptr = NULL; + } else { + msg->_rrnum = 0; + msg->_msg_ptr = msg->_sections[(int)sect]; + } +} + +#endif // !NO_DNS +#endif // DNS_PARSER_INTERNAL +/* + * Copyright (c) 1996,1999 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +/* + * Modified by Hotbird64 for use with vlmcs. + */ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifdef DNS_PARSER_INTERNAL +#ifndef NO_DNS + +#include +#include +#include +#include +#include +#include +#include + +#include "types.h" +#include "ns_name.h" + +#ifdef SPRINTF_CHAR +# define SPRINTF(x) strlen(sprintf/**/x) +#else +# define SPRINTF(x) ((size_t)sprintf x) +#endif + +#define NS_TYPE_ELT 0x40 /* EDNS0 extended label type */ +#define DNS_LABELTYPE_BITSTRING 0x41 + +#define NS_MAXCDNAME 255 +#define NS_CMPRSFLGS 0xc0 + +/* Data. */ + +static char digits[] = "0123456789"; + + +/* Forward. */ + +static int special_vlmcsd(int); +static int printable_vlmcsd(int); +static int labellen_vlmcsd(const uint8_t *); +static int decode_bitstring_vlmcsd(const char **, char *, const char *); + +/* + * ns_name_ntop(src, dst, dstsiz) + * Convert an encoded domain name to printable ascii as per RFC1035. + * return: + * Number of bytes written to buffer, or -1 (with errno set) + * notes: + * The root is returned as "." + * All other domains are returned in non absolute form + */ +static int +ns_name_ntop_vlmcsd(const uint8_t *src, char *dst, size_t dstsiz) +{ + const uint8_t *cp; + char *dn, *eom; + uint8_t c; + uint32_t n; + int l; + + cp = src; + dn = dst; + eom = dst + dstsiz; + + while ((n = *cp++) != 0) { + if ((n & NS_CMPRSFLGS) == NS_CMPRSFLGS) { + /* Some kind of compression pointer. */ + errno = EMSGSIZE; + return (-1); + } + if (dn != dst) { + if (dn >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = '.'; + } + if ((l = labellen_vlmcsd(cp - 1)) < 0) { + errno = EMSGSIZE; /* XXX */ + return(-1); + } + if (dn + l >= eom) { + errno = EMSGSIZE; + return (-1); + } + if ((n & NS_CMPRSFLGS) == NS_TYPE_ELT) { + int m; + + if (n != DNS_LABELTYPE_BITSTRING) { + /* XXX: labellen should reject this case */ + errno = EINVAL; + return(-1); + } + if ((m = decode_bitstring_vlmcsd((const char **)&cp, dn, eom)) < 0) + { + errno = EMSGSIZE; + return(-1); + } + dn += m; + continue; + } + for ((void)NULL; l > 0; l--) { + c = *cp++; + if (special_vlmcsd(c)) { + if (dn + 1 >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = '\\'; + *dn++ = (char)c; + } else if (!printable_vlmcsd(c)) { + if (dn + 3 >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = '\\'; + *dn++ = digits[c / 100]; + *dn++ = digits[(c % 100) / 10]; + *dn++ = digits[c % 10]; + } else { + if (dn >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = (char)c; + } + } + } + if (dn == dst) { + if (dn >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = '.'; + } + if (dn >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = '\0'; + return (dn - dst); +} + +static int +ns_name_unpack_vlmcsd(const uint8_t *msg, const uint8_t *eom, const uint8_t *src, + uint8_t *dst, size_t dstsiz) +{ + const uint8_t *srcp, *dstlim; + uint8_t *dstp; + int n, len, checked, l; + + len = -1; + checked = 0; + dstp = dst; + srcp = src; + dstlim = dst + dstsiz; + if (srcp < msg || srcp >= eom) { + errno = EMSGSIZE; + return (-1); + } + /* Fetch next label in domain name. */ + while ((n = *srcp++) != 0) { + /* Check for indirection. */ + switch (n & NS_CMPRSFLGS) { + case 0: + case NS_TYPE_ELT: + /* Limit checks. */ + if ((l = labellen_vlmcsd(srcp - 1)) < 0) { + errno = EMSGSIZE; + return(-1); + } + if (dstp + l + 1 >= dstlim || srcp + l >= eom) { + errno = EMSGSIZE; + return (-1); + } + checked += l + 1; + *dstp++ = n; + memcpy(dstp, srcp, l); + dstp += l; + srcp += l; + break; + + case NS_CMPRSFLGS: + if (srcp >= eom) { + errno = EMSGSIZE; + return (-1); + } + if (len < 0) + len = srcp - src + 1; + srcp = msg + (((n & 0x3f) << 8) | (*srcp & 0xff)); + if (srcp < msg || srcp >= eom) { /* Out of range. */ + errno = EMSGSIZE; + return (-1); + } + checked += 2; + /* + * Check for loops in the compressed name; + * if we've looked at the whole message, + * there must be a loop. + */ + if (checked >= eom - msg) { + errno = EMSGSIZE; + return (-1); + } + break; + + default: + errno = EMSGSIZE; + return (-1); /* flag error */ + } + } + *dstp = '\0'; + if (len < 0) + len = srcp - src; + return (len); +} + + +/* + * ns_name_uncompress_vlmcsd(msg, eom, src, dst, dstsiz) + * Expand compressed domain name to presentation format. + * return: + * Number of bytes read out of `src', or -1 (with errno set). + * note: + * Root domain returns as "." not "". + */ +int +ns_name_uncompress_vlmcsd(const uint8_t *msg, const uint8_t *eom, const uint8_t *src, + char *dst, size_t dstsiz) +{ + uint8_t tmp[NS_MAXCDNAME]; + int n; + + if ((n = ns_name_unpack_vlmcsd(msg, eom, src, tmp, sizeof tmp)) == -1) + return (-1); + if (ns_name_ntop_vlmcsd(tmp, dst, dstsiz) == -1) + return (-1); + return (n); +} + +/* + * special(ch) + * Thinking in noninternationalized USASCII (per the DNS spec), + * is this characted special ("in need of quoting") ? + * return: + * boolean. + */ +static int +special_vlmcsd(int ch) { + switch (ch) { + case 0x22: /* '"' */ + case 0x2E: /* '.' */ + case 0x3B: /* ';' */ + case 0x5C: /* '\\' */ + case 0x28: /* '(' */ + case 0x29: /* ')' */ + /* Special modifiers in zone files. */ + case 0x40: /* '@' */ + case 0x24: /* '$' */ + return (1); + default: + return (0); + } +} + +/* + * printable(ch) + * Thinking in noninternationalized USASCII (per the DNS spec), + * is this character visible and not a space when printed ? + * return: + * boolean. + */ +static int +printable_vlmcsd(int ch) { + return (ch > 0x20 && ch < 0x7f); +} + +static int +decode_bitstring_vlmcsd(const char **cpp, char *dn, const char *eom) +{ + const char *cp = *cpp; + char *beg = dn, tc; + int b, blen, plen; + + if ((blen = (*cp & 0xff)) == 0) + blen = 256; + plen = (blen + 3) / 4; + plen += sizeof("\\[x/]") + (blen > 99 ? 3 : (blen > 9) ? 2 : 1); + if (dn + plen >= eom) + return(-1); + + cp++; + dn += SPRINTF((dn, "\\[x")); + for (b = blen; b > 7; b -= 8, cp++) + dn += SPRINTF((dn, "%02x", *cp & 0xff)); + if (b > 4) { + tc = *cp++; + dn += SPRINTF((dn, "%02x", tc & (0xff << (8 - b)))); + } else if (b > 0) { + tc = *cp++; + dn += SPRINTF((dn, "%1x", + ((tc >> 4) & 0x0f) & (0x0f << (4 - b)))); + } + dn += SPRINTF((dn, "/%d]", blen)); + + *cpp = cp; + return(dn - beg); +} + +static int +labellen_vlmcsd(const uint8_t *lp) +{ + int bitlen; + uint8_t l = *lp; + + if ((l & NS_CMPRSFLGS) == NS_CMPRSFLGS) { + /* should be avoided by the caller */ + return(-1); + } + + if ((l & NS_CMPRSFLGS) == NS_TYPE_ELT) { + if (l == DNS_LABELTYPE_BITSTRING) { + if ((bitlen = *(lp + 1)) == 0) + bitlen = 256; + return((bitlen + 7 ) / 8 + 1); + } + return(-1); /* unknwon ELT */ + } + return(l); +} + +#endif // !NO_DNS +#endif // DNS_PARSER_INTERNAL diff --git a/vlmcsd.7 b/vlmcsd.7 new file mode 100644 index 0000000..f92ae6a --- /dev/null +++ b/vlmcsd.7 @@ -0,0 +1,137 @@ +.TH VLMCSD 7 "June 2014" "Hotbird64" "KMS Activation Manual" + +.SH NAME +vlmcsd\ \-\ a guide to KMS activation using vlmcsd + +.SH SYNOPSIS +.B vlmcsd +[ +.IR "options" " ] + +.SH DESCRIPTION +This manual describes the concepts of Microsoft KMS activation using \fBvlmcsd\fR. For detailed usage of \fBvlmcsd\fR see \fBvlmcsd\fR(8). + +.SS What is KMS? +KMS is a way to activate Microsoft products that was designed for medium and large businesses. In a standard SOHO environment you enter a product key during installation and then activate your product over the Internet. This is done by sending a request to a server at microsoft.com which then either grants or refuses activation. +.PP +By entering a special key called General Volume License Key (\fBGVLK\fR), a.k.a "KMS client key", the product no longer asks the Microsoft server for activation but a user-defined server (called the KMS server) which usually resides in a company's intranet. \fBvlmcsd\fR is an independent open source implementation of a KMS server that is available for everyone while Microsoft gives their KMS server only to corporations that signed a so called "Select contract". In addition \fBvlmcsd\fR never refuses activation while the Microsoft KMS server only activates the products the customer has paid for. +.PP +Product activation using \fBvlmcsd\fR is performed in three easy steps: +.IP 1) 3 +Run \fBvlmcsd\fR (or any other KMS emulator) on a computer in your network. This will be your KMS server. New users should simply run the program without any parameters. The defaults should fit the needs of most users. +.IP 2) 3 +Install your product and enter the GVLK when you are asked for a key +.IP 3) 3 +Configure your client (the machine where you installed your product) to use your KMS server. +.PP +However, when it comes to the details, some things turn out to be more difficult than you might think. +.PP +The most important thing to know is that KMS activation is not permanent. The computer remains activated for 180 days (30 or 45 days with consumer-only products). KMS activation however is not an evaluation license. You can repeat the activation anytime and as often as you like to extend activation to another 180 days. This normally happens automatically. For this to work, you have to ensure that a KMS server is always reachable for the clients on your network. +.PP +Beginning with Windows 8.1 the KMS server must be a different computer than the client. You cannot use \fBvlmcsd\fR on the same computer where you want to activate a product. If you have only one computer, you can run \fBvlmcsd\fR in a virtual machine. \fBvlmcsd\fR is also designed to run on "always-on devices", for example a router. The router becomes your KMS server then. + +.SS How to get a GVLK? +That is relatively simple. The GVLKs are published on Microsoft's Technet web site. +.PP +Windows: http://technet.microsoft.com/en-us/library/jj612867.aspx +.br +Office 2010: http://technet.microsoft.com/en-us/library/ee624355(v=office.14).aspx#section2_3 +.br +Office 2013: http://technet.microsoft.com/en-us/library/dn385360.aspx +.PP +These lists only include products that Microsoft sells to corporations via volume license contracts. For Windows there are inofficial GVLKs that work with consumer-only versions of Windows. Here is a list: +.PP +789NJ\-TQK6T\-6XTH8\-J39CJ\-J8D3P - Windows 8.1 Professional with Media Center +.br +M9Q9P\-WNJJT\-6PXPY\-DWX8H\-6XWKK - Windows 8.1 Core +.br +7B9N3\-D94CG\-YTVHR\-QBPX3\-RJP64 - Windows 8.1 Core N +.br +BB6NG\-PQ82V\-VRDPW\-8XVD2\-V8P66 - Windows 8.1 Core Single Language +.br +NCTT7\-2RGK8\-WMHRF\-RY7YQ\-JTXG3 - Windows 8.1 Core Country Specific +.br +GNBB8\-YVD74\-QJHX6\-27H4K\-8QHDG - Windows 8 Professional with Media Center +.br +BN3D2\-R7TKB\-3YPBD\-8DRP2\-27GG4 - Windows 8 Core +.br +8N2M2\-HWPGY\-7PGT9\-HGDD8\-GVGGY - Windows 8 Core N +.br +2WN2H\-YGCQR\-KFX6K\-CD6TF\-84YXQ - Windows 8 Core Single Language +.br +4K36P\-JN4VD\-GDC6V\-KDT89\-DYFKP - Windows 8 Core Country Specific +.PP +The above keys require activation renewal every 45 days (Win 8.1) or 30 days (Win 8). All GVLKs from the Microsoft Technet web site require renewal every 180 days. + +.SS What are SLMGR and OSPP and how to use them? +You will need these utilities later. So please continue reading this section. +.PP +These are two Visual Basic script utilities that are used to control Microsoft's Software Protection system. To use them open a Windows Command Prompt. slmgr.vbs is for Windows. ospp.vbs is for Office 2010 and 2013. These utilities are installed with Windows and Office and you don't need to download them. +.PP +slmgr.vbs resides in the system32 directory. So you just have to type "slmgr" in the Windows Command prompt to use it. To use ospp.vbs you'll have to change the current directory to your Office installation. This is usually something like "C:\eProgram\ Files\eMicrosoft\ Office\eOffice14". You may type "slmgr" or "cscript ospp.vbs" without parameters to see help for these commands but this produces some rather confusing output for newbies. + +.SS How to get the GVLK into the product? +Normally every product asks you to enter a key during installation. At this time simply enter the GVLK. If you skipped this step or entered some other key which later turned out to be non-working, you can use "slmgr\ /ipk\ \fIGVLK\fR" (Windows) or "cscript ospp.vbs\ /inpkey:\fIGVLK\fR" (Office) at any time. +.IP \fBExamples\fR +slmgr\ /ipk GCRJD\-8NW9H\-F2CDX\-CCM8D\-9D6T9 +.br +cscript ospp.vbs\ /inpkey:YC7DK\-G2NP3\-2QQC3\-J6H88\-GVGXT + +.SS Why doesn't Office accpet a GVLK? +You'll have to install a volume license (VL) version of Office. Office versions downloaded from MSDN and/or Technet are non-VL. + +.SS How to configure a client to use a KMS server? +After you have installed a GVLK you can set your product to use your KMS server. \fBvlmcsd\fR or another KMS server must already be running on your server machine. +.IP "\fBWindows\fR" 5 +.PP +Type "slmgr\ /skms\ \fIkms-server\fR[:\fItcp-port\fR]". Example: "slmgr\ /skms\ 192.168.1.17:1688" + +.IP "\fBOffice\fR" 5 +.IP 1) 3 +Type "cscript ospp.vbs\ /sethst:\fIkms-server\fR". Example "cscript ospp.vbs\ /sethst:192.168.1.17" +.IP 2) 3 +Type "cscript ospp.vbs\ /setprt:\fItcp-port\fR". Example: cscript ospp.vbs\ /setprt:1688 +.PP +\fItcp-port\fR is usually 1688 unless you instructed \fBvlmcsd\fR to use a different port which is rarely necessary. + +.SS How to activate my product? +If you have installed a product with GVLK and pointed it to working KMS server like \fBvlmcsd\fR, activation occurs automatically. This may take a while. +.IP "You may type" +slmgr\ /ato +.br +\-or\- +.br +cscript ospp.vbs\ /act +.PP +at any time to speed up that process. You may repeat these commands later to extend your activation for another 180 (45) days. + +.SS Does vlmcsd work correctly? +If something does not work, it may have the cause that \fRvlmcsd\fR does not work correctly although this is unlikely. You can test this with the KMS client \fBvlmcs\fR(1). First type "vlmcs" on the same machine where you started \fBvlmcsd\fR. If things are ok, you should see something like this: +.IP +Connecting to 127.0.0.1:1688 ... successful +.br +Sending\ activation\ request\ (KMS\ V4)\ 1\ of\ 1\ \-> 06401\-00206\-296\-206344\-03\-5179\-9600.0000\-3432013 +.PP +If anything goes wrong, you'll see an error message. Next try "vlmcs \fIkms-server\fR" from another machine where \fIkms-server\fR is the hostname or IP address of your KMS server. If that fails while it works locally, you'll most likely have to configure your firewall that it accepts incoming connections on TCP port 1688. + +.SS Is there an easier way than using OSPP and SLMGR? +Yes and no. KMS activation was designed for large corporations. Thus Microsoft designed KMS in a way that corporations can configure their network infrastructure to fully automate KMS activation. Since this involves DHCP and DNS, it is not that easy to accomplish that for home users. However, if you are using an open source router firmware like OpenWRT or DD-WRT, it is easy to customize DHCP and DNS. +.IP 1) 3 +Configure DHCP that it assigns a DNS domain name to your clients (if it doesn't already), e.g. my-home-net.local +.IP 2) 3 +Create zone my-home-net.local in your DNS server (if it doesn't exist already). +.IP 3) 3 +Add the following records to your DNS + +_vlmcs._tcp.my-home-net.local. 10800 IN SRV 100 100 kms1.my-home-net.local. +.br +kms1.my-home-net.local. 10800 IN A 192.168.1.17 + +Replace 192.168.1.17 with the IP address of your KMS server. If you don't like a cache time of 10800 seconds (3 hours), replace it with another number. +.PP +This causes that clients will find the KMS server automatically. + +.SH AUTHOR +This manual page was written by Hotbird64. +.SH SEE ALSO +\fBvlmcsd\fR(8), \fBvlmcs\fR(1) diff --git a/vlmcsd.7.dos.txt b/vlmcsd.7.dos.txt new file mode 100644 index 0000000..fb2efab --- /dev/null +++ b/vlmcsd.7.dos.txt @@ -0,0 +1,222 @@ +VLMCSD(7) KMS Activation Manual VLMCSD(7) + + + +NAME + vlmcsd - a guide to KMS activation using vlmcsd + + +SYNOPSIS + vlmcsd [ options ] + + +DESCRIPTION + This manual describes the concepts of Microsoft KMS activation using + vlmcsd. For detailed usage of vlmcsd see vlmcsd(8). + + + What is KMS? + KMS is a way to activate Microsoft products that was designed for + medium and large businesses. In a standard SOHO environment you enter a + product key during installation and then activate your product over the + Internet. This is done by sending a request to a server at micro‐ + soft.com which then either grants or refuses activation. + + By entering a special key called General Volume License Key (GVLK), + a.k.a "KMS client key", the product no longer asks the Microsoft server + for activation but a user-defined server (called the KMS server) which + usually resides in a company's intranet. vlmcsd is an independent open + source implementation of a KMS server that is available for everyone + while Microsoft gives their KMS server only to corporations that signed + a so called "Select contract". In addition vlmcsd never refuses activa‐ + tion while the Microsoft KMS server only activates the products the + customer has paid for. + + Product activation using vlmcsd is performed in three easy steps: + + 1) Run vlmcsd (or any other KMS emulator) on a computer in your net‐ + work. This will be your KMS server. New users should simply run the + program without any parameters. The defaults should fit the needs of + most users. + + 2) Install your product and enter the GVLK when you are asked for a key + + 3) Configure your client (the machine where you installed your product) + to use your KMS server. + + However, when it comes to the details, some things turn out to be more + difficult than you might think. + + The most important thing to know is that KMS activation is not perma‐ + nent. The computer remains activated for 180 days (30 or 45 days with + consumer-only products). KMS activation however is not an evaluation + license. You can repeat the activation anytime and as often as you like + to extend activation to another 180 days. This normally happens auto‐ + matically. For this to work, you have to ensure that a KMS server is + always reachable for the clients on your network. + + Beginning with Windows 8.1 the KMS server must be a different computer + than the client. You cannot use vlmcsd on the same computer where you + want to activate a product. If you have only one computer, you can run + vlmcsd in a virtual machine. vlmcsd is also designed to run on "always- + on devices", for example a router. The router becomes your KMS server + then. + + + How to get a GVLK? + That is relatively simple. The GVLKs are published on Microsoft's Tech‐ + net web site. + + Windows: http://technet.microsoft.com/en-us/library/jj612867.aspx + Office 2010: http://technet.microsoft.com/en- + us/library/ee624355(v=office.14).aspx#section2_3 + Office 2013: http://technet.microsoft.com/en-us/library/dn385360.aspx + + These lists only include products that Microsoft sells to corporations + via volume license contracts. For Windows there are inofficial GVLKs + that work with consumer-only versions of Windows. Here is a list: + + 789NJ-TQK6T-6XTH8-J39CJ-J8D3P - Windows 8.1 Professional with Media + Center + M9Q9P-WNJJT-6PXPY-DWX8H-6XWKK - Windows 8.1 Core + 7B9N3-D94CG-YTVHR-QBPX3-RJP64 - Windows 8.1 Core N + BB6NG-PQ82V-VRDPW-8XVD2-V8P66 - Windows 8.1 Core Single Language + NCTT7-2RGK8-WMHRF-RY7YQ-JTXG3 - Windows 8.1 Core Country Specific + GNBB8-YVD74-QJHX6-27H4K-8QHDG - Windows 8 Professional with Media Cen‐ + ter + BN3D2-R7TKB-3YPBD-8DRP2-27GG4 - Windows 8 Core + 8N2M2-HWPGY-7PGT9-HGDD8-GVGGY - Windows 8 Core N + 2WN2H-YGCQR-KFX6K-CD6TF-84YXQ - Windows 8 Core Single Language + 4K36P-JN4VD-GDC6V-KDT89-DYFKP - Windows 8 Core Country Specific + + The above keys require activation renewal every 45 days (Win 8.1) or 30 + days (Win 8). All GVLKs from the Microsoft Technet web site require + renewal every 180 days. + + + What are SLMGR and OSPP and how to use them? + You will need these utilities later. So please continue reading this + section. + + These are two Visual Basic script utilities that are used to control + Microsoft's Software Protection system. To use them open a Windows Com‐ + mand Prompt. slmgr.vbs is for Windows. ospp.vbs is for Office 2010 and + 2013. These utilities are installed with Windows and Office and you + don't need to download them. + + slmgr.vbs resides in the system32 directory. So you just have to type + "slmgr" in the Windows Command prompt to use it. To use ospp.vbs you'll + have to change the current directory to your Office installation. This + is usually something like "C:\Program Files\Microsoft Office\Office14". + You may type "slmgr" or "cscript ospp.vbs" without parameters to see + help for these commands but this produces some rather confusing output + for newbies. + + + How to get the GVLK into the product? + Normally every product asks you to enter a key during installation. At + this time simply enter the GVLK. If you skipped this step or entered + some other key which later turned out to be non-working, you can use + "slmgr /ipk GVLK" (Windows) or "cscript ospp.vbs /inpkey:GVLK" (Office) + at any time. + + Examples + slmgr /ipk GCRJD-8NW9H-F2CDX-CCM8D-9D6T9 + cscript ospp.vbs /inpkey:YC7DK-G2NP3-2QQC3-J6H88-GVGXT + + + Why doesn't Office accpet a GVLK? + You'll have to install a volume license (VL) version of Office. Office + versions downloaded from MSDN and/or Technet are non-VL. + + + How to configure a client to use a KMS server? + After you have installed a GVLK you can set your product to use your + KMS server. vlmcsd or another KMS server must already be running on + your server machine. + + Windows + + Type "slmgr /skms kms-server[:tcp-port]". Example: + "slmgr /skms 192.168.1.17:1688" + + + Office + + 1) Type "cscript ospp.vbs /sethst:kms-server". Example "cscript + ospp.vbs /sethst:192.168.1.17" + + 2) Type "cscript ospp.vbs /setprt:tcp-port". Example: cscript + ospp.vbs /setprt:1688 + + tcp-port is usually 1688 unless you instructed vlmcsd to use a differ‐ + ent port which is rarely necessary. + + + How to activate my product? + If you have installed a product with GVLK and pointed it to working KMS + server like vlmcsd, activation occurs automatically. This may take a + while. + + You may type + slmgr /ato + -or- + cscript ospp.vbs /act + + at any time to speed up that process. You may repeat these commands + later to extend your activation for another 180 (45) days. + + + Does vlmcsd work correctly? + If something does not work, it may have the cause that vlmcsd does not + work correctly although this is unlikely. You can test this with the + KMS client vlmcs(1). First type "vlmcs" on the same machine where you + started vlmcsd. If things are ok, you should see something like this: + + Connecting to 127.0.0.1:1688 ... successful + Sending activation request (KMS V4) 1 of 1 -> + 06401-00206-296-206344-03-5179-9600.0000-3432013 + + If anything goes wrong, you'll see an error message. Next try "vlmcs + kms-server" from another machine where kms-server is the hostname or IP + address of your KMS server. If that fails while it works locally, + you'll most likely have to configure your firewall that it accepts + incoming connections on TCP port 1688. + + + Is there an easier way than using OSPP and SLMGR? + Yes and no. KMS activation was designed for large corporations. Thus + Microsoft designed KMS in a way that corporations can configure their + network infrastructure to fully automate KMS activation. Since this + involves DHCP and DNS, it is not that easy to accomplish that for home + users. However, if you are using an open source router firmware like + OpenWRT or DD-WRT, it is easy to customize DHCP and DNS. + + 1) Configure DHCP that it assigns a DNS domain name to your clients (if + it doesn't already), e.g. my-home-net.local + + 2) Create zone my-home-net.local in your DNS server (if it doesn't + exist already). + + 3) Add the following records to your DNS + + _vlmcs._tcp.my-home-net.local. 10800 IN SRV 100 100 kms1.my-home- + net.local. + kms1.my-home-net.local. 10800 IN A 192.168.1.17 + + Replace 192.168.1.17 with the IP address of your KMS server. If you + don't like a cache time of 10800 seconds (3 hours), replace it with + another number. + + This causes that clients will find the KMS server automatically. + + +AUTHOR + This manual page was written by Hotbird64. + +SEE ALSO + vlmcsd(8), vlmcs(1) + + + +Hotbird64 June 2014 VLMCSD(7) diff --git a/vlmcsd.7.html b/vlmcsd.7.html new file mode 100644 index 0000000..5025e77 --- /dev/null +++ b/vlmcsd.7.html @@ -0,0 +1,413 @@ + + + + + + + + + +VLMCSD + + + + +

VLMCSD

+ +NAME
+SYNOPSIS
+DESCRIPTION
+AUTHOR
+SEE ALSO
+ +
+ + +

NAME + +

+ + + +

vlmcsd − a +guide to KMS activation using vlmcsd

+ +

SYNOPSIS + +

+ + +

vlmcsd [ +options ]

+ +

DESCRIPTION + +

+ + +

This manual +describes the concepts of Microsoft KMS activation using +vlmcsd. For detailed usage of vlmcsd see +vlmcsd(8).

+ +

What is +KMS?
+KMS is a way to activate Microsoft products that was +designed for medium and large businesses. In a standard SOHO +environment you enter a product key during installation and +then activate your product over the Internet. This is done +by sending a request to a server at microsoft.com which then +either grants or refuses activation.

+ +

By entering a +special key called General Volume License Key (GVLK), +a.k.a "KMS client key", the product no longer asks +the Microsoft server for activation but a user-defined +server (called the KMS server) which usually resides in a +company’s intranet. vlmcsd is an independent +open source implementation of a KMS server that is available +for everyone while Microsoft gives their KMS server only to +corporations that signed a so called "Select +contract". In addition vlmcsd never refuses +activation while the Microsoft KMS server only activates the +products the customer has paid for.

+ +

Product +activation using vlmcsd is performed in three easy +steps:

+ + + + + + + + + + + + + + + + + +
+ + +

1)

+ + +

Run vlmcsd (or any other KMS emulator) on a +computer in your network. This will be your KMS server. New +users should simply run the program without any parameters. +The defaults should fit the needs of most users.

+ + +

2)

+ + +

Install your product and enter the GVLK when you are +asked for a key

+ + +

3)

+ + +

Configure your client (the machine where you installed +your product) to use your KMS server.

+ +

However, when +it comes to the details, some things turn out to be more +difficult than you might think.

+ +

The most +important thing to know is that KMS activation is not +permanent. The computer remains activated for 180 days (30 +or 45 days with consumer-only products). KMS activation +however is not an evaluation license. You can repeat the +activation anytime and as often as you like to extend +activation to another 180 days. This normally happens +automatically. For this to work, you have to ensure that a +KMS server is always reachable for the clients on your +network.

+ +

Beginning with +Windows 8.1 the KMS server must be a different computer than +the client. You cannot use vlmcsd on the same +computer where you want to activate a product. If you have +only one computer, you can run vlmcsd in a virtual +machine. vlmcsd is also designed to run on +"always-on devices", for example a router. The +router becomes your KMS server then.

+ +

How to get a +GVLK?
+That is relatively simple. The GVLKs are published on +Microsoft’s Technet web site.

+ +

Windows: +http://technet.microsoft.com/en-us/library/jj612867.aspx +
+Office 2010: +http://technet.microsoft.com/en-us/library/ee624355(v=office.14).aspx#section2_3 +
+Office 2013: +http://technet.microsoft.com/en-us/library/dn385360.aspx

+ +

These lists +only include products that Microsoft sells to corporations +via volume license contracts. For Windows there are +inofficial GVLKs that work with consumer-only versions of +Windows. Here is a list:

+ + +

789NJ−TQK6T−6XTH8−J39CJ−J8D3P +- Windows 8.1 Professional with Media Center
+M9Q9P−WNJJT−6PXPY−DWX8H−6XWKK - +Windows 8.1 Core
+7B9N3−D94CG−YTVHR−QBPX3−RJP64 - +Windows 8.1 Core N
+BB6NG−PQ82V−VRDPW−8XVD2−V8P66 - +Windows 8.1 Core Single Language
+NCTT7−2RGK8−WMHRF−RY7YQ−JTXG3 - +Windows 8.1 Core Country Specific
+GNBB8−YVD74−QJHX6−27H4K−8QHDG - +Windows 8 Professional with Media Center
+BN3D2−R7TKB−3YPBD−8DRP2−27GG4 - +Windows 8 Core
+8N2M2−HWPGY−7PGT9−HGDD8−GVGGY - +Windows 8 Core N
+2WN2H−YGCQR−KFX6K−CD6TF−84YXQ - +Windows 8 Core Single Language
+4K36P−JN4VD−GDC6V−KDT89−DYFKP - +Windows 8 Core Country Specific

+ +

The above keys +require activation renewal every 45 days (Win 8.1) or 30 +days (Win 8). All GVLKs from the Microsoft Technet web site +require renewal every 180 days.

+ +

What are +SLMGR and OSPP and how to use them?
+You will need these utilities later. So please continue +reading this section.

+ +

These are two +Visual Basic script utilities that are used to control +Microsoft’s Software Protection system. To use them +open a Windows Command Prompt. slmgr.vbs is for Windows. +ospp.vbs is for Office 2010 and 2013. These utilities are +installed with Windows and Office and you don’t need +to download them.

+ +

slmgr.vbs +resides in the system32 directory. So you just have to type +"slmgr" in the Windows Command prompt to use it. +To use ospp.vbs you’ll have to change the current +directory to your Office installation. This is usually +something like +"C:\Program Files\Microsoft Office\Office14". +You may type "slmgr" or "cscript +ospp.vbs" without parameters to see help for these +commands but this produces some rather confusing output for +newbies.

+ +

How to get +the GVLK into the product?
+Normally every product asks you to enter a key during +installation. At this time simply enter the GVLK. If you +skipped this step or entered some other key which later +turned out to be non-working, you can use +"slmgr /ipk GVLK" (Windows) or +"cscript ospp.vbs /inpkey:GVLK" +(Office) at any time.
+Examples

+ +

slmgr /ipk +GCRJD−8NW9H−F2CDX−CCM8D−9D6T9
+cscript +ospp.vbs /inpkey:YC7DK−G2NP3−2QQC3−J6H88−GVGXT

+ +

Why +doesn’t Office accpet a GVLK?
+You’ll have to install a volume license (VL) version +of Office. Office versions downloaded from MSDN and/or +Technet are non-VL.

+ +

How to +configure a client to use a KMS server?
+After you have installed a GVLK you can set your product to +use your KMS server. vlmcsd or another KMS server +must already be running on your server machine.
+Windows

+ +

Type +"slmgr /skms kms-server[:tcp-port]". +Example: "slmgr /skms 192.168.1.17:1688" +
+Office

+ + + + + + + + + + + + +
+ + +

1)

+ + +

Type "cscript +ospp.vbs /sethst:kms-server". Example +"cscript ospp.vbs /sethst:192.168.1.17"

+ + +

2)

+ + +

Type "cscript +ospp.vbs /setprt:tcp-port". Example: +cscript ospp.vbs /setprt:1688

+ + +

tcp-port +is usually 1688 unless you instructed vlmcsd to use a +different port which is rarely necessary.

+ +

How to +activate my product?
+If you have installed a product with GVLK and pointed it to +working KMS server like vlmcsd, activation occurs +automatically. This may take a while.
+You may type

+ +

slmgr /ato
+−or−
+cscript ospp.vbs /act

+ +

at any time to +speed up that process. You may repeat these commands later +to extend your activation for another 180 (45) days.

+ +

Does vlmcsd +work correctly?
+If something does not work, it may have the cause that +vlmcsd does not work correctly although this is unlikely. +You can test this with the KMS client vlmcs(1). First +type "vlmcs" on the same machine where you started +vlmcsd. If things are ok, you should see something +like this:

+ +

Connecting to +127.0.0.1:1688 ... successful
+ +Sending activation request (KMS V4) 1 of 1 −> +06401−00206−296−206344−03−5179−9600.0000−3432013

+ +

If anything +goes wrong, you’ll see an error message. Next try +"vlmcs kms-server" from another machine +where kms-server is the hostname or IP address of +your KMS server. If that fails while it works locally, +you’ll most likely have to configure your firewall +that it accepts incoming connections on TCP port 1688.

+ +

Is there an +easier way than using OSPP and SLMGR?
+Yes and no. KMS activation was designed for large +corporations. Thus Microsoft designed KMS in a way that +corporations can configure their network infrastructure to +fully automate KMS activation. Since this involves DHCP and +DNS, it is not that easy to accomplish that for home users. +However, if you are using an open source router firmware +like OpenWRT or DD-WRT, it is easy to customize DHCP and +DNS.

+ + + + + + + + + + + + + + + + + +
+ + +

1)

+ + +

Configure DHCP that it assigns a DNS domain name to your +clients (if it doesn’t already), e.g. +my-home-net.local

+ + +

2)

+ + +

Create zone my-home-net.local in your DNS server (if it +doesn’t exist already).

+ + +

3)

+ + +

Add the following records to your DNS

+ + +

_vlmcs._tcp.my-home-net.local. +10800 IN SRV 100 100 kms1.my-home-net.local.
+kms1.my-home-net.local. 10800 IN A 192.168.1.17

+ +

Replace +192.168.1.17 with the IP address of your KMS server. If you +don’t like a cache time of 10800 seconds (3 hours), +replace it with another number.

+ +

This causes +that clients will find the KMS server automatically.

+ +

AUTHOR + +

+ + +

This manual +page was written by Hotbird64.

+ +

SEE ALSO + +

+ + + +

vlmcsd(8), +vlmcs(1)

+
+ + diff --git a/vlmcsd.7.pdf b/vlmcsd.7.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1a32b6657882f0556b32db3d81df6cf94a1bcc54 GIT binary patch literal 17147 zcmeHvXH-;6v#4Ykaz-Q!Nl7wf21LmqIcGuA07IC8fgvdw$tV&5XbyN-ylc` z%nwFdIe;Z4!4Nql!X1WicLSRW1HC$6uo(!VghHZS&PH{?5P6sf+#05%BnyH7cX}vG zgqw>c3Wl)u2Hm&;f@qzz-NAw<&>)DOw+jpm^x45q24M&rU>(p2=3nb6!kye_6% zAu2agOHFZ2jaX=lVF_tTx->rDSv}MQ4xGS$Ac4udw;izsY@~El*(B?rbnUVmlP5MSeyRF!P{V@#E z?3yq20A*vQZMcLs*fHMw39?#K?zZA)SF4o`p(pXrd#DrT(+2OHSzm^Dx^jDvFK|Z0 zy!A~#+TRx=3km_tlPQvKUEdW`q{O%jc~iil046GK>;UCd?X7 z^XvT9ioX3(t;xOGFGz^K?rXNr{2rIa5>{U!GHQjMOPp8aK;SZ|?l+qdljXy~buO7|UY-f8y`aVNuQr8WrpTDuFpH$s=-ogo5OI+-cU5DZ%zB6d?@A#2g9hF;a zqnM27dXubRc6F>y=#DV> z;=WKlg*t83M=R!{%RR{2*JP2z4D?&Gt%9ps1FX>0pKHi2k@1HcnwP=y%aKYXbQw=g z#U*c+)5dTQPgfGJI3y6WgepP_x=MwZ6+MZFY3_}vr~Qa3RbZqwFIhbxAPH_}nrJb8 z(T>Kk^TxrexAGn+(=zy!-%Br&BoEDfDndhYtg{pDLceE#hqzblY#cSv19I>8Fh-X* zQHxSgw>VRT>R!NGpeGJ^j|i| z%&FQ+imjRUO}yL1yu7+TQTbWXl>>rfLI&T%8he_=9PRcjh6b`iU1vrU^=ycbXEp=Z zOw1T3l*nVeyoiaYt6~n?W=bXd^a@_ug zeBRRF#9o8hbG1_$^*{LH^vEHY#=>mY&%ZoUgumwwjFiPl-v(XQhj=x<>W1i{{3(90DGE08c;_VOjf&YKD-s+KOtV1?QQ-!2uxdF3~IQHg70{4h%= z6ngPKbVxE#b084Ut>1O>$!qn3j)(`>z7aBAzSb-KXzpb`>IH5uCJ%$u$R_NrBLtT9KNpcAb!$+=~>R>?l&K%>*

~uv424ZS@X33(<12pH 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 literal 0 HcmV?d00001 diff --git a/vlmcsd.7.unix.txt b/vlmcsd.7.unix.txt new file mode 100644 index 0000000..4b28ad8 --- /dev/null +++ b/vlmcsd.7.unix.txt @@ -0,0 +1,222 @@ +VLMCSD(7) KMS Activation Manual VLMCSD(7) + + + +NAME + vlmcsd - a guide to KMS activation using vlmcsd + + +SYNOPSIS + vlmcsd [ options ] + + +DESCRIPTION + This manual describes the concepts of Microsoft KMS activation using + vlmcsd. For detailed usage of vlmcsd see vlmcsd(8). + + + What is KMS? + KMS is a way to activate Microsoft products that was designed for + medium and large businesses. In a standard SOHO environment you enter a + product key during installation and then activate your product over the + Internet. This is done by sending a request to a server at micro‐ + soft.com which then either grants or refuses activation. + + By entering a special key called General Volume License Key (GVLK), + a.k.a "KMS client key", the product no longer asks the Microsoft server + for activation but a user-defined server (called the KMS server) which + usually resides in a company's intranet. vlmcsd is an independent open + source implementation of a KMS server that is available for everyone + while Microsoft gives their KMS server only to corporations that signed + a so called "Select contract". In addition vlmcsd never refuses activa‐ + tion while the Microsoft KMS server only activates the products the + customer has paid for. + + Product activation using vlmcsd is performed in three easy steps: + + 1) Run vlmcsd (or any other KMS emulator) on a computer in your net‐ + work. This will be your KMS server. New users should simply run the + program without any parameters. The defaults should fit the needs of + most users. + + 2) Install your product and enter the GVLK when you are asked for a key + + 3) Configure your client (the machine where you installed your product) + to use your KMS server. + + However, when it comes to the details, some things turn out to be more + difficult than you might think. + + The most important thing to know is that KMS activation is not perma‐ + nent. The computer remains activated for 180 days (30 or 45 days with + consumer-only products). KMS activation however is not an evaluation + license. You can repeat the activation anytime and as often as you like + to extend activation to another 180 days. This normally happens auto‐ + matically. For this to work, you have to ensure that a KMS server is + always reachable for the clients on your network. + + Beginning with Windows 8.1 the KMS server must be a different computer + than the client. You cannot use vlmcsd on the same computer where you + want to activate a product. If you have only one computer, you can run + vlmcsd in a virtual machine. vlmcsd is also designed to run on "always- + on devices", for example a router. The router becomes your KMS server + then. + + + How to get a GVLK? + That is relatively simple. The GVLKs are published on Microsoft's Tech‐ + net web site. + + Windows: http://technet.microsoft.com/en-us/library/jj612867.aspx + Office 2010: http://technet.microsoft.com/en- + us/library/ee624355(v=office.14).aspx#section2_3 + Office 2013: http://technet.microsoft.com/en-us/library/dn385360.aspx + + These lists only include products that Microsoft sells to corporations + via volume license contracts. For Windows there are inofficial GVLKs + that work with consumer-only versions of Windows. Here is a list: + + 789NJ-TQK6T-6XTH8-J39CJ-J8D3P - Windows 8.1 Professional with Media + Center + M9Q9P-WNJJT-6PXPY-DWX8H-6XWKK - Windows 8.1 Core + 7B9N3-D94CG-YTVHR-QBPX3-RJP64 - Windows 8.1 Core N + BB6NG-PQ82V-VRDPW-8XVD2-V8P66 - Windows 8.1 Core Single Language + NCTT7-2RGK8-WMHRF-RY7YQ-JTXG3 - Windows 8.1 Core Country Specific + GNBB8-YVD74-QJHX6-27H4K-8QHDG - Windows 8 Professional with Media Cen‐ + ter + BN3D2-R7TKB-3YPBD-8DRP2-27GG4 - Windows 8 Core + 8N2M2-HWPGY-7PGT9-HGDD8-GVGGY - Windows 8 Core N + 2WN2H-YGCQR-KFX6K-CD6TF-84YXQ - Windows 8 Core Single Language + 4K36P-JN4VD-GDC6V-KDT89-DYFKP - Windows 8 Core Country Specific + + The above keys require activation renewal every 45 days (Win 8.1) or 30 + days (Win 8). All GVLKs from the Microsoft Technet web site require + renewal every 180 days. + + + What are SLMGR and OSPP and how to use them? + You will need these utilities later. So please continue reading this + section. + + These are two Visual Basic script utilities that are used to control + Microsoft's Software Protection system. To use them open a Windows Com‐ + mand Prompt. slmgr.vbs is for Windows. ospp.vbs is for Office 2010 and + 2013. These utilities are installed with Windows and Office and you + don't need to download them. + + slmgr.vbs resides in the system32 directory. So you just have to type + "slmgr" in the Windows Command prompt to use it. To use ospp.vbs you'll + have to change the current directory to your Office installation. This + is usually something like "C:\Program Files\Microsoft Office\Office14". + You may type "slmgr" or "cscript ospp.vbs" without parameters to see + help for these commands but this produces some rather confusing output + for newbies. + + + How to get the GVLK into the product? + Normally every product asks you to enter a key during installation. At + this time simply enter the GVLK. If you skipped this step or entered + some other key which later turned out to be non-working, you can use + "slmgr /ipk GVLK" (Windows) or "cscript ospp.vbs /inpkey:GVLK" (Office) + at any time. + + Examples + slmgr /ipk GCRJD-8NW9H-F2CDX-CCM8D-9D6T9 + cscript ospp.vbs /inpkey:YC7DK-G2NP3-2QQC3-J6H88-GVGXT + + + Why doesn't Office accpet a GVLK? + You'll have to install a volume license (VL) version of Office. Office + versions downloaded from MSDN and/or Technet are non-VL. + + + How to configure a client to use a KMS server? + After you have installed a GVLK you can set your product to use your + KMS server. vlmcsd or another KMS server must already be running on + your server machine. + + Windows + + Type "slmgr /skms kms-server[:tcp-port]". Example: + "slmgr /skms 192.168.1.17:1688" + + + Office + + 1) Type "cscript ospp.vbs /sethst:kms-server". Example "cscript + ospp.vbs /sethst:192.168.1.17" + + 2) Type "cscript ospp.vbs /setprt:tcp-port". Example: cscript + ospp.vbs /setprt:1688 + + tcp-port is usually 1688 unless you instructed vlmcsd to use a differ‐ + ent port which is rarely necessary. + + + How to activate my product? + If you have installed a product with GVLK and pointed it to working KMS + server like vlmcsd, activation occurs automatically. This may take a + while. + + You may type + slmgr /ato + -or- + cscript ospp.vbs /act + + at any time to speed up that process. You may repeat these commands + later to extend your activation for another 180 (45) days. + + + Does vlmcsd work correctly? + If something does not work, it may have the cause that vlmcsd does not + work correctly although this is unlikely. You can test this with the + KMS client vlmcs(1). First type "vlmcs" on the same machine where you + started vlmcsd. If things are ok, you should see something like this: + + Connecting to 127.0.0.1:1688 ... successful + Sending activation request (KMS V4) 1 of 1 -> + 06401-00206-296-206344-03-5179-9600.0000-3432013 + + If anything goes wrong, you'll see an error message. Next try "vlmcs + kms-server" from another machine where kms-server is the hostname or IP + address of your KMS server. If that fails while it works locally, + you'll most likely have to configure your firewall that it accepts + incoming connections on TCP port 1688. + + + Is there an easier way than using OSPP and SLMGR? + Yes and no. KMS activation was designed for large corporations. Thus + Microsoft designed KMS in a way that corporations can configure their + network infrastructure to fully automate KMS activation. Since this + involves DHCP and DNS, it is not that easy to accomplish that for home + users. However, if you are using an open source router firmware like + OpenWRT or DD-WRT, it is easy to customize DHCP and DNS. + + 1) Configure DHCP that it assigns a DNS domain name to your clients (if + it doesn't already), e.g. my-home-net.local + + 2) Create zone my-home-net.local in your DNS server (if it doesn't + exist already). + + 3) Add the following records to your DNS + + _vlmcs._tcp.my-home-net.local. 10800 IN SRV 100 100 kms1.my-home- + net.local. + kms1.my-home-net.local. 10800 IN A 192.168.1.17 + + Replace 192.168.1.17 with the IP address of your KMS server. If you + don't like a cache time of 10800 seconds (3 hours), replace it with + another number. + + This causes that clients will find the KMS server automatically. + + +AUTHOR + This manual page was written by Hotbird64. + +SEE ALSO + vlmcsd(8), vlmcs(1) + + + +Hotbird64 June 2014 VLMCSD(7) diff --git a/vlmcsd.8 b/vlmcsd.8 new file mode 100644 index 0000000..c3874f1 --- /dev/null +++ b/vlmcsd.8 @@ -0,0 +1,256 @@ +.mso www.tmac +.TH VLMCSD 8 "July 2015" "Hotbird64" "KMS Activation Manual" +.LO 8 + +.SH NAME +vlmcsd \- a fully Microsoft compatible KMS server + +.SH SYNOPSIS +.B vlmcsd +[ +.IR "options" " ] + +.SH DESCRIPTION +\fBvlmcsd\fR is a fully Microsoft compatible KMS server that provides product activation services to clients. It is meant as a drop-in replacement for a Microsoft KMS server (Windows computer with KMS key entered). It currently supports KMS protocol versions 4, 5 and 6. +.PP +\fBvlmcsd\fR is designed to run on POSIX compatible operating systens. It only requires a basic C library with a BSD-style sockets API and either \fBfork\fR(2) or \fBpthreads\fR(7). That allows it to run on most embedded systems like routers, NASes, mobile phones, tablets, TVs, settop boxes, etc. Some efforts have been made that it also runs on Windows. +.PP +Although \fBvlmcsd\fR does neither require an activation key nor a payment to anyone, it is not meant to run illegal copies of Windows. Its purpose is to ensure that owners of legal copies can use their software without restrictions, e.g. if you buy a new computer or motherboard and your key will be refused activation from Microsoft servers due to hardware changes. +.PP +\fBvlmcsd\fR may be started via an internet superserver like \fBinetd\fR(8) or \fBxinetd\fR(8) as well as an advanced init system like \fBsystemd\fR(8) or \fBlaunchd\fR(8) using socket based activation. If \fBvlmcsd\fR detects that \fBstdin\fR(3) is a socket, it assumes that there is already a connected client on stdin that wants to be activated. All options that control setting up listening sockets will be ignored when in inetd mode. + +.SH OPTIONS +Since vlmcsd can be configured at compile time, some options may not be available on your system. +.PP +All options that do no require an argument may be combined with a single dash, for instance "vlmcsd -D -e" is identical to "vlmcsd -De". For all options that require an argument a space between the option and the option argument is optional. Thus "vlmcsd -r 2" and "vlmcsd -r2" are identical too. + +.IP "\fB-h\fR or \fB-?\fR" +Displays help. + +.IP "\fB-L\fR \fIipaddress\fR[:\fIport\fR]" +Instructs vlmcsd to listen on \fIipaddress\fR with optional \fIport\fR (default 1688). You can use this option more than once. If you do not specify \fB-L\fR at least once, IP addresses 0.0.0.0 (IPv4) and :: (IPv6) are used. If the IP address contains colons (IPv6) you must enclose the IP address in brackets if you specify the optional port, e.g. [2001:db8::dead:beef]:1688. +.PP +.IP +If no port is specified, vlmcsd uses the default port according to a preceding \fB-P\fR option. If you specify a port, it can be a number (1-65535) or a name (usually found in /etc/services if not provided via LDAP, NIS+ or another name service). +.PP +.IP +If you specify a link local IPv6 address (fe80::/10, usually starting with fe80::), it must be followed by a percent sign (%) and a scope id (=network interface name or number) on most unixoid OSses including Linux, Android, MacOS X and iOS, e.g. fe80::1234:56ff:fe78:9abc\fB%eth0\fR or [fe80::1234:56ff:fe78:9abc\fB%2\fR]:1688. Windows (including cygwin) does not require a scope id unless the same link local address is used on more than one network interface. Windows does not accept a name and the scope id must be a number. + +.IP "\fB-P\fR \fIport" +Use TCP \fIport\fR for all subsequent \fB-L\fR statements that do not include an optional port. If you use \fB-P\fR and \fB-L\fR, \fB-P\fR must be specified before \fB-L\fR. + +.IP "\fB-4\fR and \fB-6\fR" +Used to control the use of IPv4 and IPv4 if you did not use -L. If you specify both \fB-4\fR and \fB-6\fR or none, vlmcsd uses both protocols. If you specify only one, that protocol will be used only. \fBThese options are deprecated and will be removed.\fR + +.IP "\fB-I\fR" +This option is deprecated and does nothing. It is provided for compatibility with svn681 and earlier versions only. It will be removed in a future release. + +.IP "\fB-t\fR \fIseconds\fR" +Timeout the TCP connection with the client after \fIseconds\fR seconds. After sending an activation request. RPC keeps the TCP connection for a while. The default is 30 seconds. You may specify a shorter period to free ressources on your device faster. This is useful for devices with limited main memory or if you used \fB-m\fR to limit the concurrent clients that may request activation. Microsoft RPC clients disconnect after 30 seconds by default. Setting \fIseconds\fR to a greater value does not make much sense. + +.IP "\fB-m\fR \fIconcurrent-clients\fR" +Limit the number of clients that will be handled concurrently. This is useful for devices with limited ressources or if you are experiencing DoS attacks that spawn thousands of threads or forked processes. If additional clients connect to vlmcsd, they need to wait until another client disconnects. If you set \fIconcurrent-clients\fR to a small value ( <10 ), you should also select a reasonable timeout of 2 or 3 seconds with \fB-t\fR. The default is no limit. + +.IP "\fB-d\fR" +Disconnect each client after processing one activation request. This is a direct violation of DCE RPC but may help if you receive malicous fake RPC requests that block your threads or forked processes. Some other KMS emulators (e.g. py-kms) behave this way. + +.IP "\fB-k\fR" +Do not disconnect clients after processing an activation request. This selects the default behavior. \fB-k\fR is useful only if you used an ini file (see \fBvlmcsd.ini\fR(5) and \fB-i\fR). If the ini file contains the line "DisconnectClientsImmediately = true", you can use this switch to restore the default behavior. + +.IP "\fB-N0\fR and \fB-N1\fR +Disables (\fB-N0\fR) or enables (\fB-N1\fR) the use of the NDR64 transfer syntax in the RPC protocol. Unlike Microsoft vlmcsd supports NDR64 on 32-bit operating systems. Microsoft introduced NDR64 in Windows Vista but their KMS servers started using it with Windows 8. Thus if you choose random ePIDs, vlmcsd will select ePIDs with build numbers 9200 and 9600 if you enable NDR64 and build numbers 6002 and 7601 if you disable NDR64. The default is to enable NDR64. + +.IP "\fB-B0\fR and \fB-B1\fR" +Disables (\fB-B0\fR) or enables (\fB-B1\fR) bind time feature negotiation (BTFN) in the RPC protocol. All Windows operating systems starting with Vista support BTFN and try to negotiate it when initiating an RPC connection. Thus consider turning it off as a debug / troubleshooting feature only. Some older firewalls that selectively block or redirect RPC traffic may get confused when they detect NDR64 or BTFN. + +.IP "\fB-l\fR \fIfilename\fR +Use \fIfilename\fR as a log file. The log file records all activations with IP address, Windows workstation name (no reverse DNS lookup), activated product, KMS protocol, time and date. If you do not specify a log file, no log is created. For a live view of the log file +type tail -f \fIfile\fR. +.PP +.IP +If you use the special \fIfilename\fR "syslog", vlmcsd uses \fBsyslog\fR(3) for logging. If your system has no syslog service (/dev/log) installed, logging output will go to /dev/console. Syslog logging is not available in the native Windows version. The Cygwin version does support syslog logging. + +.IP "\fB-D\fR" +Normally vlmcsd daemonizes and runs in background (except the native Windows version). If \fB-D\fR is specified, vlmcsd does not daemonize and runs in foreground. This is useful for testing and allows you to simply press to exit vlmcsd. +.PP +.IP +The native Windows version never daemonizes and always behaves as if \fB-D\fR had been specified. You may want to install vlmcsd as a service instead. See \fB-s\fR. + +.IP "\fB-e\fR" +If specified, vlmcsd ignores \fB-l\fR and writes all logging output to \fBstdout\fR(3). This is mainly useful for testing and debugging and often combined with \fB-D\fR. + +.IP "\fB-f\fR" +This flag combines \fB-D\fR and \fB-e\fR. So typing "vlmcsd -f" is identical to "vlmcsd -De". The purpose of \fB-f\fR is to provide compatibility with previous versions of vlmcsd. \fBThis option is deprecated and will be removed.\fR + +.IP "\fB-v\fR" +Use verbose logging. Logs every parameter of the base request and the base response. It also logs the HWID of the KMS server if KMS protocol version 6 is used. This option is mainly for debugging purposes. It only has an effect if some form of logging is used. Thus \fB-v\fR does not make sense if not used with \fB-l\fR, \fB-e\fR or \fB-f\fR. + +.IP "\fB-q\fR" +Do not use verbose logging. This is actually the default behavior. It only makes sense if you use vlmcsd with an ini file (see \fB-i\fR and \fBvlmcsd.ini\fR(5)). If the ini file contains the line "LogVerbose = true" you can use \fB-q\fR to restore the default behavior. + +.IP "\fB-p\fR \fIfilename\fR" +Create pid file \fIfilename\fR. This has nothing to do with KMS ePIDs. A pid file is a file where vlmcsd writes its own process id. This is used by standard init scripts (typically found in /etc/init.d). The default is not to write a pid file. + +.IP "\fB-u\fR \fIuser\fR and \fB-g\fR \fIgroup\fR" +Causes vlmcsd to run in the specified \fIuser\fR and \fIgroup\fR security context. The main purpose for this is to drop root privileges after it has been started from the root account. To use this feature from cygwin you must run cyglsa-config and the account from which vlmcsd is started must have the rights "Act as part of the operating system" and "Replace a process +level token". The native Windows version does not support these options. +.PP +.IP +The actual security context switch is performed after the TCP sockets have been created. This allows you to use privileged ports (< 1024) when you start vlmcsd from the root account. +.PP +.IP +However if you use an ini, pid or log file, you must ensure that the unprivileged user has access to these files. You can always log to \fBsyslog\fR(3) from an unprivileged account on most platforms (see \fB-l\fR). + +.IP "\fB-w\fR \fIePID\fR" +Use \fIePID\fR as Windows ePID. If specified, \fB-r\fR is disregarded for Windows. + +.IP "\fB-0\fR \fIePID\fR" +Use \fIePID\fR as Office 2010 ePID (including Project and Visio). If specified, \fB-r\fR is disregarded for Office 2010. + +.IP "\fB-3\fR \fIePID\fR" +Use \fIePID\fR as Office 2013 ePID (including Project and Visio). If specified, \fB-r\fR is disregarded for Office 2013. + +.IP "\fB-H\fR \fIHwId\fR" +Use \fIHwId\fR for all products. All HWIDs in the ini file (see \fB-i\fR) will not be used. In an ini file you can specify a seperate HWID for each \fIapplication-guid\fR. This is not possible when entering a HWID from the command line. + +\fIHwId\fR must be specified as 16 hex digits that are interpreted as a series of 8 bytes (big endian). Any character that is not a hex digit will be ignored. This is for better readability. The following commands are identical: + +vlmcsd -H 0123456789ABCDEF +.br +vlmcsd -H 01:23:45:67:89:ab:cd:ef +.br +vlmcsd -H "01 23 45 67 89 AB CD EF" + +.IP "\fB-i\fR \fIfilename\fR" +Use configuration file (aka ini file) \fIfilename\fR. Most configuration parameters can be set either via the command line or an ini file. The command line always has precedence over configuration items in the ini file. See \fBvlmcsd.ini\fR(5) for the format of the configuration file. + +If vlmcsd has been compiled to use a default configuration file (often /etc/vlmcsd.ini), you may use \fB-i-\fR to ignore the default configuration file. + +.IP "\fB-r0\fR, \fB-r1\fR (default) and \fB-r2\fR" +These options determine how ePIDs are generated if + +- you did not sprecify an ePID in the command line and +.br +- you haven't used \fB-i\fR or +.br +- the file specified by \fB-i\fR cannot be opened or +.br +- the file specified by \fB-i\fR does not contain the \fIapplication-guid\fR for the KMS request + +\fB-r0\fR means there are no random ePIDs. vlmcsd simply issues default ePIDs that are built into the binary at compile time. \fBPro:\fR behaves like real KMS server that also always issues the same ePID. \fBCon\fR: Microsoft may start blacklisting again and the default ePID may not work any longer. + +\fB-r1\fR instructs vlmcsd to generate random ePIDs when the program starts or receives a SIGHUP signal and uses these ePIDs until it is stopped or receives another SIGHUP. Most other KMS emulators generate a new ePID on every KMS request. This is easily detectable. Microsoft could just modify sppsvc.exe in a way that it always sends two identical KMS requests in two RPC requests but over the same TCP connection. If both KMS responses contain the different ePIDs, the KMS server is not genuine. \fB-r1\fR is the default mode. \fB-r1\fR also ensures that all three ePIDs (Windows, Office 2010 and Office 2013) use the same OS build number and LCID (language id). + +If vlmcsd has been started by an internet superserver, \fB-r1\fR works identically to \fB-r2\fR. This is simply due to the fact that vlmcsd is started upon a connection request and does not stay in memory after servicing a KMS request. + +\fB-r2\fR behaves like most other KMS server emulators with random support and generates a new random ePID on every request. Use this mode with "care". However since Microsoft currently does not seem to do any verification of the ePID, you currently don't need to pay attention to ePIDs at all. + +.IP "\fB-C\fR \fILCID\fR" +Do not randomize the locale id part of the ePID and use \fILCID\fR instead. The \fILCID\fR must be specified as a decimal number, e.g. 1049 for "Russian - Russia". This option has no effect if the ePID is not randomized at all, e.g. if it is selected from the command line or an ini file. + +By default vlmcsd generates a valid locale id that is recognized by .NET Framework 4.0. This may lead to a locale id which is unlikely to occur in your country, for instance 2155 for "Quecha - Ecuador". You may want to select the locale id of your country instead. See +.URL "http://msdn.microsoft.com/en-us/goglobal/bb964664.aspx" "MSDN" "" +for a list of valid \fILCID\fRs. Please note that some of them are not recognized by .NET Framework 4.0. + +Most other KMS emulators use a fixed \fILCID\fR of 1033 (English - US). To achive the same behavior in vlmcsd use \fB-C 1033\fR. + +.IP "\fB-R\fR \fIrenewal-interval\fR" +Instructs clients to renew activation every \fIrenewal-interval\fR. The \fIrenewal-interval\fR is a number optionally immediately followed by a letter indicating the unit. Valid unit letters are s (seconds), m (minutes), h (hours), d (days) and w (weeks). If you do not specify a letter, minutes is assumed. + +\fB-R3d\fR for instance instructs clients to renew activation every 3 days. The default \fIrenewal-interval\fR is 10080 (identical to 7d and 1w). + +Due to poor implementation of Microsofts KMS Client it cannot be guaranteed that activation is renewed on time as specfied by the -R option. Don't care about that. Renewal will happen well before your activation expires (usually 180 days). + +Even though you can specify seconds, the granularity of this option is 1 minute. Seconds are rounded down to the next multiple of 60. + +.IP "\fB-A\fR \fIactivation-interval\fR" +Instructs clients to retry activation every \fIactivation-interval\fR if it was +unsuccessful, e.g. because it could not reach the server. The default is 120 (identical to 2h). \fIactivation-interval\fR follows the same syntax as \fIrenewal-interval\fR in the +\fB-R\fR option. + +.IP "\fB-s\fR" +Installs vlmcsd as a Windows service. This option only works with the native Windows version and Cygwin. Combine \fB-s\fR with other command line options. These will be in effect when you start the service. The service automatically starts when you reboot your machine. To start it manually, type "net start vlmcsd". + +If you use Cygwin, you must include your Cygwin system DLL directory (usually C:\eCygwin\ebin or C:\eCygwin64\ebin) into the PATH environment variable or the service will not start. + +You can reinstall the service anytime using vlmcsd -s again, e.g. with a different command line. If the service is running, it will be restarted with the new command line. + +When using \fB-s\fR the command line is checked for basic syntax errors only. For example "vlmcsd -s -L 1.2.3.4" reports no error but the service will not start if 1.2.3.4 is not an IP address on your system. + +.IP "\fB-S\fR" +Uninstalls the vlmcsd service. Works only with the native Windows version and Cygwin. All other options will be ignored if you include -S in the command line. + +.IP "\fB-U\fR [\fIdomain\fR\e]\fIusername\fR" +Can only be used together with \fB-s\fR. Starts the service as a different user than the local SYSTEM account. This is used to run the service under an account with low privileges. If you omit the domain, an account from the local computer will be used. + +You may use "NT AUTHORITY\eNetworkService". This is a pseudo user with low privileges. You may also use "NT AUTHORITY\eLocalService" which has more privileges but these are of no use for running vlmcsd. + +Make sure that the user you specify has at least execute permission for your executable. "NT AUTHORITY\eNetworkService" normally has no permission to run binaries from your home directory. + +For your convenience you can use the special username "/l" as a shortcut for "NT AUTHORITY\eLocalService" and "/n" for "NT AUTHORITY\eNetworkService". "vlmcsd\ \-s\ \-U\ /n" installs the service to run as "NT AUTHORITY\eNetworkService". + +.IP "\fB-W\fR \fIpassword\fI" +Can only be used together with \fB-s\fR. Specifies a \fIpassword\fR for the corresponding username you use with -U. SYSTEM, "NT AUTHORITY\eNetworkService", "NT AUTHORITY\eLocalService" do not require a password. + +If you specify a user with even lower privileges than "NT AUTHORITY\eNetworkService", you must specify its password. You also have to grant the "Log on as a service" right to that user. + +.SH SIGNALS +The following signals differ from the default behavior: + +.IP "\fBSIGTERM\fR, \fBSIGINT\fR" +These signals cause vlmcsd to exit gracefully. All global semaphores and shared memory pages will be released, the pid file will be unlinked (deleted) and a shutdown message will be logged. + +.IP "\fBSIGHUP\fR" +Causes vlmcsd to be restarted completely. This is useful if you started vlmcsd with an ini file. You can modify the ini file while vlmcsd is running and then sending \fBSIGHUP\fR, e.g. by typing "killall -SIGHUP vlmcsd" or "kill -SIGHUP `cat /var/run/vlmcsd.pid`". + +The SIGHUP handler has been implemented relatively simple. It is virtually the same as stopping vlmcsd and starting it again immediately with the following exceptions: + +.RS +.IP "\(em" 3 +The new process does not get a new process id. +.IP "\(em" 3 +If you used a pid file, it is not deleted and recreated because the process id stays the same. +.IP "\(em" 3 +If you used the 'user' and/or 'group' directive in an ini file these are ignored. This is because once you switched to lower privileged users and groups, there is no way back. Anything else would be a severe security flaw in the OS. +.RE + +Signaling is not available in the native Windows version and in the Cygwin version when it runs as Windows service. + +.SH SUPPORTED OPERATING SYSTEMS +\fBvlmcsd\fR compiles and runs on Linux, Windows (no Cygwin required but explicitly supported), Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, Solaris, OpenIndiana, Android and iOS. Other POSIX or unixoid OSses may work with unmodified sources or may require minor porting efforts. + +.SH SUPPORTED PRODUCTS +\fBvlmcsd\fR can answer activation requests for the following products: Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Office 2010, Project 2010, Visio 2010, Office 2013, Project 2013, Visio 2013. +.PP +Office, Project and Visio must be volume license versions. + +.SH FILES +.IP "\fBvlmcsd.ini\fR(5)" + +.SH EXAMPLES +.IP "\fBvlmcsd -f\fR" +Starts \fBvlmcsd\fR in foreground. Useful if you use it for the first time and want to see what's happening when a client requests activation. + +.IP "\fBvlmcsd -l /var/log/vlmcsd.log\fR" +Starts \fBvlmcsd\fR as a daemon and logs everything to /var/log/vlmcsd.log. + +.IP "\fBvlmcsd -L 192.168.1.17" +Starts \fBvlmcsd\fR as a daemon and listens on IP address 192.168.1.17 only. This is useful for routers that have a public and a private IP address to prevent your KMS server from becoming public. + +.IP "\fBvlmcsd -s -U /n -l C:\elogs\evlmcsd.log" +Installs \fBvlmcsd\fR as a Windows service with low privileges and logs everything to C:\elogs\evlmcsd.log when the service is started with "net start vlmcsd". + +.SH BUGS +An ePID specified in an ini file must not contain spaces. + +The maximum number of \fB-L\fR options in the command line or listen statements in the inifile is the platform default for \fIFD_SETSIZE\fR. This is 64 on Windows and 1024 on most Unixes. + +.SH AUTHOR +Written by crony12, Hotbird64 and vityan666. +With contributions from DougQaid. + +.SH CREDITS +Thanks to CODYQX4, deagles, eIcn, mikmik38, nosferati87, qad, Ratiborus, ... + +.SH SEE ALSO +\fBvlmcsd.ini\fR(5), \fBvlmcsd\fR(7), \fBvlmcs\fR(1), \fBvlmcsdmulti\fR(1) diff --git a/vlmcsd.8.dos.txt b/vlmcsd.8.dos.txt new file mode 100644 index 0000000..ae32264 --- /dev/null +++ b/vlmcsd.8.dos.txt @@ -0,0 +1,523 @@ +VLMCSD(8) KMS Activation Manual VLMCSD(8) + + + +NAME + vlmcsd - a fully Microsoft compatible KMS server + + +SYNOPSIS + vlmcsd [ options ] + + +DESCRIPTION + vlmcsd is a fully Microsoft compatible KMS server that provides product + activation services to clients. It is meant as a drop-in replacement + for a Microsoft KMS server (Windows computer with KMS key entered). It + currently supports KMS protocol versions 4, 5 and 6. + + vlmcsd is designed to run on POSIX compatible operating systens. It + only requires a basic C library with a BSD-style sockets API and either + fork(2) or pthreads(7). That allows it to run on most embedded systems + like routers, NASes, mobile phones, tablets, TVs, settop boxes, etc. + Some efforts have been made that it also runs on Windows. + + Although vlmcsd does neither require an activation key nor a payment to + anyone, it is not meant to run illegal copies of Windows. Its purpose + is to ensure that owners of legal copies can use their software without + restrictions, e.g. if you buy a new computer or motherboard and your + key will be refused activation from Microsoft servers due to hardware + changes. + + vlmcsd may be started via an internet superserver like inetd(8) or + xinetd(8) as well as an advanced init system like systemd(8) or + launchd(8) using socket based activation. If vlmcsd detects that + stdin(3) is a socket, it assumes that there is already a connected + client on stdin that wants to be activated. All options that control + setting up listening sockets will be ignored when in inetd mode. + + +OPTIONS + Since vlmcsd can be configured at compile time, some options may not be + available on your system. + + All options that do no require an argument may be combined with a sin‐ + gle dash, for instance "vlmcsd -D -e" is identical to "vlmcsd -De". For + all options that require an argument a space between the option and the + option argument is optional. Thus "vlmcsd -r 2" and "vlmcsd -r2" are + identical too. + + + -h or -? + Displays help. + + + -L ipaddress[:port] + Instructs vlmcsd to listen on ipaddress with optional port + (default 1688). You can use this option more than once. If you + do not specify -L at least once, IP addresses 0.0.0.0 (IPv4) and + :: (IPv6) are used. If the IP address contains colons (IPv6) you + must enclose the IP address in brackets if you specify the + optional port, e.g. [2001:db8::dead:beef]:1688. + + If no port is specified, vlmcsd uses the default port according + to a preceding -P option. If you specify a port, it can be a + number (1-65535) or a name (usually found in /etc/services if + not provided via LDAP, NIS+ or another name service). + + If you specify a link local IPv6 address (fe80::/10, usually + starting with fe80::), it must be followed by a percent sign (%) + and a scope id (=network interface name or number) on most + unixoid OSses including Linux, Android, MacOS X and iOS, e.g. + fe80::1234:56ff:fe78:9abc%eth0 or + [fe80::1234:56ff:fe78:9abc%2]:1688. Windows (including cygwin) + does not require a scope id unless the same link local address + is used on more than one network interface. Windows does not + accept a name and the scope id must be a number. + + + -P port + Use TCP port for all subsequent -L statements that do not + include an optional port. If you use -P and -L, -P must be spec‐ + ified before -L. + + + -4 and -6 + Used to control the use of IPv4 and IPv4 if you did not use -L. + If you specify both -4 and -6 or none, vlmcsd uses both proto‐ + cols. If you specify only one, that protocol will be used only. + These options are deprecated and will be removed. + + + -I This option is deprecated and does nothing. It is provided for + compatibility with svn681 and earlier versions only. It will be + removed in a future release. + + + -t seconds + Timeout the TCP connection with the client after seconds sec‐ + onds. After sending an activation request. RPC keeps the TCP + connection for a while. The default is 30 seconds. You may spec‐ + ify a shorter period to free ressources on your device faster. + This is useful for devices with limited main memory or if you + used -m to limit the concurrent clients that may request activa‐ + tion. Microsoft RPC clients disconnect after 30 seconds by + default. Setting seconds to a greater value does not make much + sense. + + + -m concurrent-clients + Limit the number of clients that will be handled concurrently. + This is useful for devices with limited ressources or if you are + experiencing DoS attacks that spawn thousands of threads or + forked processes. If additional clients connect to vlmcsd, they + need to wait until another client disconnects. If you set con‐ + current-clients to a small value ( <10 ), you should also select + a reasonable timeout of 2 or 3 seconds with -t. The default is + no limit. + + + -d Disconnect each client after processing one activation request. + This is a direct violation of DCE RPC but may help if you + receive malicous fake RPC requests that block your threads or + forked processes. Some other KMS emulators (e.g. py-kms) behave + this way. + + + -k Do not disconnect clients after processing an activation + request. This selects the default behavior. -k is useful only if + you used an ini file (see vlmcsd.ini(5) and -i). If the ini file + contains the line "DisconnectClientsImmediately = true", you can + use this switch to restore the default behavior. + + + -N0 and -N1 + Disables (-N0) or enables (-N1) the use of the NDR64 transfer + syntax in the RPC protocol. Unlike Microsoft vlmcsd supports + NDR64 on 32-bit operating systems. Microsoft introduced NDR64 in + Windows Vista but their KMS servers started using it with Win‐ + dows 8. Thus if you choose random ePIDs, vlmcsd will select + ePIDs with build numbers 9200 and 9600 if you enable NDR64 and + build numbers 6002 and 7601 if you disable NDR64. The default is + to enable NDR64. + + + -B0 and -B1 + Disables (-B0) or enables (-B1) bind time feature negotiation + (BTFN) in the RPC protocol. All Windows operating systems start‐ + ing with Vista support BTFN and try to negotiate it when initi‐ + ating an RPC connection. Thus consider turning it off as a debug + / troubleshooting feature only. Some older firewalls that selec‐ + tively block or redirect RPC traffic may get confused when they + detect NDR64 or BTFN. + + + -l filename + Use filename as a log file. The log file records all activations + with IP address, Windows workstation name (no reverse DNS + lookup), activated product, KMS protocol, time and date. If you + do not specify a log file, no log is created. For a live view of + the log file type tail -f file. + + If you use the special filename "syslog", vlmcsd uses syslog(3) + for logging. If your system has no syslog service (/dev/log) + installed, logging output will go to /dev/console. Syslog log‐ + ging is not available in the native Windows version. The Cygwin + version does support syslog logging. + + + -D Normally vlmcsd daemonizes and runs in background (except the + native Windows version). If -D is specified, vlmcsd does not + daemonize and runs in foreground. This is useful for testing and + allows you to simply press to exit vlmcsd. + + The native Windows version never daemonizes and always behaves + as if -D had been specified. You may want to install vlmcsd as a + service instead. See -s. + + + -e If specified, vlmcsd ignores -l and writes all logging output to + stdout(3). This is mainly useful for testing and debugging and + often combined with -D. + + + -f This flag combines -D and -e. So typing "vlmcsd -f" is identical + to "vlmcsd -De". The purpose of -f is to provide compatibility + with previous versions of vlmcsd. This option is deprecated and + will be removed. + + + -v Use verbose logging. Logs every parameter of the base request + and the base response. It also logs the HWID of the KMS server + if KMS protocol version 6 is used. This option is mainly for + debugging purposes. It only has an effect if some form of log‐ + ging is used. Thus -v does not make sense if not used with -l, + -e or -f. + + + -q Do not use verbose logging. This is actually the default behav‐ + ior. It only makes sense if you use vlmcsd with an ini file (see + -i and vlmcsd.ini(5)). If the ini file contains the line + "LogVerbose = true" you can use -q to restore the default behav‐ + ior. + + + -p filename + Create pid file filename. This has nothing to do with KMS ePIDs. + A pid file is a file where vlmcsd writes its own process id. + This is used by standard init scripts (typically found in + /etc/init.d). The default is not to write a pid file. + + + -u user and -g group + Causes vlmcsd to run in the specified user and group security + context. The main purpose for this is to drop root privileges + after it has been started from the root account. To use this + feature from cygwin you must run cyglsa-config and the account + from which vlmcsd is started must have the rights "Act as part + of the operating system" and "Replace a process level token". + The native Windows version does not support these options. + + The actual security context switch is performed after the TCP + sockets have been created. This allows you to use privileged + ports (< 1024) when you start vlmcsd from the root account. + + However if you use an ini, pid or log file, you must ensure that + the unprivileged user has access to these files. You can always + log to syslog(3) from an unprivileged account on most platforms + (see -l). + + + -w ePID + Use ePID as Windows ePID. If specified, -r is disregarded for + Windows. + + + -0 ePID + Use ePID as Office 2010 ePID (including Project and Visio). If + specified, -r is disregarded for Office 2010. + + + -3 ePID + Use ePID as Office 2013 ePID (including Project and Visio). If + specified, -r is disregarded for Office 2013. + + + -H HwId + Use HwId for all products. All HWIDs in the ini file (see -i) + will not be used. In an ini file you can specify a seperate HWID + for each application-guid. This is not possible when entering a + HWID from the command line. + + HwId must be specified as 16 hex digits that are interpreted as + a series of 8 bytes (big endian). Any character that is not a + hex digit will be ignored. This is for better readability. The + following commands are identical: + + vlmcsd -H 0123456789ABCDEF + vlmcsd -H 01:23:45:67:89:ab:cd:ef + vlmcsd -H "01 23 45 67 89 AB CD EF" + + + -i filename + Use configuration file (aka ini file) filename. Most configura‐ + tion parameters can be set either via the command line or an ini + file. The command line always has precedence over configuration + items in the ini file. See vlmcsd.ini(5) for the format of the + configuration file. + + If vlmcsd has been compiled to use a default configuration file + (often /etc/vlmcsd.ini), you may use -i- to ignore the default + configuration file. + + + -r0, -r1 (default) and -r2 + These options determine how ePIDs are generated if + + - you did not sprecify an ePID in the command line and + - you haven't used -i or + - the file specified by -i cannot be opened or + - the file specified by -i does not contain the application-guid + for the KMS request + + -r0 means there are no random ePIDs. vlmcsd simply issues + default ePIDs that are built into the binary at compile time. + Pro: behaves like real KMS server that also always issues the + same ePID. Con: Microsoft may start blacklisting again and the + default ePID may not work any longer. + + -r1 instructs vlmcsd to generate random ePIDs when the program + starts or receives a SIGHUP signal and uses these ePIDs until it + is stopped or receives another SIGHUP. Most other KMS emulators + generate a new ePID on every KMS request. This is easily + detectable. Microsoft could just modify sppsvc.exe in a way that + it always sends two identical KMS requests in two RPC requests + but over the same TCP connection. If both KMS responses contain + the different ePIDs, the KMS server is not genuine. -r1 is the + default mode. -r1 also ensures that all three ePIDs (Windows, + Office 2010 and Office 2013) use the same OS build number and + LCID (language id). + + If vlmcsd has been started by an internet superserver, -r1 works + identically to -r2. This is simply due to the fact that vlmcsd + is started upon a connection request and does not stay in memory + after servicing a KMS request. + + -r2 behaves like most other KMS server emulators with random + support and generates a new random ePID on every request. Use + this mode with "care". However since Microsoft currently does + not seem to do any verification of the ePID, you currently don't + need to pay attention to ePIDs at all. + + + -C LCID + Do not randomize the locale id part of the ePID and use LCID + instead. The LCID must be specified as a decimal number, e.g. + 1049 for "Russian - Russia". This option has no effect if the + ePID is not randomized at all, e.g. if it is selected from the + command line or an ini file. + + By default vlmcsd generates a valid locale id that is recognized + by .NET Framework 4.0. This may lead to a locale id which is + unlikely to occur in your country, for instance 2155 for "Quecha + - Ecuador". You may want to select the locale id of your country + instead. See MSDN ⟨http://msdn.microsoft.com/en-us/goglobal/ + bb964664.aspx⟩ for a list of valid LCIDs. Please note that some + of them are not recognized by .NET Framework 4.0. + + Most other KMS emulators use a fixed LCID of 1033 (English - + US). To achive the same behavior in vlmcsd use -C 1033. + + + -R renewal-interval + Instructs clients to renew activation every renewal-interval. + The renewal-interval is a number optionally immediately followed + by a letter indicating the unit. Valid unit letters are s (sec‐ + onds), m (minutes), h (hours), d (days) and w (weeks). If you do + not specify a letter, minutes is assumed. + + -R3d for instance instructs clients to renew activation every 3 + days. The default renewal-interval is 10080 (identical to 7d and + 1w). + + Due to poor implementation of Microsofts KMS Client it cannot be + guaranteed that activation is renewed on time as specfied by the + -R option. Don't care about that. Renewal will happen well + before your activation expires (usually 180 days). + + Even though you can specify seconds, the granularity of this + option is 1 minute. Seconds are rounded down to the next multi‐ + ple of 60. + + + -A activation-interval + Instructs clients to retry activation every activation-interval + if it was unsuccessful, e.g. because it could not reach the + server. The default is 120 (identical to 2h). activation-inter‐ + val follows the same syntax as renewal-interval in the -R + option. + + + -s Installs vlmcsd as a Windows service. This option only works + with the native Windows version and Cygwin. Combine -s with + other command line options. These will be in effect when you + start the service. The service automatically starts when you + reboot your machine. To start it manually, type "net start vlm‐ + csd". + + If you use Cygwin, you must include your Cygwin system DLL + directory (usually C:\Cygwin\bin or C:\Cygwin64\bin) into the + PATH environment variable or the service will not start. + + You can reinstall the service anytime using vlmcsd -s again, + e.g. with a different command line. If the service is running, + it will be restarted with the new command line. + + When using -s the command line is checked for basic syntax + errors only. For example "vlmcsd -s -L 1.2.3.4" reports no error + but the service will not start if 1.2.3.4 is not an IP address + on your system. + + + -S Uninstalls the vlmcsd service. Works only with the native Win‐ + dows version and Cygwin. All other options will be ignored if + you include -S in the command line. + + + -U [domain\]username + Can only be used together with -s. Starts the service as a dif‐ + ferent user than the local SYSTEM account. This is used to run + the service under an account with low privileges. If you omit + the domain, an account from the local computer will be used. + + You may use "NT AUTHORITY\NetworkService". This is a pseudo user + with low privileges. You may also use "NT AUTHORITY\LocalSer‐ + vice" which has more privileges but these are of no use for run‐ + ning vlmcsd. + + Make sure that the user you specify has at least execute permis‐ + sion for your executable. "NT AUTHORITY\NetworkService" normally + has no permission to run binaries from your home directory. + + For your convenience you can use the special username "/l" as a + shortcut for "NT AUTHORITY\LocalService" and "/n" for "NT + AUTHORITY\NetworkService". "vlmcsd -s -U /n" installs the ser‐ + vice to run as "NT AUTHORITY\NetworkService". + + + -W password + Can only be used together with -s. Specifies a password for the + corresponding username you use with -U. SYSTEM, "NT AUTHOR‐ + ITY\NetworkService", "NT AUTHORITY\LocalService" do not require + a password. + + If you specify a user with even lower privileges than "NT + AUTHORITY\NetworkService", you must specify its password. You + also have to grant the "Log on as a service" right to that user. + + +SIGNALS + The following signals differ from the default behavior: + + + SIGTERM, SIGINT + These signals cause vlmcsd to exit gracefully. All global sema‐ + phores and shared memory pages will be released, the pid file + will be unlinked (deleted) and a shutdown message will be + logged. + + + SIGHUP Causes vlmcsd to be restarted completely. This is useful if you + started vlmcsd with an ini file. You can modify the ini file + while vlmcsd is running and then sending SIGHUP, e.g. by typing + "killall -SIGHUP vlmcsd" or "kill -SIGHUP `cat /var/run/vlm‐ + csd.pid`". + + The SIGHUP handler has been implemented relatively simple. It is + virtually the same as stopping vlmcsd and starting it again + immediately with the following exceptions: + + + — The new process does not get a new process id. + + — If you used a pid file, it is not deleted and recreated + because the process id stays the same. + + — If you used the 'user' and/or 'group' directive in an ini + file these are ignored. This is because once you switched to + lower privileged users and groups, there is no way back. Any‐ + thing else would be a severe security flaw in the OS. + + Signaling is not available in the native Windows version and in the + Cygwin version when it runs as Windows service. + + +SUPPORTED OPERATING SYSTEMS + vlmcsd compiles and runs on Linux, Windows (no Cygwin required but + explicitly supported), Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, + Solaris, OpenIndiana, Android and iOS. Other POSIX or unixoid OSses may + work with unmodified sources or may require minor porting efforts. + + +SUPPORTED PRODUCTS + vlmcsd can answer activation requests for the following products: Win‐ + dows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10, Windows + Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows + Server 2012 R2, Office 2010, Project 2010, Visio 2010, Office 2013, + Project 2013, Visio 2013. + + Office, Project and Visio must be volume license versions. + + +FILES + vlmcsd.ini(5) + + +EXAMPLES + vlmcsd -f + Starts vlmcsd in foreground. Useful if you use it for the first + time and want to see what's happening when a client requests + activation. + + + vlmcsd -l /var/log/vlmcsd.log + Starts vlmcsd as a daemon and logs everything to /var/log/vlm‐ + csd.log. + + + vlmcsd -L 192.168.1.17 + Starts vlmcsd as a daemon and listens on IP address 192.168.1.17 + only. This is useful for routers that have a public and a pri‐ + vate IP address to prevent your KMS server from becoming public. + + + vlmcsd -s -U /n -l C:\logs\vlmcsd.log + Installs vlmcsd as a Windows service with low privileges and + logs everything to C:\logs\vlmcsd.log when the service is + started with "net start vlmcsd". + + +BUGS + An ePID specified in an ini file must not contain spaces. + + The maximum number of -L options in the command line or listen state‐ + ments in the inifile is the platform default for FD_SETSIZE. This is 64 + on Windows and 1024 on most Unixes. + + +AUTHOR + Written by crony12, Hotbird64 and vityan666. With contributions from + DougQaid. + + +CREDITS + Thanks to CODYQX4, deagles, eIcn, mikmik38, nosferati87, qad, Rati‐ + borus, ... + + +SEE ALSO + vlmcsd.ini(5), vlmcsd(7), vlmcs(1), vlmcsdmulti(1) + + + +Hotbird64 July 2015 VLMCSD(8) diff --git a/vlmcsd.8.html b/vlmcsd.8.html new file mode 100644 index 0000000..3e2697e --- /dev/null +++ b/vlmcsd.8.html @@ -0,0 +1,855 @@ + + + + + + + + + +VLMCSD + + + + +

VLMCSD

+ +NAME
+SYNOPSIS
+DESCRIPTION
+OPTIONS
+SIGNALS
+SUPPORTED OPERATING SYSTEMS
+SUPPORTED PRODUCTS
+FILES
+EXAMPLES
+BUGS
+AUTHOR
+CREDITS
+SEE ALSO
+ +
+ + +

NAME + +

+ + +

vlmcsd − +a fully Microsoft compatible KMS server

+ +

SYNOPSIS + +

+ + +

vlmcsd [ +options ]

+ +

DESCRIPTION + +

+ + +

vlmcsd +is a fully Microsoft compatible KMS server that provides +product activation services to clients. It is meant as a +drop-in replacement for a Microsoft KMS server (Windows +computer with KMS key entered). It currently supports KMS +protocol versions 4, 5 and 6.

+ +

vlmcsd +is designed to run on POSIX compatible operating systens. It +only requires a basic C library with a BSD-style sockets API +and either fork(2) or pthreads(7). That allows +it to run on most embedded systems like routers, NASes, +mobile phones, tablets, TVs, settop boxes, etc. Some efforts +have been made that it also runs on Windows.

+ +

Although +vlmcsd does neither require an activation key nor a +payment to anyone, it is not meant to run illegal copies of +Windows. Its purpose is to ensure that owners of legal +copies can use their software without restrictions, e.g. if +you buy a new computer or motherboard and your key will be +refused activation from Microsoft servers due to hardware +changes.

+ +

vlmcsd +may be started via an internet superserver like +inetd(8) or xinetd(8) as well as an advanced +init system like systemd(8) or launchd(8) +using socket based activation. If vlmcsd detects that +stdin(3) is a socket, it assumes that there is +already a connected client on stdin that wants to be +activated. All options that control setting up listening +sockets will be ignored when in inetd mode.

+ +

OPTIONS + +

+ + +

Since vlmcsd +can be configured at compile time, some options may not be +available on your system.

+ +

All options +that do no require an argument may be combined with a single +dash, for instance "vlmcsd -D -e" is identical to +"vlmcsd -De". For all options that require an +argument a space between the option and the option argument +is optional. Thus "vlmcsd -r 2" and "vlmcsd +-r2" are identical too.
+-h
or -?

+ +

Displays help.

+ +

-L +ipaddress[:port]

+ +

Instructs vlmcsd to listen on +ipaddress with optional port (default 1688). +You can use this option more than once. If you do not +specify -L at least once, IP addresses 0.0.0.0 (IPv4) +and :: (IPv6) are used. If the IP address contains colons +(IPv6) you must enclose the IP address in brackets if you +specify the optional port, e.g. +[2001:db8::dead:beef]:1688.

+ +

If no port is +specified, vlmcsd uses the default port according to a +preceding -P option. If you specify a port, it can be +a number (1-65535) or a name (usually found in /etc/services +if not provided via LDAP, NIS+ or another name service).

+ +

If you specify +a link local IPv6 address (fe80::/10, usually starting with +fe80::), it must be followed by a percent sign (%) and a +scope id (=network interface name or number) on most unixoid +OSses including Linux, Android, MacOS X and iOS, e.g. +fe80::1234:56ff:fe78:9abc%eth0 or +[fe80::1234:56ff:fe78:9abc%2]:1688. Windows +(including cygwin) does not require a scope id unless the +same link local address is used on more than one network +interface. Windows does not accept a name and the scope id +must be a number.

+ +

-P port

+ +

Use TCP port for all +subsequent -L statements that do not include an +optional port. If you use -P and -L, -P +must be specified before -L.

+ +

-4 and -6

+ +

Used to control the use of IPv4 +and IPv4 if you did not use -L. If you specify both +-4 and -6 or none, vlmcsd uses both protocols. +If you specify only one, that protocol will be used only. +These options are deprecated and will be removed.

+ + + + + + + +
+ + +

-I

+ + +

This option is deprecated and does nothing. It is +provided for compatibility with svn681 and earlier versions +only. It will be removed in a future release.

+ +

-t seconds

+ +

Timeout the TCP connection with +the client after seconds seconds. After sending an +activation request. RPC keeps the TCP connection for a +while. The default is 30 seconds. You may specify a shorter +period to free ressources on your device faster. This is +useful for devices with limited main memory or if you used +-m to limit the concurrent clients that may request +activation. Microsoft RPC clients disconnect after 30 +seconds by default. Setting seconds to a greater +value does not make much sense.

+ +

-m +concurrent-clients

+ +

Limit the number of clients +that will be handled concurrently. This is useful for +devices with limited ressources or if you are experiencing +DoS attacks that spawn thousands of threads or forked +processes. If additional clients connect to vlmcsd, they +need to wait until another client disconnects. If you set +concurrent-clients to a small value ( <10 ), you +should also select a reasonable timeout of 2 or 3 seconds +with -t. The default is no limit.

+ + + + + + + + + + + + +
+ + +

-d

+ + +

Disconnect each client after processing one activation +request. This is a direct violation of DCE RPC but may help +if you receive malicous fake RPC requests that block your +threads or forked processes. Some other KMS emulators (e.g. +py-kms) behave this way.

+ + +

-k

+ + +

Do not disconnect clients after processing an activation +request. This selects the default behavior. -k is +useful only if you used an ini file (see +vlmcsd.ini(5) and -i). If the ini file +contains the line "DisconnectClientsImmediately = +true", you can use this switch to restore the default +behavior.

+ +

-N0 and -N1

+ +

Disables (-N0) or +enables (-N1) the use of the NDR64 transfer syntax in +the RPC protocol. Unlike Microsoft vlmcsd supports NDR64 on +32-bit operating systems. Microsoft introduced NDR64 in +Windows Vista but their KMS servers started using it with +Windows 8. Thus if you choose random ePIDs, vlmcsd will +select ePIDs with build numbers 9200 and 9600 if you enable +NDR64 and build numbers 6002 and 7601 if you disable NDR64. +The default is to enable NDR64.

+ +

-B0 and -B1

+ +

Disables (-B0) or +enables (-B1) bind time feature negotiation (BTFN) in +the RPC protocol. All Windows operating systems starting +with Vista support BTFN and try to negotiate it when +initiating an RPC connection. Thus consider turning it off +as a debug / troubleshooting feature only. Some older +firewalls that selectively block or redirect RPC traffic may +get confused when they detect NDR64 or BTFN.

+ +

-l filename

+ +

Use filename as a log +file. The log file records all activations with IP address, +Windows workstation name (no reverse DNS lookup), activated +product, KMS protocol, time and date. If you do not specify +a log file, no log is created. For a live view of the log +file type tail -f file.

+ +

If you use the +special filename "syslog", vlmcsd uses +syslog(3) for logging. If your system has no syslog +service (/dev/log) installed, logging output will go to +/dev/console. Syslog logging is not available in the native +Windows version. The Cygwin version does support syslog +logging.

+ + + + + + + +
+ + +

-D

+ + +

Normally vlmcsd daemonizes and runs in background +(except the native Windows version). If -D is +specified, vlmcsd does not daemonize and runs in foreground. +This is useful for testing and allows you to simply press +<Ctrl-C> to exit vlmcsd.

+ +

The native +Windows version never daemonizes and always behaves as if +-D had been specified. You may want to install vlmcsd +as a service instead. See -s.

+ + + + + + + + + + + + + + + + + + + + + + +
+ + +

-e

+ + +

If specified, vlmcsd ignores +-l and writes all logging output to stdout(3). +This is mainly useful for testing and debugging and often +combined with -D.

+ + +

-f

+ + +

This flag combines -D and -e. So typing +"vlmcsd -f" is identical to "vlmcsd +-De". The purpose of -f is to provide +compatibility with previous versions of vlmcsd. This +option is deprecated and will be removed.

+ + +

-v

+ + +

Use verbose logging. Logs every parameter of the base +request and the base response. It also logs the HWID of the +KMS server if KMS protocol version 6 is used. This option is +mainly for debugging purposes. It only has an effect if some +form of logging is used. Thus -v does not make sense +if not used with -l, -e or -f.

+ + +

-q

+ + +

Do not use verbose logging. This is actually the default +behavior. It only makes sense if you use vlmcsd with an ini +file (see -i and vlmcsd.ini(5)). If the ini +file contains the line "LogVerbose = true" you can +use -q to restore the default behavior.

+ +

-p filename

+ +

Create pid file +filename. This has nothing to do with KMS ePIDs. A +pid file is a file where vlmcsd writes its own process id. +This is used by standard init scripts (typically found in +/etc/init.d). The default is not to write a pid file.

+ +

-u user and +-g group

+ +

Causes vlmcsd to run in the +specified user and group security context. The +main purpose for this is to drop root privileges after it +has been started from the root account. To use this feature +from cygwin you must run cyglsa-config and the account from +which vlmcsd is started must have the rights "Act as +part of the operating system" and "Replace a +process level token". The native Windows version does +not support these options.

+ +

The actual +security context switch is performed after the TCP sockets +have been created. This allows you to use privileged ports +(< 1024) when you start vlmcsd from the root account.

+ +

However if you +use an ini, pid or log file, you must ensure that the +unprivileged user has access to these files. You can always +log to syslog(3) from an unprivileged account on most +platforms (see -l).

+ +

-w ePID

+ +

Use ePID as Windows +ePID. If specified, -r is disregarded for +Windows.

+ +

-0 ePID

+ +

Use ePID as Office 2010 +ePID (including Project and Visio). If specified, -r +is disregarded for Office 2010.

+ +

-3 ePID

+ +

Use ePID as Office 2013 +ePID (including Project and Visio). If specified, -r +is disregarded for Office 2013.

+ +

-H HwId

+ +

Use HwId for all +products. All HWIDs in the ini file (see -i) will not +be used. In an ini file you can specify a seperate HWID for +each application-guid. This is not possible when +entering a HWID from the command line.

+ +

HwId +must be specified as 16 hex digits that are interpreted as a +series of 8 bytes (big endian). Any character that is not a +hex digit will be ignored. This is for better readability. +The following commands are identical:

+ +

vlmcsd -H +0123456789ABCDEF
+vlmcsd -H 01:23:45:67:89:ab:cd:ef
+vlmcsd -H "01 23 45 67 89 AB CD EF"

+ +

-i filename

+ +

Use configuration file (aka ini +file) filename. Most configuration parameters can be +set either via the command line or an ini file. The command +line always has precedence over configuration items in the +ini file. See vlmcsd.ini(5) for the format of the +configuration file.

+ +

If vlmcsd has +been compiled to use a default configuration file (often +/etc/vlmcsd.ini), you may use -i- to ignore the +default configuration file.

+ +

-r0, -r1 +(default) and -r2

+ +

These options determine how +ePIDs are generated if

+ +

- you did not +sprecify an ePID in the command line and
+- you haven’t used -i or
+- the file specified by -i cannot be opened or
+- the file specified by -i does not contain the +application-guid for the KMS request

+ +

-r0 +means there are no random ePIDs. vlmcsd simply issues +default ePIDs that are built into the binary at compile +time. Pro: behaves like real KMS server that also +always issues the same ePID. Con: Microsoft may start +blacklisting again and the default ePID may not work any +longer.

+ +

-r1 +instructs vlmcsd to generate random ePIDs when the program +starts or receives a SIGHUP signal and uses these ePIDs +until it is stopped or receives another SIGHUP. Most other +KMS emulators generate a new ePID on every KMS request. This +is easily detectable. Microsoft could just modify sppsvc.exe +in a way that it always sends two identical KMS requests in +two RPC requests but over the same TCP connection. If both +KMS responses contain the different ePIDs, the KMS server is +not genuine. -r1 is the default mode. -r1 also +ensures that all three ePIDs (Windows, Office 2010 and +Office 2013) use the same OS build number and LCID (language +id).

+ +

If vlmcsd has +been started by an internet superserver, -r1 works +identically to -r2. This is simply due to the fact +that vlmcsd is started upon a connection request and does +not stay in memory after servicing a KMS request.

+ +

-r2 +behaves like most other KMS server emulators with random +support and generates a new random ePID on every request. +Use this mode with "care". However since Microsoft +currently does not seem to do any verification of the ePID, +you currently don’t need to pay attention to ePIDs at +all.

+ +

-C LCID

+ +

Do not randomize the locale id +part of the ePID and use LCID instead. The +LCID must be specified as a decimal number, e.g. 1049 +for "Russian - Russia". This option has no effect +if the ePID is not randomized at all, e.g. if it is selected +from the command line or an ini file.

+ +

By default +vlmcsd generates a valid locale id that is recognized by +.NET Framework 4.0. This may lead to a locale id which is +unlikely to occur in your country, for instance 2155 for +"Quecha - Ecuador". You may want to select the +locale id of your country instead. See +MSDN +for a list of valid LCIDs. Please note that some of +them are not recognized by .NET Framework 4.0.

+ +

Most other KMS +emulators use a fixed LCID of 1033 (English - US). To +achive the same behavior in vlmcsd use -C 1033.

+ +

-R +renewal-interval

+ +

Instructs clients to renew +activation every renewal-interval. The +renewal-interval is a number optionally immediately +followed by a letter indicating the unit. Valid unit letters +are s (seconds), m (minutes), h (hours), d (days) and w +(weeks). If you do not specify a letter, minutes is +assumed.

+ +

-R3d for +instance instructs clients to renew activation every 3 days. +The default renewal-interval is 10080 (identical to +7d and 1w).

+ +

Due to poor +implementation of Microsofts KMS Client it cannot be +guaranteed that activation is renewed on time as specfied by +the -R option. Don’t care about that. Renewal will +happen well before your activation expires (usually 180 +days).

+ +

Even though you +can specify seconds, the granularity of this option is 1 +minute. Seconds are rounded down to the next multiple of +60.

+ +

-A +activation-interval

+ +

Instructs clients to retry +activation every activation-interval if it was +unsuccessful, e.g. because it could not reach the server. +The default is 120 (identical to 2h). +activation-interval follows the same syntax as +renewal-interval in the -R option.

+ + + + + + + +
+ + +

-s

+ + +

Installs vlmcsd as a Windows service. This option only +works with the native Windows version and Cygwin. Combine +-s with other command line options. These will be in +effect when you start the service. The service automatically +starts when you reboot your machine. To start it manually, +type "net start vlmcsd".

+ +

If you use +Cygwin, you must include your Cygwin system DLL directory +(usually C:\Cygwin\bin or C:\Cygwin64\bin) into the PATH +environment variable or the service will not start.

+ +

You can +reinstall the service anytime using vlmcsd -s again, e.g. +with a different command line. If the service is running, it +will be restarted with the new command line.

+ +

When using +-s the command line is checked for basic syntax +errors only. For example "vlmcsd -s -L 1.2.3.4" +reports no error but the service will not start if 1.2.3.4 +is not an IP address on your system.

+ + + + + + + +
+ + +

-S

+ + +

Uninstalls the vlmcsd service. +Works only with the native Windows version and Cygwin. All +other options will be ignored if you include -S in the +command line.

+ +

-U +[domain\]username

+ +

Can only be used together with +-s. Starts the service as a different user than the +local SYSTEM account. This is used to run the service under +an account with low privileges. If you omit the domain, an +account from the local computer will be used.

+ +

You may use +"NT AUTHORITY\NetworkService". This is a pseudo +user with low privileges. You may also use "NT +AUTHORITY\LocalService" which has more privileges but +these are of no use for running vlmcsd.

+ +

Make sure that +the user you specify has at least execute permission for +your executable. "NT AUTHORITY\NetworkService" +normally has no permission to run binaries from your home +directory.

+ +

For your +convenience you can use the special username "/l" +as a shortcut for "NT AUTHORITY\LocalService" and +"/n" for "NT AUTHORITY\NetworkService". +"vlmcsd −s −U /n" +installs the service to run as "NT +AUTHORITY\NetworkService".

+ +

-W password

+ +

Can only be used together with +-s. Specifies a password for the corresponding +username you use with -U. SYSTEM, "NT +AUTHORITY\NetworkService", "NT +AUTHORITY\LocalService" do not require a password.

+ +

If you specify +a user with even lower privileges than "NT +AUTHORITY\NetworkService", you must specify its +password. You also have to grant the "Log on as a +service" right to that user.

+ +

SIGNALS + +

+ + +

The following +signals differ from the default behavior:
+SIGTERM
, SIGINT

+ +

These signals cause vlmcsd to +exit gracefully. All global semaphores and shared memory +pages will be released, the pid file will be unlinked +(deleted) and a shutdown message will be logged.

+ + + + + + + +
+ + +

SIGHUP

+ + +

Causes vlmcsd to be restarted completely. This is useful +if you started vlmcsd with an ini file. You can modify the +ini file while vlmcsd is running and then sending +SIGHUP, e.g. by typing "killall -SIGHUP +vlmcsd" or "kill -SIGHUP ’cat +/var/run/vlmcsd.pid’".

+ +

The SIGHUP +handler has been implemented relatively simple. It is +virtually the same as stopping vlmcsd and starting it again +immediately with the following exceptions:

+ + + + + + + + + + + + + + + + + +
+ + +

+ + +

The new process does not get a +new process id.

+ + +

+ + +

If you used a pid file, it is not deleted and recreated +because the process id stays the same.

+ + +

+ + +

If you used the ’user’ and/or +’group’ directive in an ini file these are +ignored. This is because once you switched to lower +privileged users and groups, there is no way back. Anything +else would be a severe security flaw in the OS.

+ +

Signaling is +not available in the native Windows version and in the +Cygwin version when it runs as Windows service.

+ +

SUPPORTED OPERATING SYSTEMS + +

+ + +

vlmcsd +compiles and runs on Linux, Windows (no Cygwin required but +explicitly supported), Mac OS X, FreeBSD, NetBSD, OpenBSD, +Minix, Solaris, OpenIndiana, Android and iOS. Other POSIX or +unixoid OSses may work with unmodified sources or may +require minor porting efforts.

+ +

SUPPORTED PRODUCTS + +

+ + +

vlmcsd +can answer activation requests for the following products: +Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows +10, Windows Server 2008, Windows Server 2008 R2, Windows +Server 2012, Windows Server 2012 R2, Office 2010, Project +2010, Visio 2010, Office 2013, Project 2013, Visio 2013.

+ +

Office, Project +and Visio must be volume license versions.

+ +

FILES + +

+ + + +

vlmcsd.ini(5)

+ +

EXAMPLES + +

+ + +

vlmcsd +-f

+ +

Starts vlmcsd in +foreground. Useful if you use it for the first time and want +to see what’s happening when a client requests +activation.

+ +

vlmcsd -l +/var/log/vlmcsd.log

+ +

Starts vlmcsd as a +daemon and logs everything to /var/log/vlmcsd.log.

+ +

vlmcsd -L +192.168.1.17

+ +

Starts vlmcsd as a +daemon and listens on IP address 192.168.1.17 only. This is +useful for routers that have a public and a private IP +address to prevent your KMS server from becoming public.

+ +

vlmcsd -s -U /n -l +C:\logs\vlmcsd.log

+ +

Installs vlmcsd as a +Windows service with low privileges and logs everything to +C:\logs\vlmcsd.log when the service is started with +"net start vlmcsd".

+ +

BUGS + +

+ + +

An ePID +specified in an ini file must not contain spaces.

+ +

The maximum +number of -L options in the command line or listen +statements in the inifile is the platform default for +FD_SETSIZE. This is 64 on Windows and 1024 on most +Unixes.

+ +

AUTHOR + +

+ + +

Written by +crony12, Hotbird64 and vityan666. With contributions from +DougQaid.

+ +

CREDITS + +

+ + +

Thanks to +CODYQX4, deagles, eIcn, mikmik38, nosferati87, qad, +Ratiborus, ...

+ +

SEE ALSO + +

+ + + +

vlmcsd.ini(5), +vlmcsd(7), vlmcs(1), vlmcsdmulti(1)

+
+ + diff --git a/vlmcsd.8.pdf b/vlmcsd.8.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7fde8c8528ee5e79e25b4477f76820a9713c9c66 GIT binary patch literal 34658 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 QXh to exit vlmcsd. + + The native Windows version never daemonizes and always behaves + as if -D had been specified. You may want to install vlmcsd as a + service instead. See -s. + + + -e If specified, vlmcsd ignores -l and writes all logging output to + stdout(3). This is mainly useful for testing and debugging and + often combined with -D. + + + -f This flag combines -D and -e. So typing "vlmcsd -f" is identical + to "vlmcsd -De". The purpose of -f is to provide compatibility + with previous versions of vlmcsd. This option is deprecated and + will be removed. + + + -v Use verbose logging. Logs every parameter of the base request + and the base response. It also logs the HWID of the KMS server + if KMS protocol version 6 is used. This option is mainly for + debugging purposes. It only has an effect if some form of log‐ + ging is used. Thus -v does not make sense if not used with -l, + -e or -f. + + + -q Do not use verbose logging. This is actually the default behav‐ + ior. It only makes sense if you use vlmcsd with an ini file (see + -i and vlmcsd.ini(5)). If the ini file contains the line + "LogVerbose = true" you can use -q to restore the default behav‐ + ior. + + + -p filename + Create pid file filename. This has nothing to do with KMS ePIDs. + A pid file is a file where vlmcsd writes its own process id. + This is used by standard init scripts (typically found in + /etc/init.d). The default is not to write a pid file. + + + -u user and -g group + Causes vlmcsd to run in the specified user and group security + context. The main purpose for this is to drop root privileges + after it has been started from the root account. To use this + feature from cygwin you must run cyglsa-config and the account + from which vlmcsd is started must have the rights "Act as part + of the operating system" and "Replace a process level token". + The native Windows version does not support these options. + + The actual security context switch is performed after the TCP + sockets have been created. This allows you to use privileged + ports (< 1024) when you start vlmcsd from the root account. + + However if you use an ini, pid or log file, you must ensure that + the unprivileged user has access to these files. You can always + log to syslog(3) from an unprivileged account on most platforms + (see -l). + + + -w ePID + Use ePID as Windows ePID. If specified, -r is disregarded for + Windows. + + + -0 ePID + Use ePID as Office 2010 ePID (including Project and Visio). If + specified, -r is disregarded for Office 2010. + + + -3 ePID + Use ePID as Office 2013 ePID (including Project and Visio). If + specified, -r is disregarded for Office 2013. + + + -H HwId + Use HwId for all products. All HWIDs in the ini file (see -i) + will not be used. In an ini file you can specify a seperate HWID + for each application-guid. This is not possible when entering a + HWID from the command line. + + HwId must be specified as 16 hex digits that are interpreted as + a series of 8 bytes (big endian). Any character that is not a + hex digit will be ignored. This is for better readability. The + following commands are identical: + + vlmcsd -H 0123456789ABCDEF + vlmcsd -H 01:23:45:67:89:ab:cd:ef + vlmcsd -H "01 23 45 67 89 AB CD EF" + + + -i filename + Use configuration file (aka ini file) filename. Most configura‐ + tion parameters can be set either via the command line or an ini + file. The command line always has precedence over configuration + items in the ini file. See vlmcsd.ini(5) for the format of the + configuration file. + + If vlmcsd has been compiled to use a default configuration file + (often /etc/vlmcsd.ini), you may use -i- to ignore the default + configuration file. + + + -r0, -r1 (default) and -r2 + These options determine how ePIDs are generated if + + - you did not sprecify an ePID in the command line and + - you haven't used -i or + - the file specified by -i cannot be opened or + - the file specified by -i does not contain the application-guid + for the KMS request + + -r0 means there are no random ePIDs. vlmcsd simply issues + default ePIDs that are built into the binary at compile time. + Pro: behaves like real KMS server that also always issues the + same ePID. Con: Microsoft may start blacklisting again and the + default ePID may not work any longer. + + -r1 instructs vlmcsd to generate random ePIDs when the program + starts or receives a SIGHUP signal and uses these ePIDs until it + is stopped or receives another SIGHUP. Most other KMS emulators + generate a new ePID on every KMS request. This is easily + detectable. Microsoft could just modify sppsvc.exe in a way that + it always sends two identical KMS requests in two RPC requests + but over the same TCP connection. If both KMS responses contain + the different ePIDs, the KMS server is not genuine. -r1 is the + default mode. -r1 also ensures that all three ePIDs (Windows, + Office 2010 and Office 2013) use the same OS build number and + LCID (language id). + + If vlmcsd has been started by an internet superserver, -r1 works + identically to -r2. This is simply due to the fact that vlmcsd + is started upon a connection request and does not stay in memory + after servicing a KMS request. + + -r2 behaves like most other KMS server emulators with random + support and generates a new random ePID on every request. Use + this mode with "care". However since Microsoft currently does + not seem to do any verification of the ePID, you currently don't + need to pay attention to ePIDs at all. + + + -C LCID + Do not randomize the locale id part of the ePID and use LCID + instead. The LCID must be specified as a decimal number, e.g. + 1049 for "Russian - Russia". This option has no effect if the + ePID is not randomized at all, e.g. if it is selected from the + command line or an ini file. + + By default vlmcsd generates a valid locale id that is recognized + by .NET Framework 4.0. This may lead to a locale id which is + unlikely to occur in your country, for instance 2155 for "Quecha + - Ecuador". You may want to select the locale id of your country + instead. See MSDN ⟨http://msdn.microsoft.com/en-us/goglobal/ + bb964664.aspx⟩ for a list of valid LCIDs. Please note that some + of them are not recognized by .NET Framework 4.0. + + Most other KMS emulators use a fixed LCID of 1033 (English - + US). To achive the same behavior in vlmcsd use -C 1033. + + + -R renewal-interval + Instructs clients to renew activation every renewal-interval. + The renewal-interval is a number optionally immediately followed + by a letter indicating the unit. Valid unit letters are s (sec‐ + onds), m (minutes), h (hours), d (days) and w (weeks). If you do + not specify a letter, minutes is assumed. + + -R3d for instance instructs clients to renew activation every 3 + days. The default renewal-interval is 10080 (identical to 7d and + 1w). + + Due to poor implementation of Microsofts KMS Client it cannot be + guaranteed that activation is renewed on time as specfied by the + -R option. Don't care about that. Renewal will happen well + before your activation expires (usually 180 days). + + Even though you can specify seconds, the granularity of this + option is 1 minute. Seconds are rounded down to the next multi‐ + ple of 60. + + + -A activation-interval + Instructs clients to retry activation every activation-interval + if it was unsuccessful, e.g. because it could not reach the + server. The default is 120 (identical to 2h). activation-inter‐ + val follows the same syntax as renewal-interval in the -R + option. + + + -s Installs vlmcsd as a Windows service. This option only works + with the native Windows version and Cygwin. Combine -s with + other command line options. These will be in effect when you + start the service. The service automatically starts when you + reboot your machine. To start it manually, type "net start vlm‐ + csd". + + If you use Cygwin, you must include your Cygwin system DLL + directory (usually C:\Cygwin\bin or C:\Cygwin64\bin) into the + PATH environment variable or the service will not start. + + You can reinstall the service anytime using vlmcsd -s again, + e.g. with a different command line. If the service is running, + it will be restarted with the new command line. + + When using -s the command line is checked for basic syntax + errors only. For example "vlmcsd -s -L 1.2.3.4" reports no error + but the service will not start if 1.2.3.4 is not an IP address + on your system. + + + -S Uninstalls the vlmcsd service. Works only with the native Win‐ + dows version and Cygwin. All other options will be ignored if + you include -S in the command line. + + + -U [domain\]username + Can only be used together with -s. Starts the service as a dif‐ + ferent user than the local SYSTEM account. This is used to run + the service under an account with low privileges. If you omit + the domain, an account from the local computer will be used. + + You may use "NT AUTHORITY\NetworkService". This is a pseudo user + with low privileges. You may also use "NT AUTHORITY\LocalSer‐ + vice" which has more privileges but these are of no use for run‐ + ning vlmcsd. + + Make sure that the user you specify has at least execute permis‐ + sion for your executable. "NT AUTHORITY\NetworkService" normally + has no permission to run binaries from your home directory. + + For your convenience you can use the special username "/l" as a + shortcut for "NT AUTHORITY\LocalService" and "/n" for "NT + AUTHORITY\NetworkService". "vlmcsd -s -U /n" installs the ser‐ + vice to run as "NT AUTHORITY\NetworkService". + + + -W password + Can only be used together with -s. Specifies a password for the + corresponding username you use with -U. SYSTEM, "NT AUTHOR‐ + ITY\NetworkService", "NT AUTHORITY\LocalService" do not require + a password. + + If you specify a user with even lower privileges than "NT + AUTHORITY\NetworkService", you must specify its password. You + also have to grant the "Log on as a service" right to that user. + + +SIGNALS + The following signals differ from the default behavior: + + + SIGTERM, SIGINT + These signals cause vlmcsd to exit gracefully. All global sema‐ + phores and shared memory pages will be released, the pid file + will be unlinked (deleted) and a shutdown message will be + logged. + + + SIGHUP Causes vlmcsd to be restarted completely. This is useful if you + started vlmcsd with an ini file. You can modify the ini file + while vlmcsd is running and then sending SIGHUP, e.g. by typing + "killall -SIGHUP vlmcsd" or "kill -SIGHUP `cat /var/run/vlm‐ + csd.pid`". + + The SIGHUP handler has been implemented relatively simple. It is + virtually the same as stopping vlmcsd and starting it again + immediately with the following exceptions: + + + — The new process does not get a new process id. + + — If you used a pid file, it is not deleted and recreated + because the process id stays the same. + + — If you used the 'user' and/or 'group' directive in an ini + file these are ignored. This is because once you switched to + lower privileged users and groups, there is no way back. Any‐ + thing else would be a severe security flaw in the OS. + + Signaling is not available in the native Windows version and in the + Cygwin version when it runs as Windows service. + + +SUPPORTED OPERATING SYSTEMS + vlmcsd compiles and runs on Linux, Windows (no Cygwin required but + explicitly supported), Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, + Solaris, OpenIndiana, Android and iOS. Other POSIX or unixoid OSses may + work with unmodified sources or may require minor porting efforts. + + +SUPPORTED PRODUCTS + vlmcsd can answer activation requests for the following products: Win‐ + dows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10, Windows + Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows + Server 2012 R2, Office 2010, Project 2010, Visio 2010, Office 2013, + Project 2013, Visio 2013. + + Office, Project and Visio must be volume license versions. + + +FILES + vlmcsd.ini(5) + + +EXAMPLES + vlmcsd -f + Starts vlmcsd in foreground. Useful if you use it for the first + time and want to see what's happening when a client requests + activation. + + + vlmcsd -l /var/log/vlmcsd.log + Starts vlmcsd as a daemon and logs everything to /var/log/vlm‐ + csd.log. + + + vlmcsd -L 192.168.1.17 + Starts vlmcsd as a daemon and listens on IP address 192.168.1.17 + only. This is useful for routers that have a public and a pri‐ + vate IP address to prevent your KMS server from becoming public. + + + vlmcsd -s -U /n -l C:\logs\vlmcsd.log + Installs vlmcsd as a Windows service with low privileges and + logs everything to C:\logs\vlmcsd.log when the service is + started with "net start vlmcsd". + + +BUGS + An ePID specified in an ini file must not contain spaces. + + The maximum number of -L options in the command line or listen state‐ + ments in the inifile is the platform default for FD_SETSIZE. This is 64 + on Windows and 1024 on most Unixes. + + +AUTHOR + Written by crony12, Hotbird64 and vityan666. With contributions from + DougQaid. + + +CREDITS + Thanks to CODYQX4, deagles, eIcn, mikmik38, nosferati87, qad, Rati‐ + borus, ... + + +SEE ALSO + vlmcsd.ini(5), vlmcsd(7), vlmcs(1), vlmcsdmulti(1) + + + +Hotbird64 July 2015 VLMCSD(8) diff --git a/vlmcsd.c b/vlmcsd.c new file mode 100644 index 0000000..63ef423 --- /dev/null +++ b/vlmcsd.c @@ -0,0 +1,1685 @@ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#if defined(USE_MSRPC) && !defined(_WIN32) && !defined(__CYGWIN__) +#error Microsoft RPC is only available on Windows and Cygwin +#endif + +#if defined(NO_SOCKETS) && defined(USE_MSRPC) +#error Cannot use inetd mode with Microsoft RPC +#endif + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include +#include +#include +#include +#include + +#ifndef _WIN32 +#include +#include +#include + +#if !defined(NO_LIMIT) && !__minix__ +#include +#if !__ANDROID__ +#include +#else // __ANDROID__ +#include +#endif // __ANDROID__ +#endif // !defined(NO_LIMIT) && !__minix__ + +#include +#include +#include +#include +#include +#endif // !_WIN32 + +#if __APPLE__ +#include +#endif // __APPLE__ + +#if __linux__ && defined(USE_AUXV) +#include +#endif + +#if __FreeBSD__ +#include +#endif + +#include "vlmcsd.h" +#include "endian.h" +#include "shared_globals.h" +#include "output.h" +#ifndef USE_MSRPC +#include "network.h" +#else // USE_MSRPC +#include "msrpc-server.h" +#endif // USE_MSRPC +#include "ntservice.h" +#include "helpers.h" + + +static const char* const optstring = "N:B:m:t:w:0:3:H:A:R:u:g:L:p:i:P:l:r:U:W:C:SsfeDd46VvIdqkZ"; + +#if !defined(NO_SOCKETS) +#if !defined(USE_MSRPC) +static uint_fast8_t maxsockets = 0; +static int_fast8_t haveIPv6Stack = 0; +static int_fast8_t haveIPv4Stack = 0; +static int_fast8_t v6required = 0; +static int_fast8_t v4required = 0; +#endif // !defined(USE_MSRPC) +#endif // !defined(NO_SOCKETS) + +#ifdef _NTSERVICE +static int_fast8_t installService = 0; +static const char *restrict ServiceUser = NULL; +static const char *restrict ServicePassword = ""; +#endif + +#ifndef NO_PID_FILE +static const char *fn_pid = NULL; +#endif + +#ifndef NO_INI_FILE + +#ifdef INI_FILE +static const char *fn_ini = INI_FILE; +#else // !INI_FILE +static const char *fn_ini = NULL; +#endif // !INI_FILE + +static const char* IniFileErrorMessage = ""; +char* IniFileErrorBuffer = NULL; +#define INIFILE_ERROR_BUFFERSIZE 256 + +static IniFileParameter_t IniFileParameterList[] = +{ +# ifndef NO_RANDOM_EPID + { "RandomizationLevel", INI_PARAM_RANDOMIZATION_LEVEL }, + { "LCID", INI_PARAM_LCID }, +# endif // NO_RANDOM_EPID +# ifdef USE_MSRPC + { "Port", INI_PARAM_PORT }, +# endif // USE_MSRPC +# if !defined(NO_SOCKETS) && !defined(USE_MSRPC) + { "Listen", INI_PARAM_LISTEN }, +# if !defined(NO_LIMIT) && !__minix__ + { "MaxWorkers", INI_PARAM_MAX_WORKERS }, +# endif // !defined(NO_LIMIT) && !__minix__ +# endif // !defined(NO_SOCKETS) && !defined(USE_MSRPC) +# if !defined(NO_TIMEOUT) && !__minix__ && !defined(USE_MSRPC) & !defined(USE_MSRPC) + { "ConnectionTimeout", INI_PARAM_CONNECTION_TIMEOUT }, +# endif // !defined(NO_TIMEOUT) && !__minix__ && !defined(USE_MSRPC) & !defined(USE_MSRPC) +# ifndef USE_MSRPC + { "DisconnectClientsImmediately", INI_PARAM_DISCONNECT_IMMEDIATELY }, + { "UseNDR64", INI_PARAM_RPC_NDR64 }, + { "UseBTFN", INI_PARAM_RPC_BTFN }, +# endif // USE_MSRPC +# ifndef NO_PID_FILE + { "PIDFile", INI_PARAM_PID_FILE }, +# endif // NO_PID_FILE +# ifndef NO_LOG + { "LogFile", INI_PARAM_LOG_FILE }, +# ifndef NO_VERBOSE_LOG + { "LogVerbose", INI_PARAM_LOG_VERBOSE }, +# endif // NO_VERBOSE_LOG +# endif // NO_LOG +# ifndef NO_CUSTOM_INTERVALS + {"ActivationInterval", INI_PARAM_ACTIVATION_INTERVAL }, + {"RenewalInterval", INI_PARAM_RENEWAL_INTERVAL }, +# endif // NO_CUSTOM_INTERVALS +# if !defined(NO_USER_SWITCH) && !defined(_WIN32) + { "user", INI_PARAM_UID }, + { "group", INI_PARAM_GID}, +# endif // !defined(NO_USER_SWITCH) && !defined(_WIN32) +}; + +#endif // NO_INI_FILE + + +#if !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ + +#if !defined(USE_THREADS) && !defined(CYGWIN) && !defined(USE_MSRPC) +static int shmid = -1; +#endif + +#if __ANDROID__ && !defined(USE_THREADS) // Bionic does not wrap these syscalls (willingly because Google fears, developers don't know how to use it) + +#ifdef __NR_shmget +static int shmget(key_t key, size_t size, int shmflg) +{ + return syscall(__NR_shmget, key, size, shmflg); +} +#endif // __NR_shmget + +#ifdef __NR_shmat +static void *shmat(int shmid, const void *shmaddr, int shmflg) +{ + return (void *)syscall(__NR_shmat, shmid, shmaddr, shmflg); +} +#endif // __NR_shmat + +#ifdef __NR_shmdt +static int shmdt(const void *shmaddr) +{ + return syscall(__NR_shmdt, shmaddr); +} +#endif // __NR_shmdt + +#ifdef __NR_shmctl +static int shmctl(int shmid, int cmd, /*struct shmid_ds*/void *buf) +{ + return syscall(__NR_shmctl, shmid, cmd, buf); +} +#endif // __NR_shmctl + +#endif // __ANDROID__ && !defined(USE_THREADS) + +#endif // !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ + +#ifndef NO_USER_SWITCH +#ifndef _WIN32 + +static const char *uname = NULL, *gname = NULL; +static gid_t gid = INVALID_GID; +static uid_t uid = INVALID_UID; + +// Get Numeric id of user/group +static char GetNumericId(gid_t *restrict id, const char *const c) +{ + char* endptr; + gid_t temp; + + temp = (gid_t)strtoll(c, &endptr, 10); + + if (!*endptr) *id = temp; + + return *endptr; +} + + +// Get group id from option argument +static char GetGid() +{ + struct group *g; + + if ((g = getgrnam(optarg))) + gid = g->gr_gid; + else + return GetNumericId(&gid, optarg); + + return 0; +} + + +// Get user id from option argument +static char GetUid() +{ + struct passwd *u; + + ////PORTABILITY: Assumes uid_t and gid_t are of same size (shouldn't be a problem) + if ((u = getpwnam(optarg))) + uid = u->pw_uid; + else + return GetNumericId((gid_t*)&uid, optarg); + + return 0; +} +#endif // _WIN32 +#endif //NO_USER_SWITCH + +#ifdef NO_HELP +static __noreturn void usage() +{ + printerrorf("Incorrect parameters\n\n"); + exit(!0); +} +#else // HELP + + +static __noreturn void usage() +{ + printerrorf("vlmcsd %s\n" + "\nUsage:\n" + " %s [ options ]\n\n" + "Where:\n" + #ifndef NO_CL_PIDS + " -w always use for Windows\n" + " -0 always use for Office2010\n" + " -3 always use for Office2013\n" + " -H always use hardware Id \n" + #endif // NO_CL_PIDS + #if !defined(_WIN32) && !defined(NO_USER_SWITCH) + " -u set uid to \n" + " -g set gid to \n" + #endif // !defined(_WIN32) && !defined(NO_USER_SWITCH) + #ifndef NO_RANDOM_EPID + " -r 0|1|2\t\tset ePID randomization level (default 1)\n" + " -C \t\tuse fixed in random ePIDs\n" + #endif // NO_RANDOM_EPID + #ifndef NO_SOCKETS + #ifndef USE_MSRPC + " -4\t\t\tuse IPv4\n" + " -6\t\t\tuse IPv6\n" + " -L
[:]\tlisten on IP address
with optional \n" + " -P \t\tset TCP port for subsequent -L statements (default 1688)\n" + #else // USE_MSRPC + " -P \t\tuse TCP port (default 1688)\n" + #endif // USE_MSRPC + #if !defined(NO_LIMIT) && !__minix__ + " -m \t\tHandle max. simultaneously (default no limit)\n" + #endif // !defined(NO_LIMIT) && !__minix__ + #ifdef _NTSERVICE + " -s install vlmcsd as an NT service. Ignores -e" + #ifndef _WIN32 + ", -f and -D" + #endif // _WIN32 + "\n" + " -S remove vlmcsd service. Ignores all other options\n" + " -U run NT service as . Must be used with -s\n" + " -W optional for -U. Must be used with -s\n" + #endif // _NTSERVICE + #ifndef NO_LOG + " -e log to stdout\n" + #endif // NO_LOG + #ifndef _WIN32 // + " -D run in foreground\n" + " -f run in foreground" + #ifndef NO_LOG + " and log to stdout" + #endif // NO_LOG + "\n" + #endif // _WIN32 + #endif // NO_SOCKETS + #ifndef USE_MSRPC + #if !defined(NO_TIMEOUT) && !__minix__ + " -t \t\tdisconnect clients after of inactivity (default 30)\n" + #endif // !defined(NO_TIMEOUT) && !__minix__ + " -d\t\t\tdisconnect clients after each request\n" + " -k\t\t\tdon't disconnect clients after each request (default)\n" + " -N0, -N1\t\tdisable/enable NDR64\n" + " -B0, -B1\t\tdisable/enable bind time feature negotiation\n" + #endif // USE_MSRPC + #ifndef NO_PID_FILE + " -p write pid to \n" + #endif // NO_PID_FILE + #ifndef NO_INI_FILE + " -i \t\tuse config file \n" + #endif // NO_INI_FILE + #ifndef NO_CUSTOM_INTERVALS + " -R renew activation every (default 1w)\n" + " -A retry activation every (default 2h)\n" + #endif // NO_CUSTOM_INTERVALS + #ifndef NO_LOG + #ifndef _WIN32 + " -l syslog log to syslog\n" + #endif // _WIN32 + " -l log to \n" + #ifndef NO_VERBOSE_LOG + " -v\t\t\tlog verbose\n" + " -q\t\t\tdon't log verbose (default)\n" + #endif // NO_VERBOSE_LOG + #endif // NO_LOG + " -V display version information and exit" + "\n", + Version, global_argv[0]); + + exit(!0); +} +#endif // HELP + + +#ifndef NO_CUSTOM_INTERVALS + +// Convert time span strings (e.g. "2h", "5w") to minutes +__pure static DWORD timeSpanString2Minutes(const char *const restrict argument) +{ + char *unitId; + + long long val = strtoll(argument, &unitId, 10); + + switch(toupper((int)*unitId)) + { + case 0: + case 'M': + break; + case 'H': + val *= 60; + break; + case 'D': + val *= 60 * 24; + break; + case 'W': + val *= 60 * 24 * 7; + break; + case 'S': + val /= 60; + break; + default: + return 0; + } + + if (val < 1) val = 1; + if (val > UINT_MAX) val = UINT_MAX; + + return (DWORD)val; +} + + +#ifndef NO_INI_FILE +__pure static BOOL getTimeSpanFromIniFile(DWORD* result, const char *const restrict argument) +{ + DWORD val = timeSpanString2Minutes(argument); + if (!val) + { + IniFileErrorMessage = "Incorrect time span."; + return FALSE; + } + + *result = val; + return TRUE; +} +#endif // NO_INI_FILE + + +__pure static DWORD getTimeSpanFromCommandLine(const char *const restrict optarg, const char optchar) +{ + long long val = timeSpanString2Minutes(optarg); + + if (!val) + { + printerrorf("Fatal: No valid time span specified in option -%c.\n", optchar); + exit (!0); + } + + return (DWORD)val; +} + +#endif // NO_CUSTOM_INTERVALS + + +#ifndef NO_INI_FILE +static void ignoreIniFileParameter(uint_fast8_t iniFileParameterId) +{ + uint_fast8_t i; + + for (i = 0; i < _countof(IniFileParameterList); i++) + { + if (IniFileParameterList[i].Id != iniFileParameterId) continue; + IniFileParameterList[i].Id = 0; + break; + } +} +#else // NO_INI_FILE +#define ignoreIniFileParameter(x) +#endif // NO_INI_FILE + + +#ifndef NO_INI_FILE +static BOOL getIniFileArgumentBool(int_fast8_t *result, const char *const argument) +{ + IniFileErrorMessage = "Argument must be true/on/yes/1 or false/off/no/0"; + return getArgumentBool(result, argument); +} + + +static BOOL getIniFileArgumentInt(unsigned int *result, const char *const argument, const unsigned int min, const unsigned int max) +{ + unsigned int tempResult; + + if (!stringToInt(argument, min, max, &tempResult)) + { + snprintf(IniFileErrorBuffer, INIFILE_ERROR_BUFFERSIZE, "Must be integer between %u and %u", min, max); + IniFileErrorMessage = IniFileErrorBuffer; + return FALSE; + } + + *result = tempResult; + return TRUE; +} + + +static char* allocateStringArgument(const char *const argument) +{ + char* result = (char*)vlmcsd_malloc(strlen(argument) + 1); + strcpy(result, argument); + return result; +} + + +static BOOL setIniFileParameter(uint_fast8_t id, const char *const iniarg) +{ + unsigned int result; + BOOL success = TRUE; + + switch(id) + { +# if !defined(NO_USER_SWITCH) && !defined(_WIN32) + + case INI_PARAM_GID: + { + struct group *g; + IniFileErrorMessage = "Invalid group id or name"; + if (!(gname = allocateStringArgument(iniarg))) return FALSE; + + if ((g = getgrnam(iniarg))) + gid = g->gr_gid; + else + success = !GetNumericId(&gid, iniarg); + break; + } + + case INI_PARAM_UID: + { + struct passwd *p; + IniFileErrorMessage = "Invalid user id or name"; + if (!(uname = allocateStringArgument(iniarg))) return FALSE; + + if ((p = getpwnam(iniarg))) + uid = p->pw_uid; + else + success = !GetNumericId(&uid, iniarg); + break; + } + +# endif // !defined(NO_USER_SWITCH) && !defined(_WIN32) + +# ifndef NO_RANDOM_EPID + + case INI_PARAM_LCID: + success = getIniFileArgumentInt(&result, iniarg, 0, 32767); + if (success) Lcid = (uint16_t)result; + break; + + case INI_PARAM_RANDOMIZATION_LEVEL: + success = getIniFileArgumentInt(&result, iniarg, 0, 2); + if (success) RandomizationLevel = (int_fast8_t)result; + break; + +# endif // NO_RANDOM_EPID + +# ifdef USE_MSRPC + + case INI_PARAM_PORT: + defaultport = allocateStringArgument(iniarg); + break; + +# endif // USE_MSRPC + +# if !defined(NO_SOCKETS) && !defined(USE_MSRPC) + + case INI_PARAM_LISTEN: + maxsockets++; + return TRUE; + +# if !defined(NO_LIMIT) && !__minix__ + + case INI_PARAM_MAX_WORKERS: +# ifdef USE_MSRPC + success = getIniFileArgumentInt(&MaxTasks, iniarg, 1, RPC_C_LISTEN_MAX_CALLS_DEFAULT); +# else // !USE_MSRPC + success = getIniFileArgumentInt(&MaxTasks, iniarg, 1, SEM_VALUE_MAX); +# endif // !USE_MSRPC + break; + +# endif // !defined(NO_LIMIT) && !__minix__ +# endif // NO_SOCKETS + +# ifndef NO_PID_FILE + + case INI_PARAM_PID_FILE: + fn_pid = allocateStringArgument(iniarg); + break; + +# endif // NO_PID_FILE + +# ifndef NO_LOG + + case INI_PARAM_LOG_FILE: + fn_log = allocateStringArgument(iniarg); + break; + +# ifndef NO_VERBOSE_LOG + case INI_PARAM_LOG_VERBOSE: + success = getIniFileArgumentBool(&logverbose, iniarg); + break; + +# endif // NO_VERBOSE_LOG +# endif // NO_LOG + +# ifndef NO_CUSTOM_INTERVALS + + case INI_PARAM_ACTIVATION_INTERVAL: + success = getTimeSpanFromIniFile(&VLActivationInterval, iniarg); + break; + + case INI_PARAM_RENEWAL_INTERVAL: + success = getTimeSpanFromIniFile(&VLRenewalInterval, iniarg); + break; + +# endif // NO_CUSTOM_INTERVALS + +# ifndef USE_MSRPC + +# if !defined(NO_TIMEOUT) && !__minix__ + + case INI_PARAM_CONNECTION_TIMEOUT: + success = getIniFileArgumentInt(&result, iniarg, 1, 600); + if (success) ServerTimeout = (DWORD)result; + break; + +# endif // !defined(NO_TIMEOUT) && !__minix__ + + case INI_PARAM_DISCONNECT_IMMEDIATELY: + success = getIniFileArgumentBool(&DisconnectImmediately, iniarg); + break; + + case INI_PARAM_RPC_NDR64: + success = getIniFileArgumentBool(&UseRpcNDR64, iniarg); + break; + + case INI_PARAM_RPC_BTFN: + success = getIniFileArgumentBool(&UseRpcBTFN, iniarg); + break; + +# endif // USE_MSRPC + + default: + return FALSE; + } + + return success; +} + + +static __pure int isControlCharOrSlash(const char c) +{ + if ((unsigned char)c < '!') return !0; + if (c == '/') return !0; + return 0; +} + + +static void iniFileLineNextWord(const char **s) +{ + while ( **s && isspace((int)**s) ) (*s)++; +} + + +static BOOL setHwIdFromIniFileLine(const char **s, const ProdListIndex_t index) +{ + iniFileLineNextWord(s); + + if (**s == '/') + { + if (KmsResponseParameters[index].HwId) return TRUE; + + BYTE* HwId = (BYTE*)vlmcsd_malloc(sizeof(((RESPONSE_V6 *)0)->HwId)); + hex2bin(HwId, *s + 1, sizeof(((RESPONSE_V6 *)0)->HwId)); + KmsResponseParameters[index].HwId = HwId; + } + + return TRUE; +} + + +static BOOL checkGuidInIniFileLine(const char **s, ProdListIndex_t *const index) +{ + GUID AppGuid; + + if (!string2Uuid(*s, &AppGuid)) return FALSE; + + (*s) += GUID_STRING_LENGTH; + getProductNameHE(&AppGuid, AppList, index); + + if (*index > getAppListSize() - 2) + { + IniFileErrorMessage = "Unknown App Guid."; + return FALSE; + } + + iniFileLineNextWord(s); + if ( *(*s)++ != '=' ) return FALSE; + + return TRUE; +} + + +static BOOL setEpidFromIniFileLine(const char **s, const ProdListIndex_t index) +{ + iniFileLineNextWord(s); + const char *savedPosition = *s; + uint_fast16_t i; + + for (i = 0; !isControlCharOrSlash(**s); i++) + { + if (utf8_to_ucs2_char((const unsigned char*)*s, (const unsigned char**)s) == (WCHAR)~0) + { + return FALSE; + } + } + + if (i < 1 || i >= PID_BUFFER_SIZE) return FALSE; + if (KmsResponseParameters[index].Epid) return TRUE; + + size_t size = *s - savedPosition + 1; + + char* epidbuffer = (char*)vlmcsd_malloc(size); + memcpy(epidbuffer, savedPosition, size - 1); + epidbuffer[size - 1] = 0; + + KmsResponseParameters[index].Epid = epidbuffer; + + #ifndef NO_LOG + KmsResponseParameters[index].EpidSource = fn_ini; + #endif //NO_LOG + + return TRUE; +} + + +static BOOL getIniFileArgument(const char **s) +{ + while (!isspace((int)**s) && **s != '=' && **s) (*s)++; + iniFileLineNextWord(s); + + if (*((*s)++) != '=') + { + IniFileErrorMessage = "'=' required after keyword."; + return FALSE; + } + + iniFileLineNextWord(s); + + if (!**s) + { + IniFileErrorMessage = "missing argument after '='."; + return FALSE; + } + + return TRUE; +} + + +static BOOL handleIniFileParameter(const char *s) +{ + uint_fast8_t i; + + for (i = 0; i < _countof(IniFileParameterList); i++) + { + if (strncasecmp(IniFileParameterList[i].Name, s, strlen(IniFileParameterList[i].Name))) continue; + if (!IniFileParameterList[i].Id) return TRUE; + + if (!getIniFileArgument(&s)) return FALSE; + + return setIniFileParameter(IniFileParameterList[i].Id, s); + } + + IniFileErrorMessage = "Unknown keyword."; + return FALSE; +} + + +#if !defined(NO_SOCKETS) && !defined(USE_MSRPC) +static BOOL setupListeningSocketsFromIniFile(const char *s) +{ + if (!maxsockets) return TRUE; + if (strncasecmp("Listen", s, 6)) return TRUE; + if (!getIniFileArgument(&s)) return TRUE; + + snprintf(IniFileErrorBuffer, INIFILE_ERROR_BUFFERSIZE, "Cannot listen on %s.", s); + IniFileErrorMessage = IniFileErrorBuffer; + return addListeningSocket(s); +} +#endif // !defined(NO_SOCKETS) && !defined(USE_MSRPC) + + +static BOOL readIniFile(const uint_fast8_t pass) +{ + char line[256]; + const char *s; + ProdListIndex_t appIndex; + unsigned int lineNumber; + uint_fast8_t lineParseError; + + FILE *restrict f; + BOOL result = TRUE; + + IniFileErrorBuffer = (char*)vlmcsd_malloc(INIFILE_ERROR_BUFFERSIZE); + + if ( !(f = fopen(fn_ini, "r") )) return FALSE; + + for (lineNumber = 1; (s = fgets(line, sizeof(line), f)); lineNumber++) + { + line[strlen(line) - 1] = 0; + + iniFileLineNextWord(&s); + if (*s == ';' || *s == '#' || !*s) continue; + +# ifndef NO_SOCKETS + if (pass == INI_FILE_PASS_1) +# endif // NO_SOCKETS + { + if (handleIniFileParameter(s)) continue; + + lineParseError = !checkGuidInIniFileLine(&s, &appIndex) || + !setEpidFromIniFileLine(&s, appIndex) || + !setHwIdFromIniFileLine(&s, appIndex); + } +# if !defined(NO_SOCKETS) && !defined(USE_MSRPC) + else if (pass == INI_FILE_PASS_2) + { + lineParseError = !setupListeningSocketsFromIniFile(s); + } + else + { + return FALSE; + } +# endif // NO_SOCKETS + + if (lineParseError) + { + printerrorf("Warning: %s line %u: \"%s\". %s\n", fn_ini, lineNumber, line, IniFileErrorMessage); + continue; + } + } + + if (ferror(f)) result = FALSE; + + free(IniFileErrorBuffer); + fclose(f); + +# if !defined(NO_SOCKETS) && !defined(NO_LOG) + + if (pass == INI_FILE_PASS_1 && !InetdMode && result) + { +# ifdef _NTSERVICE + if (!installService) +# endif // _NTSERVICE + logger("Read ini file %s\n", fn_ini); + } + +# endif // !defined(NO_SOCKETS) && !defined(NO_LOG) + + return result; +} +#endif // NO_INI_FILE + + +#if !defined(NO_SOCKETS) +#if !defined(_WIN32) +#if !defined(NO_SIGHUP) +static void exec_self(char** argv) +{ +# if __linux__ && defined(USE_AUXV) + + char *execname_ptr = (char*)getauxval(AT_EXECFN); + if (execname_ptr) execv(execname_ptr, argv); + +# elif (__linux__ || __CYGWIN__) && !defined(NO_PROCFS) + + execv(realpath("/proc/self/exe", NULL), argv); + +# elif (__FreeBSD__) && !defined(NO_PROCFS) + + int mib[4]; + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PATHNAME; + mib[3] = -1; + char path[PATH_MAX + 1]; + size_t cb = sizeof(path); + if (!sysctl(mib, 4, path, &cb, NULL, 0)) execv(path, argv); + +# elif (__DragonFly__) && !defined(NO_PROCFS) + + execv(realpath("/proc/curproc/file", NULL), argv); + +# elif __NetBSD__ && !defined(NO_PROCFS) + + execv(realpath("/proc/curproc/exe", NULL), argv); + +# elif __sun__ + + const char* exename = getexecname(); + if (exename) execv(exename, argv); + +# elif __APPLE__ + + char path[PATH_MAX + 1]; + uint32_t size = sizeof(path); + if (_NSGetExecutablePath(path, &size) == 0) execv(path, argv); + +# else + + execvp(argv[0], argv); + +# endif +} + + +static void HangupHandler(const int signal_unused) +{ + int i; + int_fast8_t daemonize_protection = TRUE; + CARGV argv_in = multi_argv == NULL ? global_argv : multi_argv; + int argc_in = multi_argc == 0 ? global_argc : multi_argc; + const char** argv_out = (const char**)vlmcsd_malloc((argc_in + 2) * sizeof(char**)); + + for (i = 0; i < argc_in; i++) + { + if (!strcmp(argv_in[i], "-Z")) daemonize_protection = FALSE; + argv_out[i] = argv_in[i]; + } + + argv_out[argc_in] = argv_out[argc_in + 1] = NULL; + if (daemonize_protection) argv_out[argc_in] = (char*) "-Z"; + + exec_self((char**)argv_out); + +# ifndef NO_LOG + logger("Fatal: Unable to restart on SIGHUP: %s\n", strerror(errno)); +# endif + +# ifndef NO_PID_FILE + if (fn_pid) unlink(fn_pid); +# endif // NO_PID_FILE + exit(errno); +} +#endif // NO_SIGHUP + + +static void terminationHandler(const int signal_unused) +{ + cleanup(); + exit(0); +} + + +#if defined(CHILD_HANDLER) || __minix__ +static void childHandler(const int signal) +{ + waitpid(-1, NULL, WNOHANG); +} +#endif // defined(CHILD_HANDLER) || __minix__ + + +static int daemonizeAndSetSignalAction() +{ + struct sigaction sa; + sigemptyset(&sa.sa_mask); + +# ifndef NO_LOG + if ( !nodaemon) if (daemon(!0, logstdout)) +# else // NO_LOG + if ( !nodaemon) if (daemon(!0, 0)) +# endif // NO_LOG + { + printerrorf("Fatal: Could not daemonize to background.\n"); + return(errno); + } + + if (!InetdMode) + { +# ifndef USE_THREADS + +# if defined(CHILD_HANDLER) || __minix__ + sa.sa_handler = childHandler; +# else // !(defined(CHILD_HANDLER) || __minix__) + sa.sa_handler = SIG_IGN; +# endif // !(defined(CHILD_HANDLER) || __minix__) + sa.sa_flags = SA_NOCLDWAIT; + + if (sigaction(SIGCHLD, &sa, NULL)) + return(errno); + +# endif // !USE_THREADS + + sa.sa_handler = terminationHandler; + sa.sa_flags = 0; + + sigaction(SIGINT, &sa, NULL); + sigaction(SIGTERM, &sa, NULL); + +# ifndef NO_SIGHUP + sa.sa_handler = HangupHandler; + sa.sa_flags = SA_NODEFER; + sigaction(SIGHUP, &sa, NULL); +# endif // NO_SIGHUP + } + + return 0; +} + + +#else // _WIN32 + +static BOOL terminationHandler(const DWORD fdwCtrlType) +{ + // What a lame substitute for Unix signal handling + switch(fdwCtrlType) + { + case CTRL_C_EVENT: + case CTRL_CLOSE_EVENT: + case CTRL_BREAK_EVENT: + case CTRL_LOGOFF_EVENT: + case CTRL_SHUTDOWN_EVENT: + cleanup(); + exit(0); + default: + return FALSE; + } +} + + +static DWORD daemonizeAndSetSignalAction() +{ + if(!SetConsoleCtrlHandler( (PHANDLER_ROUTINE) terminationHandler, TRUE )) + { + #ifndef NO_LOG + DWORD rc = GetLastError(); + logger("Warning: Could not register Windows signal handler: Error %u\n", rc); + #endif // NO_LOG + } + + return ERROR_SUCCESS; +} +#endif // _WIN32 +#endif // !defined(NO_SOCKETS) + + +// Workaround for Cygwin fork bug (only affects cygwin processes that are Windows services) +// Best is to compile for Cygwin with threads. fork() is slow and unreliable on Cygwin +#if !defined(NO_INI_FILE) || !defined(NO_LOG) || !defined(NO_CL_PIDS) +__pure static char* getCommandLineArg(char *const restrict optarg) +{ + #if !defined (__CYGWIN__) || defined(USE_THREADS) || defined(NO_SOCKETS) + return optarg; + #else + if (!IsNTService) return optarg; + + return allocateStringArgument(optarg); + #endif +} +#endif // !defined(NO_INI_FILE) || !defined(NO_LOG) || !defined(NO_CL_PIDS) + + +static void parseGeneralArguments() { + int o; + + #ifndef NO_CL_PIDS + BYTE* HwId; + #endif // NO_CL_PIDS + + for (opterr = 0; ( o = getopt(global_argc, (char* const*)global_argv, optstring) ) > 0; ) switch (o) + { + #if !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) + case 'Z': + IsRestarted = TRUE; + nodaemon = TRUE; + break; + #endif // !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) + + #ifndef NO_CL_PIDS + case 'w': + KmsResponseParameters[APP_ID_WINDOWS].Epid = getCommandLineArg(optarg); + #ifndef NO_LOG + KmsResponseParameters[APP_ID_WINDOWS].EpidSource = "command line"; + #endif // NO_LOG + break; + + case '0': + KmsResponseParameters[APP_ID_OFFICE2010].Epid = getCommandLineArg(optarg); + #ifndef NO_LOG + KmsResponseParameters[APP_ID_OFFICE2010].EpidSource = "command line"; + #endif // NO_LOG + break; + + case '3': + KmsResponseParameters[APP_ID_OFFICE2013].Epid = getCommandLineArg(optarg); + #ifndef NO_LOG + KmsResponseParameters[APP_ID_OFFICE2013].EpidSource = "command line"; + #endif // NO_LOG + break; + + case 'H': + HwId = (BYTE*)vlmcsd_malloc(sizeof(((RESPONSE_V6 *)0)->HwId)); + + hex2bin(HwId, optarg, sizeof(((RESPONSE_V6 *)0)->HwId)); + + KmsResponseParameters[APP_ID_WINDOWS].HwId = HwId; + KmsResponseParameters[APP_ID_OFFICE2010].HwId = HwId; + KmsResponseParameters[APP_ID_OFFICE2013].HwId = HwId; + break; + #endif // NO_CL_PIDS + + #ifndef NO_SOCKETS + + #ifndef USE_MSRPC + case '4': + case '6': + case 'P': + ignoreIniFileParameter(INI_PARAM_LISTEN); + break; + #else // USE_MSRPC + case 'P': + defaultport = optarg; + ignoreIniFileParameter(INI_PARAM_PORT); + break; + #endif // USE_MSRPC + + #if !defined(NO_LIMIT) && !__minix__ + + case 'm': + #ifdef USE_MSRPC + MaxTasks = getOptionArgumentInt(o, 1, RPC_C_LISTEN_MAX_CALLS_DEFAULT); + #else // !USE_MSRPC + MaxTasks = getOptionArgumentInt(o, 1, SEM_VALUE_MAX); + #endif // !USE_MSRPC + ignoreIniFileParameter(INI_PARAM_MAX_WORKERS); + break; + + #endif // !defined(NO_LIMIT) && !__minix__ + #endif // NO_SOCKETS + + #if !defined(NO_TIMEOUT) && !__minix__ && !defined(USE_MSRPC) + case 't': + ServerTimeout = getOptionArgumentInt(o, 1, 600); + ignoreIniFileParameter(INI_PARAM_CONNECTION_TIMEOUT); + break; + #endif // !defined(NO_TIMEOUT) && !__minix__ && !defined(USE_MSRPC) + + #ifndef NO_PID_FILE + case 'p': + fn_pid = getCommandLineArg(optarg); + ignoreIniFileParameter(INI_PARAM_PID_FILE); + break; + #endif + + #ifndef NO_INI_FILE + case 'i': + fn_ini = getCommandLineArg(optarg); + if (!strcmp(fn_ini, "-")) fn_ini = NULL; + break; + #endif + + #ifndef NO_LOG + case 'l': + fn_log = getCommandLineArg(optarg); + ignoreIniFileParameter(INI_PARAM_LOG_FILE); + break; + + #ifndef NO_VERBOSE_LOG + case 'v': + case 'q': + logverbose = o == 'v'; + ignoreIniFileParameter(INI_PARAM_LOG_VERBOSE); + break; + + #endif // NO_VERBOSE_LOG + #endif // NO_LOG + + #ifndef NO_SOCKETS + #ifndef USE_MSRPC + case 'L': + maxsockets++; + ignoreIniFileParameter(INI_PARAM_LISTEN); + break; + #endif // USE_MSRPC + + case 'f': + nodaemon = 1; + #ifndef NO_LOG + logstdout = 1; + #endif + break; + + #ifdef _NTSERVICE + case 'U': + ServiceUser = optarg; + break; + + case 'W': + ServicePassword = optarg; + break; + + case 's': + #ifndef USE_MSRPC + if (InetdMode) usage(); + #endif // USE_MSRPC + if (!IsNTService) installService = 1; // Install + break; + + case 'S': + if (!IsNTService) installService = 2; // Remove + break; + #endif // _NTSERVICE + + case 'D': + nodaemon = 1; + break; + + #ifndef NO_LOG + case 'e': + logstdout = 1; + break; + #endif // NO_LOG + #endif // NO_SOCKETS + + #ifndef _WIN32 + case 'I': // Backward compatibility with svn681 and earlier + break; + #endif // _WIN32 + + #ifndef NO_RANDOM_EPID + case 'r': + RandomizationLevel = (int_fast8_t)getOptionArgumentInt(o, 0, 2); + ignoreIniFileParameter(INI_PARAM_RANDOMIZATION_LEVEL); + break; + + case 'C': + Lcid = (uint16_t)getOptionArgumentInt(o, 0, 32767); + + ignoreIniFileParameter(INI_PARAM_LCID); + + #ifdef _PEDANTIC + if (!IsValidLcid(Lcid)) + { + printerrorf("Warning: %s is not a valid LCID.\n", optarg); + } + #endif // _PEDANTIC + + break; + #endif // NO_RANDOM_PID + + #if !defined(NO_USER_SWITCH) && !defined(_WIN32) + case 'g': + gname = optarg; + ignoreIniFileParameter(INI_PARAM_GID); + #ifndef NO_SIGHUP + if (!IsRestarted) + #endif // NO_SIGHUP + if (GetGid()) + { + printerrorf("Fatal: setgid for %s failed.\n", optarg); + exit(!0); + } + break; + + case 'u': + uname = optarg; + ignoreIniFileParameter(INI_PARAM_UID); + #ifndef NO_SIGHUP + if (!IsRestarted) + #endif // NO_SIGHUP + if (GetUid()) + { + printerrorf("Fatal: setuid for %s failed.\n", optarg); + exit(!0); + } + break; + #endif // NO_USER_SWITCH && !_WIN32 + + #ifndef NO_CUSTOM_INTERVALS + case 'R': + VLRenewalInterval = getTimeSpanFromCommandLine(optarg, o); + ignoreIniFileParameter(INI_PARAM_RENEWAL_INTERVAL); + break; + + case 'A': + VLActivationInterval = getTimeSpanFromCommandLine(optarg, o); + ignoreIniFileParameter(INI_PARAM_ACTIVATION_INTERVAL); + break; + #endif + + #ifndef USE_MSRPC + case 'd': + case 'k': + DisconnectImmediately = o == 'd'; + ignoreIniFileParameter(INI_PARAM_DISCONNECT_IMMEDIATELY); + break; + + case 'N': + if (!getArgumentBool(&UseRpcNDR64, optarg)) usage(); + ignoreIniFileParameter(INI_PARAM_RPC_NDR64); + break; + + case 'B': + if (!getArgumentBool(&UseRpcBTFN, optarg)) usage(); + ignoreIniFileParameter(INI_PARAM_RPC_BTFN); + break; + #endif // !USE_MSRPC + + case 'V': + #ifdef _NTSERVICE + if (IsNTService) break; + #endif + printf("vlmcsd %s\n", Version); + exit(0); + + default: + usage(); + } + + // Do not allow non-option arguments + if (optind != global_argc) + usage(); + + #ifdef _NTSERVICE + // -U and -W must be used with -s + if ((ServiceUser || *ServicePassword) && installService != 1) usage(); + #endif // _NTSERVICE +} + + +#ifndef NO_PID_FILE +static void writePidFile() +{ +# ifndef NO_SIGHUP + if (IsRestarted) return; +# endif // NO_SIGHUP + + if (fn_pid && !InetdMode) + { + FILE *_f = fopen(fn_pid, "w"); + + if ( _f ) + { + fprintf(_f, "%u", (uint32_t)getpid()); + fclose(_f); + } + + #ifndef NO_LOG + else + { + logger("Warning: Cannot write pid file '%s'. %s.\n", fn_pid, strerror(errno)); + } + #endif // NO_LOG + } +} +#else +#define writePidFile(x) +#endif // NO_PID_FILE + +#if !defined(NO_SOCKETS) && !defined(USE_MSRPC) + +void cleanup() +{ + + if (!InetdMode) + { + #ifndef NO_PID_FILE + if (fn_pid) unlink(fn_pid); + #endif // NO_PID_FILE + closeAllListeningSockets(); + + #if !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !defined(_WIN32) && !__minix__ + sem_unlink("/vlmcsd"); + #if !defined(USE_THREADS) && !defined(CYGWIN) + if (shmid >= 0) + { + if (Semaphore != (sem_t*)-1) shmdt(Semaphore); + shmctl(shmid, IPC_RMID, NULL); + } + #endif // !defined(USE_THREADS) && !defined(CYGWIN) + #endif // !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !defined(_WIN32) && !__minix__ + + #ifndef NO_LOG + logger("vlmcsd %s was shutdown\n", Version); + #endif // NO_LOG + } + +} + +#elif defined(USE_MSRPC) + +void cleanup() +{ +# ifndef NO_PID_FILE + if (fn_pid) unlink(fn_pid); +# endif // NO_PID_FILE + +# ifndef NO_LOG + logger("vlmcsd %s was shutdown\n", Version); +# endif // NO_LOG +} + +#else // Neither Sockets nor RPC + +__pure void cleanup() {} + +#endif // Neither Sockets nor RPC + + +#if !defined(USE_MSRPC) && !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !__minix__ +// Get a semaphore for limiting the maximum concurrent tasks +static void allocateSemaphore(void) +{ + #ifdef USE_THREADS + #define sharemode 0 + #else + #define sharemode 1 + #endif + + #ifndef _WIN32 + sem_unlink("/vlmcsd"); + #endif + + if(MaxTasks < SEM_VALUE_MAX && !InetdMode) + { + #ifndef _WIN32 + + #if !defined(USE_THREADS) && !defined(CYGWIN) + + if ((Semaphore = sem_open("/vlmcsd", O_CREAT /*| O_EXCL*/, 0700, MaxTasks)) == SEM_FAILED) // fails on many systems + { + // We didn't get a named Semaphore (/dev/shm on Linux) so let's try our own shared page + + if ( + ( shmid = shmget(IPC_PRIVATE, sizeof(sem_t), IPC_CREAT | 0600) ) < 0 || + ( Semaphore = (sem_t*)shmat(shmid, NULL, 0) ) == (sem_t*)-1 || + sem_init(Semaphore, 1, MaxTasks) < 0 + ) + { + int errno_save = errno; + if (Semaphore != (sem_t*)-1) shmdt(Semaphore); + if (shmid >= 0) shmctl(shmid, IPC_RMID, NULL); + printerrorf("Warning: Could not create semaphore: %s\n", vlmcsd_strerror(errno_save)); + MaxTasks = SEM_VALUE_MAX; + } + } + + #else // THREADS or CYGWIN + + Semaphore = (sem_t*)vlmcsd_malloc(sizeof(sem_t)); + + if (sem_init(Semaphore, sharemode, MaxTasks) < 0) // sem_init is not implemented on Darwin (returns ENOSYS) + { + free(Semaphore); + + if ((Semaphore = sem_open("/vlmcsd", O_CREAT /*| O_EXCL*/, 0700, MaxTasks)) == SEM_FAILED) + { + printerrorf("Warning: Could not create semaphore: %s\n", vlmcsd_strerror(errno)); + MaxTasks = SEM_VALUE_MAX; + } + } + + #endif // THREADS or CYGWIN + + #else // _WIN32 + + if (!(Semaphore = CreateSemaphoreA(NULL, MaxTasks, MaxTasks, NULL))) + { + printerrorf("Warning: Could not create semaphore: %s\n", vlmcsd_strerror(GetLastError())); + MaxTasks = SEM_VALUE_MAX; + } + + #endif // _WIN32 + } +} +#endif // !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !__minix__ + + +#if !defined(NO_SOCKETS) && !defined(USE_MSRPC) +int setupListeningSockets() +{ + int o; + uint_fast8_t allocsockets = maxsockets ? maxsockets : 2; + + SocketList = (SOCKET*)vlmcsd_malloc((size_t)allocsockets * sizeof(SOCKET)); + + haveIPv4Stack = checkProtocolStack(AF_INET); + haveIPv6Stack = checkProtocolStack(AF_INET6); + + // Reset getopt since we've alread used it + optReset(); + + for (opterr = 0; ( o = getopt(global_argc, (char* const*)global_argv, optstring) ) > 0; ) switch (o) + { + case '4': + + if (!haveIPv4Stack) + { + printerrorf("Fatal: Your system does not support %s.\n", cIPv4); + return !0; + } + v4required = 1; + break; + + case '6': + + if (!haveIPv6Stack) + { + printerrorf("Fatal: Your system does not support %s.\n", cIPv6); + return !0; + } + v6required = 1; + break; + + case 'L': + + addListeningSocket(optarg); + break; + + case 'P': + + defaultport = optarg; + break; + + default: + + break; + } + + +# ifndef NO_INI_FILE + if (maxsockets && !numsockets) + { + if (fn_ini && !readIniFile(INI_FILE_PASS_2)) + { + #ifdef INI_FILE + if (strcmp(fn_ini, INI_FILE)) + #endif // INI_FILE + printerrorf("Warning: Can't read %s: %s\n", fn_ini, strerror(errno)); + } + } +# endif + + // if -L hasn't been specified on the command line, use default sockets (all IP addresses) + // maxsocket results from first pass parsing the arguments + if (!maxsockets) + { + if (haveIPv6Stack && (v6required || !v4required)) addListeningSocket("::"); + if (haveIPv4Stack && (v4required || !v6required)) addListeningSocket("0.0.0.0"); + } + + if (!numsockets) + { + printerrorf("Fatal: Could not listen on any socket.\n"); + return(!0); + } + + return 0; +} +#endif // !defined(NO_SOCKETS) && !defined(USE_MSRPC) + + +int server_main(int argc, CARGV argv) +{ + #if !defined(_NTSERVICE) && !defined(NO_SOCKETS) + int error; + #endif // !defined(_NTSERVICE) && !defined(NO_SOCKETS) + + // Initialize ePID / HwId parameters + memset(KmsResponseParameters, 0, sizeof(KmsResponseParameters)); + + global_argc = argc; + global_argv = argv; + + #ifdef _NTSERVICE // #endif is in newmain() + DWORD lasterror = ERROR_SUCCESS; + + if (!StartServiceCtrlDispatcher(NTServiceDispatchTable) && (lasterror = GetLastError()) == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) + { + IsNTService = FALSE; + return newmain(); + } + + return lasterror; +} + + +int newmain() +{ + int error; + + // Initialize thread synchronization objects for Windows and Cygwin + #ifdef USE_THREADS + + #ifndef NO_LOG + // Initialize the Critical Section for proper logging + InitializeCriticalSection(&logmutex); + #endif // NO_LOG + + #endif // USE_THREADS + + #ifdef _WIN32 + + #ifndef USE_MSRPC + // Windows Sockets must be initialized + WSADATA wsadata; + + if ((error = WSAStartup(0x0202, &wsadata))) + { + printerrorf("Fatal: Could not initialize Windows sockets (Error: %d).\n", error); + return error; + } + #endif // USE_MSRPC + + // Windows can never daemonize + nodaemon = 1; + + #else // __CYGWIN__ + + // Do not daemonize if we are a Windows service + if (IsNTService) nodaemon = 1; + + #endif // _WIN32 / __CYGWIN__ + #endif // _NTSERVICE ( #ifdef is main(int argc, CARGV argv) ) + + parseGeneralArguments(); // Does not return if an error occurs + + #if !defined(_WIN32) && !defined(NO_SOCKETS) && !defined(USE_MSRPC) + struct stat statbuf; + fstat(STDIN_FILENO, &statbuf); + if (S_ISSOCK(statbuf.st_mode)) + { + InetdMode = 1; + nodaemon = 1; + maxsockets = 0; + #ifndef NO_LOG + logstdout = 0; + #endif // NO_LOG + } + #endif // !defined(_WIN32) && !defined(NO_SOCKETS) && !defined(USE_MSRPC) + + #ifndef NO_INI_FILE + if (fn_ini && !readIniFile(INI_FILE_PASS_1)) + { + #ifdef INI_FILE + if (strcmp(fn_ini, INI_FILE)) + #endif // INI_FILE + printerrorf("Warning: Can't read %s: %s\n", fn_ini, strerror(errno)); + } + #endif // NO_INI_FILE + + #if !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !__minix__ && !defined(USE_MSRPC) + allocateSemaphore(); + #endif // !defined(NO_LIMIT) && !defined(NO_SOCKETS) && __minix__ + + #ifdef _NTSERVICE + if (installService) + return NtServiceInstallation(installService, ServiceUser, ServicePassword); + #endif // _NTSERVICE + + #if !defined(NO_SOCKETS) && !defined(USE_MSRPC) + if (!InetdMode) + { + if ((error = setupListeningSockets())) return error; + } + #endif // NO_SOCKETS + + // After sockets have been set up, we may switch to a lower privileged user + #if !defined(_WIN32) && !defined(NO_USER_SWITCH) + + #ifndef NO_SIGHUP + if (!IsRestarted) + { + #endif // NO_SIGHUP + if (gid != INVALID_GID && setgid(gid)) + { + printerrorf("Fatal: setgid for %s failed.\n", gname); + return !0; + } + + if (uid != INVALID_UID && setuid(uid)) + { + printerrorf("Fatal: setuid for %s failed.\n", uname); + return !0; + } + #ifndef NO_SIGHUP + } + #endif // NO_SIGHUP + + #endif // !defined(_WIN32) && !defined(NO_USER_SWITCH) + + randomNumberInit(); + + // Randomization Level 1 means generate ePIDs at startup and use them during + // the lifetime of the process. So we generate them now + #ifndef NO_RANDOM_EPID + if (RandomizationLevel == 1) randomPidInit(); + #endif + + #if !defined(NO_SOCKETS) + #ifdef _WIN32 + if (!IsNTService) + #endif // _WIN32 + if ((error = daemonizeAndSetSignalAction())) return error; + #endif // !defined(NO_SOCKETS) + + writePidFile(); + + #if !defined(NO_LOG) && !defined(NO_SOCKETS) && !defined(USE_MSRPC) + if (!InetdMode) + logger("vlmcsd %s started successfully\n", Version); + #endif // !defined(NO_LOG) && !defined(NO_SOCKETS) && !defined(USE_MSRPC) + + #if defined(_NTSERVICE) && !defined(USE_MSRPC) + if (IsNTService) ReportServiceStatus(SERVICE_RUNNING, NO_ERROR, 200); + #endif // defined(_NTSERVICE) && !defined(USE_MSRPC) + + int rc; + rc = runServer(); + + // Clean up things and exit + #ifdef _NTSERVICE + if (!ServiceShutdown) + #endif + cleanup(); + #ifdef _NTSERVICE + else + ReportServiceStatus(SERVICE_STOPPED, NO_ERROR, 0); + #endif + + return rc; +} diff --git a/vlmcsd.h b/vlmcsd.h new file mode 100644 index 0000000..7845a53 --- /dev/null +++ b/vlmcsd.h @@ -0,0 +1,61 @@ +#ifndef __main_h +#define __main_h + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#define __T(x) #x +#define _T(x) __T(x) + +extern char *fn_log; + +#include "types.h" + +//int main(int argc, CARGV); +extern void cleanup(); + +#ifdef _NTSERVICE +int newmain(); +#endif + +#if MULTI_CALL_BINARY < 1 +#define server_main main +#else +int server_main(int argc, CARGV argv); +#endif + +#ifndef SA_NOCLDWAIT // required for Cygwin +#define SA_NOCLDWAIT 0 +#endif + +#ifndef NO_INI_FILE +#define INI_PARAM_RANDOMIZATION_LEVEL 1 +#define INI_PARAM_LCID 2 +#define INI_PARAM_LISTEN 3 +#define INI_PARAM_MAX_WORKERS 4 +#define INI_PARAM_CONNECTION_TIMEOUT 5 +#define INI_PARAM_PID_FILE 6 +#define INI_PARAM_LOG_FILE 7 +#define INI_PARAM_LOG_VERBOSE 8 +#define INI_PARAM_ACTIVATION_INTERVAL 9 +#define INI_PARAM_RENEWAL_INTERVAL 10 +#define INI_PARAM_DISCONNECT_IMMEDIATELY 11 +#define INI_PARAM_UID 12 +#define INI_PARAM_GID 13 +#define INI_PARAM_PORT 14 +#define INI_PARAM_RPC_NDR64 15 +#define INI_PARAM_RPC_BTFN 16 + +#define INI_FILE_PASS_1 1 +#define INI_FILE_PASS_2 2 + +typedef struct +{ + const char* const Name; + uint_fast8_t Id; +} IniFileParameter_t, *PIniFileParameter_t; +#endif // NO_INI_FILE + +#endif // __main_h diff --git a/vlmcsd.ini b/vlmcsd.ini new file mode 100644 index 0000000..7bd2b98 --- /dev/null +++ b/vlmcsd.ini @@ -0,0 +1,92 @@ +# +# +# Sample vlmcsd.ini +# +# An ini file for vlmcsd is normally not required. It is for advanced users only. +# vlmcsd uses an ini file only if specified using the -i option in the command line parameters. +# There is no default ini file because vlmcsd is designed to run on many platforms. +# +# Every line starting with a number sign (#) or semicolon (;) is treated as a comment. +# If a key word is used more than once, the last occurrence is used. The only exception +# to this is Listen. You can use Listen=[:port] more than once. +# + +# Set ePID/HwId for Windows explicitly +;55c92734-d682-4d71-983e-d6ec3f16059f = 06401-00206-271-392041-03-1033-9600.0000-3622014 / 01 02 03 04 05 06 07 08 + +# Set ePID for Office 2010 (including Visio and Project) explicitly +;59a52881-a989-479d-af46-f275c6370663 = 06401-00096-199-496023-03-1033-9600.0000-3622014 + +# Set ePID for Office 2013 (including Visio and Project) explicitly +;0ff1ce15-a989-479d-af46-f275c6370663 = 06401-00206-234-409313-03-1033-9600.0000-3622014 + +# Use custom TCP port +# Command line: -P +# ***The Port directive only works if vlmcsd was compiled to use MS RPC +# ***Use Listen otherwise +;Port = 1688 + +# Listen on all IPv4 addresses (default port 1688) +# Command line: -L (and compatibility options -4, -6, -P) +# Does not work with MS RPC, use Port= +;Listen = 0.0.0.0:1688 + +# Listen on all IPv6 addresses (default port 1688) +# Command line: -L (and compatibility options -4, -6, -P) +;Listen = [::]:1688 + +# Randomize ePIDs at program start up (only those that are not explicitly specified) +# Command line: -r +;RandomizationLevel = 1 + +# Use a specific culture (1033 = English US) in ePIDs even if the ePID is randomized +# Command line: -C +;LCID = 1033 + +# Set a maximum of 4 workers (forked processes or threads) +# Command line: -m +;MaxWorkers = 4 + +# Disconnect users after 30 seconds of inactivity +# Command line: -t +;ConnectionTimeout = 30 + +# Disconnect clients immediately after each request +# Command line: -d and -k +;DisconnectClientsImmediately = yes + +# Write a pid file (a file containing the process id of vlmcsd) +# Command line: -p +;PidFile = /var/run/vlmcsd.pid + +# Write log to /var/log/vlmcsd.log +# Command line: -l (-e and -f also override this directive) +;LogFile = /var/log/vlmcsd.log + +# Create a verbose log +# Command line: -v and -q +;LogVerbose = true + +# Set activation interval to 2 hours +# Command line: -A +;ActivationInterval = 2h + +# Set renewal interval to 7 days +# Command line: -R +;RenewalInterval = 7d + +# Run program as user vlmcsduser +# Command line: -u +;user = vlmcsduser + +# Run program as group vlmcsdgroup +# Command line: -g +;group = vlmcsdgroup + +# Disable or enable the NDR64 transfer syntax in RPC (default enabled) +# Command line: -n +;UseNDR64 = true + +# Disable or enable bind time feature negotiation in RPC (default enabled) +# Command line: -b +;UseBTFN = true diff --git a/vlmcsd.ini.5 b/vlmcsd.ini.5 new file mode 100644 index 0000000..8b35098 --- /dev/null +++ b/vlmcsd.ini.5 @@ -0,0 +1,130 @@ +.TH VLMCSD.INI 5 "February 2015" "Hotbird64" "KMS Activation Manual" +.LO 8 + +.SH NAME +\fBvlmcsd.ini\fR \- vlmcsd KMS emulator configuration file + +.SH SYNOPSIS +.B vlmcsd.ini + +.SH DESCRIPTION +\fBvlmcsd.ini\fR (or simply called the "ini file") is a configuration file for \fBvlmcsd\fR(8). By default vlmcsd does not use a configuration file. It is completely optional and for advanced users only. You must use the \fB-i\fR option on the vlmcsd command line to use an ini file. There is no default name or default location for the ini file. +.PP +Everything, that can be configured in the ini file, may also be specified on the command line. Any configuration option specified on the command line takes precedence over the respective configuration line in the ini file. +.PP +\fBBenefits of a configuration file\fR +.PP +While you can use the configuration file to simply modify the default behavior of vlmcsd, it can also be used to change the configuration of vlmcsd after you sent a HUP \fBsignal\fR(7). Whenever you send SIGHUP, the configuration file will be re-read. Any changes you made to the ini file will be reflected after vlmcsd received the hangup signal. +.PP +\fBDifferences between command line and configuration file\fR +.PP +If you specify an illegal option or option argument on the command line, vlmcsd displays help and exits. If you specify an incorrect \fIkeyword\fR or \fIargument\fR in the ini file, vlmcsd displays a warning with some information, ignores the respective line and continues. This is intentional and prevents vlmcsd from aborting after a SIGHUP if the configuration was modified incorrectly. + +.SH SYNTAX +vlmcsd.ini is a UTF-8 encoded text file with each line being in the format \fIkeyword\fR = \fIargument\fR. The \fIkeyword\fR is not case-sensitive. The \fIargument\fR is treated literally. It is neither required nor allowed to enclose the \fIargument\fR in any form of quote characters except when quote characters are part of the argument itself. Whitespace characters are ignored only + +- at the beginning of a line +.br +- between the \fIkeyword\fR and '=' +.br +- between '=' and the \fIargument\fR + +Lines, that start with '#' or ';' are treated as comments. Empty lines are ignored as well. If a \fIkeyword\fR is repeated in another line, vlmcsd will use the \fIargument\fR of the last occurence of the \fIkeyword\fR. An exception to this is the Listen \fIkeyword\fR which can be specified multiple times and causes vlmcsd to listen on more than one IP address and/or port. +.PP +Some \fIargument\fRs are binary arguments that need to be either TRUE or FALSE. You can use "Yes", "On" or "1" as an alias for TRUE and "No", "Off" or "0" as an alias for FALSE. Binary arguments are case-insensitive. + +.SH KEYWORDS +The following \fIkeyword\fRs are defined: + +.IP "\fBListen\fR" +This defines on what combinations of IP addresses and ports vlmcsd should listen. \fBListen\fR can be specified more than once. The \fIargument\fR has the form \fIipaddress\fR[:\fIport\fR]. If you omit the \fIport\fR, the default port of 1688 is used. If the \fIipaddress\fR contains colons and a \fIport\fR is used, you must enclose the \fIipaddress\fR in brackets. The default is to listen to 0.0.0.0:1688 and [::]:1688 which means listen to all IPv4 and all IPv6 addresses. See the \fB-L\fR option in \fBvlmcsd\fR(8) for more info about the syntax. If you use \fB-L\fR, \fB-P\fR, \fB-4\fR or \fB-6\fR on the command line, all \fBListen\fR keywords in the ini file will be ignored. The \fBListen\fR keyword cannot be used on Windows and Cygwin if vlmcsd has been compiled to use Microsoft RPC. + +Examples: + +Listen = 192.168.1.123:1688 +.br +Listen = 0.0.0.0:1234 +.br +Listen = [fe80::1721:12ff:fe81:d36b%eth0]:1688 + +.IP "\fBPort\fR" +Can only be used on Windows and Cygwin if vlmcsd has been compiled to use Microsoft RPC. Causes vlmcsd to listen on that port instead of 1688. On all non-Windows operating systems or if vlmcsd has been compiled to use its own RPC implementation, you must use \fBListen\fR instead. + +.IP "\fBUseNDR64\fR" +Can be TRUE or FALSE. Specifies whether you want to use the NDR64 transfer syntax. See options \fB-n0\fR and \fB-n1\fR in \fBvlmcsd\fR(8). The default is TRUE. + +.IP "\fBUseBTFN\fR" +Can be TRUE or FALSE. Specifies whether you want to use bind time feature negotiation in RPC. See options \fB-b0\fR and \fB-b1\fR in \fBvlmcsd\fR(8). The default is TRUE. + +.IP "\fBRandomizationLevel\fR" +The \fIargument\fR must 0, 1 or 2. This specifies the ePID randomization level. See options \fB-r0\fR, \fB-r1\fR and \fB-r2\fR in \fBvlmcsd\fR(8). The default randomization level is 1. + +.IP "\fBLCID\fR" +Use a specific culture id (LCID) even if the ePID is randomized. The \fIargument\fR must be a number between 1 and 32767. While any number in that range is valid, you should use an offcial LCID. A list of assigned LCIDs can be found at http://msdn.microsoft.com/en\-us/goglobal/bb964664.aspx. On the command line you control this setting with option \fB-C\fR. + +.IP "\fBMaxWorkers\fR" +The \fIargument\fR specifies the maximum number of worker processes or threads that will be used to serve activation requests concurrently. This is the same as specifying \fB-m\fR on the command line. Minimum is 1. The maximum is platform specific and is at least 32767 but is likely to be greater on most systems. The default is no limit. + +.IP "\fBConnectionTimeout\fR" +Used to control when the vlmcsd disconnects idle TPC connections. The default is 30 seconds. This is the same setting as \fB-t\fR on the command line. + +.IP "\fBDisconnectClientsImmediately\fR" +Set this to TRUE to disconnect a client after it got an activation response regardless whether a timeout has occured or not. The default is FALSE. Setting this to TRUE is non-standard behavior. Use only if you are experiencing DoS or DDoS attacks. On the command line you control this behavior with options \fB-d\fR and \fB-k\fR. + +.IP "\fBPidFile\fR" +Write a pid file. The \fIargument\fR is the full pathname of a pid file. The pid file contains is single line containing the process id of the vlmcsd process. It can be used to stop (SIGTERM) or restart (SIGHUP) vlmcsd. This directive can be overriden using \fB-p\fR on the command line. + +.IP "\fBLogFile\fR" +Write a log file. The \fIargument\fR is the full pathname of a log file. On a unixoid OS and with Cygwin you can use the special filename 'syslog' to log to the syslog facility. This is the same as specifying \fB-l\fR on the command line. + +.IP "\fBLogVerbose\fR" +Set this to either TRUE or FALSE. The default is FALSE. If set to TRUE, more details of each activation will be logged. You use \fB-v\fR and \fB-q\fR in the command line to control this setting. \fBLogVerbose\fR has an effect only if you specify a log file or redirect logging to \fBstdout\fR(3). + +.IP "\fBActivationInterval\fR" +This is the same as specifying \fB-A\fR on the command line. See \fBvlmcsd\fR(8) for details. The default is 2 hours. Example: ActivationInterval = 1h + +.IP "\fBRenewalInterval\fR" +This is the same as specifying \fB-R\fR on the command line. See \fBvlmcsd\fR(8) for details. The default is 7 days. Example: ActivationInterval = 3h. Please note that the KMS client decides itself when to renew activation. Even though vlmcsd sends the renewal interval you specify, it is no more than some kind of recommendation to the client. Older KMS clients did follow the recommendation from a KMS server or emulator. Newer clients do not. + +.IP "\fBUser\fR" +Run vlmcsd as another, preferrably less privileged, user. The \fIargument\fR can be a user name or a numeric user id. You must have the required privileges (capabilities on Linux) to change the security context of a process without providing any credentials (a password in most cases). On most unixoid OSses 'root' is the only user who has these privileges in the default configuration. This setting is not available in the native Windows version of vlmcsd. See \fB-u\fR in \fBvlmcsd\fR(8). This setting cannot be changed on the fly by sending SIGHUP to vlmcsd. + +.IP "\fBGroup\fR" +Run vlmcsd as another, preferrably less privileged, group. The \fIargument\fR can be a group name or a numeric group id. You must have the required privileges (capabilities on Linux) to change the security context of a process without providing any credentials (a password in most cases). On most unixoid OSses 'root' is the only user who has these privileges in the default configuration. This setting is not available in the native Windows version of vlmcsd. See \fB-g\fR in \fBvlmcsd\fR(8). This setting cannot be changed on the fly by sending SIGHUP to vlmcsd. + +.SH "SPECIAL KEYWORDS" +Any valid GUID is being treated as a special \fBkeyword\fR in the ini file. It is used to select a specfic ePID and HwId for an application GUID. The \fIargument\fR has the form \fIePID\fR [ / \fIHwId\fR ]. KMS currently knows only 3 application GUIDs: + +55c92734\-d682\-4d71\-983e\-d6ec3f16059f\ (Windows) +.br +59a52881\-a989\-479d\-af46\-f275c6370663\ (Office 2010) +.br +0ff1ce15\-a989\-479d\-af46\-f275c6370663\ (Office 2013) + +To use specific ePIDs for Windows, Office 2010 and Office 2013 you could add the following lines to vlmcsd.ini: + +.SM "55c92734\-d682\-4d71\-983e\-d6ec3f16059f\ =\ 55041\-00206\-184\-207146\-03\-1062\-6002.0000\-3322013" +.br +.SM "59a52881\-a989\-479d\-af46\-f275c6370663\ =\ 55041\-00096\-216\-598637\-03\-17418\-6002.0000\-3312013" +.br +.SM "0ff1ce15\-a989\-479d\-af46\-f275c6370663\ =\ 55041\-00206-234\-742099\-03\-9217\-6002.0000\-2942013" + +The ePID is currently a comment only. You can specify any string up to 63 bytes. In Windows 7 Microsoft has blacklisted few ( < 10 ) ePIDs that were used in KMSv5 versions of the "ratiborus virtual machine". Microsoft has given up on blacklisting when KMS emulators appeared in the wild. + +Even if you can use "Activated by cool hacker guys" as an ePID, you may wish to use ePIDs that cannot be detected as non-MS ePIDs. If you don't know how these "valid" ePIDs look like exactly, do not use GUIDS in vlmcsd.ini. vlmcsd provides internal mechanisms to generate valid ePIDs. + +If you use non-ASCII characters in your ePID (you shouldn't do anyway), these must be in UTF-8 format. This is especially important when you run vlmcsd on Windows or cygwin because UTF-8 is not the default encoding for most editors. + +If you are specifying an optional HWID it follows the same syntax as in the \fB\-H\fR option in \fBvlmcsd\fR(8) ecxept that you must not enclose a HWID in quotes even if it contains spaces. + +.SH FILES +.IP "\fBvlmcsd.ini\fR(5)" + +.SH AUTHOR +\fBvlmcsd\fR(8) was written by crony12, Hotbird64 and vityan666. With contributions from DougQaid. + +.SH CREDITS +Thanks to CODYQX4, deagles, eIcn, mikmik38, nosferati87, qad, Ratiborus, ... + +.SH SEE ALSO +\fBvlmcsd\fR(8), \fBvlmcsd\fR(7), \fBvlmcs\fR(1), \fBvlmcsdmulti\fR(1) diff --git a/vlmcsd.ini.5.dos.txt b/vlmcsd.ini.5.dos.txt new file mode 100644 index 0000000..e763742 --- /dev/null +++ b/vlmcsd.ini.5.dos.txt @@ -0,0 +1,268 @@ +VLMCSD.INI(5) KMS Activation Manual VLMCSD.INI(5) + + + +NAME + vlmcsd.ini - vlmcsd KMS emulator configuration file + + +SYNOPSIS + vlmcsd.ini + + +DESCRIPTION + vlmcsd.ini (or simply called the "ini file") is a configuration file + for vlmcsd(8). By default vlmcsd does not use a configuration file. It + is completely optional and for advanced users only. You must use the -i + option on the vlmcsd command line to use an ini file. There is no + default name or default location for the ini file. + + Everything, that can be configured in the ini file, may also be speci‐ + fied on the command line. Any configuration option specified on the + command line takes precedence over the respective configuration line in + the ini file. + + Benefits of a configuration file + + While you can use the configuration file to simply modify the default + behavior of vlmcsd, it can also be used to change the configuration of + vlmcsd after you sent a HUP signal(7). Whenever you send SIGHUP, the + configuration file will be re-read. Any changes you made to the ini + file will be reflected after vlmcsd received the hangup signal. + + Differences between command line and configuration file + + If you specify an illegal option or option argument on the command + line, vlmcsd displays help and exits. If you specify an incorrect key‐ + word or argument in the ini file, vlmcsd displays a warning with some + information, ignores the respective line and continues. This is inten‐ + tional and prevents vlmcsd from aborting after a SIGHUP if the configu‐ + ration was modified incorrectly. + + +SYNTAX + vlmcsd.ini is a UTF-8 encoded text file with each line being in the + format keyword = argument. The keyword is not case-sensitive. The argu‐ + ment is treated literally. It is neither required nor allowed to + enclose the argument in any form of quote characters except when quote + characters are part of the argument itself. Whitespace characters are + ignored only + + - at the beginning of a line + - between the keyword and '=' + - between '=' and the argument + + Lines, that start with '#' or ';' are treated as comments. Empty lines + are ignored as well. If a keyword is repeated in another line, vlmcsd + will use the argument of the last occurence of the keyword. An excep‐ + tion to this is the Listen keyword which can be specified multiple + times and causes vlmcsd to listen on more than one IP address and/or + port. + + Some arguments are binary arguments that need to be either TRUE or + FALSE. You can use "Yes", "On" or "1" as an alias for TRUE and "No", + "Off" or "0" as an alias for FALSE. Binary arguments are case-insensi‐ + tive. + + +KEYWORDS + The following keywords are defined: + + + Listen This defines on what combinations of IP addresses and ports vlm‐ + csd should listen. Listen can be specified more than once. The + argument has the form ipaddress[:port]. If you omit the port, + the default port of 1688 is used. If the ipaddress contains + colons and a port is used, you must enclose the ipaddress in + brackets. The default is to listen to 0.0.0.0:1688 and [::]:1688 + which means listen to all IPv4 and all IPv6 addresses. See the + -L option in vlmcsd(8) for more info about the syntax. If you + use -L, -P, -4 or -6 on the command line, all Listen keywords in + the ini file will be ignored. The Listen keyword cannot be used + on Windows and Cygwin if vlmcsd has been compiled to use Micro‐ + soft RPC. + + Examples: + + Listen = 192.168.1.123:1688 + Listen = 0.0.0.0:1234 + Listen = [fe80::1721:12ff:fe81:d36b%eth0]:1688 + + + Port Can only be used on Windows and Cygwin if vlmcsd has been com‐ + piled to use Microsoft RPC. Causes vlmcsd to listen on that port + instead of 1688. On all non-Windows operating systems or if vlm‐ + csd has been compiled to use its own RPC implementation, you + must use Listen instead. + + + UseNDR64 + Can be TRUE or FALSE. Specifies whether you want to use the + NDR64 transfer syntax. See options -n0 and -n1 in vlmcsd(8). The + default is TRUE. + + + UseBTFN + Can be TRUE or FALSE. Specifies whether you want to use bind + time feature negotiation in RPC. See options -b0 and -b1 in vlm‐ + csd(8). The default is TRUE. + + + RandomizationLevel + The argument must 0, 1 or 2. This specifies the ePID randomiza‐ + tion level. See options -r0, -r1 and -r2 in vlmcsd(8). The + default randomization level is 1. + + + LCID Use a specific culture id (LCID) even if the ePID is randomized. + The argument must be a number between 1 and 32767. While any + number in that range is valid, you should use an offcial LCID. A + list of assigned LCIDs can be found at http://msdn.micro‐ + soft.com/en-us/goglobal/bb964664.aspx. On the command line you + control this setting with option -C. + + + MaxWorkers + The argument specifies the maximum number of worker processes or + threads that will be used to serve activation requests concur‐ + rently. This is the same as specifying -m on the command line. + Minimum is 1. The maximum is platform specific and is at least + 32767 but is likely to be greater on most systems. The default + is no limit. + + + ConnectionTimeout + Used to control when the vlmcsd disconnects idle TPC connec‐ + tions. The default is 30 seconds. This is the same setting as -t + on the command line. + + + DisconnectClientsImmediately + Set this to TRUE to disconnect a client after it got an activa‐ + tion response regardless whether a timeout has occured or not. + The default is FALSE. Setting this to TRUE is non-standard + behavior. Use only if you are experiencing DoS or DDoS attacks. + On the command line you control this behavior with options -d + and -k. + + + PidFile + Write a pid file. The argument is the full pathname of a pid + file. The pid file contains is single line containing the + process id of the vlmcsd process. It can be used to stop + (SIGTERM) or restart (SIGHUP) vlmcsd. This directive can be + overriden using -p on the command line. + + + LogFile + Write a log file. The argument is the full pathname of a log + file. On a unixoid OS and with Cygwin you can use the special + filename 'syslog' to log to the syslog facility. This is the + same as specifying -l on the command line. + + + LogVerbose + Set this to either TRUE or FALSE. The default is FALSE. If set + to TRUE, more details of each activation will be logged. You use + -v and -q in the command line to control this setting. LogVer‐ + bose has an effect only if you specify a log file or redirect + logging to stdout(3). + + + ActivationInterval + This is the same as specifying -A on the command line. See vlm‐ + csd(8) for details. The default is 2 hours. Example: Activation‐ + Interval = 1h + + + RenewalInterval + This is the same as specifying -R on the command line. See vlm‐ + csd(8) for details. The default is 7 days. Example: Activation‐ + Interval = 3h. Please note that the KMS client decides itself + when to renew activation. Even though vlmcsd sends the renewal + interval you specify, it is no more than some kind of recommen‐ + dation to the client. Older KMS clients did follow the recommen‐ + dation from a KMS server or emulator. Newer clients do not. + + + User Run vlmcsd as another, preferrably less privileged, user. The + argument can be a user name or a numeric user id. You must have + the required privileges (capabilities on Linux) to change the + security context of a process without providing any credentials + (a password in most cases). On most unixoid OSses 'root' is the + only user who has these privileges in the default configuration. + This setting is not available in the native Windows version of + vlmcsd. See -u in vlmcsd(8). This setting cannot be changed on + the fly by sending SIGHUP to vlmcsd. + + + Group Run vlmcsd as another, preferrably less privileged, group. The + argument can be a group name or a numeric group id. You must + have the required privileges (capabilities on Linux) to change + the security context of a process without providing any creden‐ + tials (a password in most cases). On most unixoid OSses 'root' + is the only user who has these privileges in the default config‐ + uration. This setting is not available in the native Windows + version of vlmcsd. See -g in vlmcsd(8). This setting cannot be + changed on the fly by sending SIGHUP to vlmcsd. + + +SPECIAL KEYWORDS + Any valid GUID is being treated as a special keyword in the ini file. + It is used to select a specfic ePID and HwId for an application GUID. + The argument has the form ePID [ / HwId ]. KMS currently knows only 3 + application GUIDs: + + 55c92734-d682-4d71-983e-d6ec3f16059f (Windows) + 59a52881-a989-479d-af46-f275c6370663 (Office 2010) + 0ff1ce15-a989-479d-af46-f275c6370663 (Office 2013) + + To use specific ePIDs for Windows, Office 2010 and Office 2013 you + could add the following lines to vlmcsd.ini: + + 55c92734-d682-4d71-983e-d6ec3f16059f = 55041-00206-184-207146-03-1062-6002.0000-3322013 + 59a52881-a989-479d-af46-f275c6370663 = 55041-00096-216-598637-03-17418-6002.0000-3312013 + 0ff1ce15-a989-479d-af46-f275c6370663 = 55041-00206-234-742099-03-9217-6002.0000-2942013 + + The ePID is currently a comment only. You can specify any string up to + 63 bytes. In Windows 7 Microsoft has blacklisted few ( < 10 ) ePIDs + that were used in KMSv5 versions of the "ratiborus virtual machine". + Microsoft has given up on blacklisting when KMS emulators appeared in + the wild. + + Even if you can use "Activated by cool hacker guys" as an ePID, you may + wish to use ePIDs that cannot be detected as non-MS ePIDs. If you don't + know how these "valid" ePIDs look like exactly, do not use GUIDS in + vlmcsd.ini. vlmcsd provides internal mechanisms to generate valid + ePIDs. + + If you use non-ASCII characters in your ePID (you shouldn't do anyway), + these must be in UTF-8 format. This is especially important when you + run vlmcsd on Windows or cygwin because UTF-8 is not the default encod‐ + ing for most editors. + + If you are specifying an optional HWID it follows the same syntax as in + the -H option in vlmcsd(8) ecxept that you must not enclose a HWID in + quotes even if it contains spaces. + + +FILES + vlmcsd.ini(5) + + +AUTHOR + vlmcsd(8) was written by crony12, Hotbird64 and vityan666. With contri‐ + butions from DougQaid. + + +CREDITS + Thanks to CODYQX4, deagles, eIcn, mikmik38, nosferati87, qad, Rati‐ + borus, ... + + +SEE ALSO + vlmcsd(8), vlmcsd(7), vlmcs(1), vlmcsdmulti(1) + + + +Hotbird64 February 2015 VLMCSD.INI(5) diff --git a/vlmcsd.ini.5.html b/vlmcsd.ini.5.html new file mode 100644 index 0000000..827351a --- /dev/null +++ b/vlmcsd.ini.5.html @@ -0,0 +1,460 @@ + + + + + + + + + +VLMCSD.INI + + + + +

VLMCSD.INI

+ +NAME
+SYNOPSIS
+DESCRIPTION
+SYNTAX
+KEYWORDS
+SPECIAL KEYWORDS
+FILES
+AUTHOR
+CREDITS
+SEE ALSO
+ +
+ + +

NAME + +

+ + + +

vlmcsd.ini +− vlmcsd KMS emulator configuration file

+ +

SYNOPSIS + +

+ + + +

vlmcsd.ini

+ +

DESCRIPTION + +

+ + + +

vlmcsd.ini +(or simply called the "ini file") is a +configuration file for vlmcsd(8). By default vlmcsd +does not use a configuration file. It is completely optional +and for advanced users only. You must use the -i +option on the vlmcsd command line to use an ini file. There +is no default name or default location for the ini file.

+ +

Everything, +that can be configured in the ini file, may also be +specified on the command line. Any configuration option +specified on the command line takes precedence over the +respective configuration line in the ini file.

+ +

Benefits of +a configuration file

+ +

While you can +use the configuration file to simply modify the default +behavior of vlmcsd, it can also be used to change the +configuration of vlmcsd after you sent a HUP +signal(7). Whenever you send SIGHUP, the +configuration file will be re-read. Any changes you made to +the ini file will be reflected after vlmcsd received the +hangup signal.

+ +

Differences +between command line and configuration file

+ +

If you specify +an illegal option or option argument on the command line, +vlmcsd displays help and exits. If you specify an incorrect +keyword or argument in the ini file, vlmcsd +displays a warning with some information, ignores the +respective line and continues. This is intentional and +prevents vlmcsd from aborting after a SIGHUP if the +configuration was modified incorrectly.

+ +

SYNTAX + +

+ + +

vlmcsd.ini is a +UTF-8 encoded text file with each line being in the format +keyword = argument. The keyword is not +case-sensitive. The argument is treated literally. It +is neither required nor allowed to enclose the +argument in any form of quote characters except when +quote characters are part of the argument itself. Whitespace +characters are ignored only

+ +

- at the +beginning of a line
+- between the keyword and ’=’
+- between ’=’ and the argument

+ +

Lines, that +start with ’#’ or ’;’ are treated as +comments. Empty lines are ignored as well. If a +keyword is repeated in another line, vlmcsd will use +the argument of the last occurence of the +keyword. An exception to this is the Listen +keyword which can be specified multiple times and +causes vlmcsd to listen on more than one IP address and/or +port.

+ +

Some +arguments are binary arguments that need to be either +TRUE or FALSE. You can use "Yes", "On" +or "1" as an alias for TRUE and "No", +"Off" or "0" as an alias for FALSE. +Binary arguments are case-insensitive.

+ +

KEYWORDS + +

+ + +

The following +keywords are defined:

+ + + + + + + +
+ + +

Listen

+ + +

This defines on what combinations of IP addresses and +ports vlmcsd should listen. Listen can be specified +more than once. The argument has the form +ipaddress[:port]. If you omit the port, +the default port of 1688 is used. If the ipaddress +contains colons and a port is used, you must enclose +the ipaddress in brackets. The default is to listen +to 0.0.0.0:1688 and [::]:1688 which means listen to all IPv4 +and all IPv6 addresses. See the -L option in +vlmcsd(8) for more info about the syntax. If you use +-L, -P, -4 or -6 on the command +line, all Listen keywords in the ini file will be +ignored. The Listen keyword cannot be used on Windows +and Cygwin if vlmcsd has been compiled to use Microsoft +RPC.

+ +

Examples:

+ +

Listen = +192.168.1.123:1688
+Listen = 0.0.0.0:1234
+Listen = [fe80::1721:12ff:fe81:d36b%eth0]:1688

+ + + + + + + +
+ + +

Port

+ + +

Can only be used on Windows and +Cygwin if vlmcsd has been compiled to use Microsoft RPC. +Causes vlmcsd to listen on that port instead of 1688. On all +non-Windows operating systems or if vlmcsd has been compiled +to use its own RPC implementation, you must use +Listen instead.

+ +

UseNDR64

+ +

Can be TRUE or FALSE. Specifies +whether you want to use the NDR64 transfer syntax. See +options -n0 and -n1 in vlmcsd(8). The +default is TRUE.

+ +

UseBTFN

+ +

Can be TRUE or FALSE. Specifies +whether you want to use bind time feature negotiation in +RPC. See options -b0 and -b1 in +vlmcsd(8). The default is TRUE.

+ +

RandomizationLevel

+ +

The argument must 0, 1 +or 2. This specifies the ePID randomization level. See +options -r0, -r1 and -r2 in +vlmcsd(8). The default randomization level is 1.

+ + + + + + + +
+ + +

LCID

+ + +

Use a specific culture id (LCID) even if the ePID is +randomized. The argument must be a number between 1 +and 32767. While any number in that range is valid, you +should use an offcial LCID. A list of assigned LCIDs can be +found at +http://msdn.microsoft.com/en−us/goglobal/bb964664.aspx. +On the command line you control this setting with option +-C.

+ +

MaxWorkers

+ +

The argument specifies +the maximum number of worker processes or threads that will +be used to serve activation requests concurrently. This is +the same as specifying -m on the command line. +Minimum is 1. The maximum is platform specific and is at +least 32767 but is likely to be greater on most systems. The +default is no limit.

+ +

ConnectionTimeout

+ +

Used to control when the vlmcsd +disconnects idle TPC connections. The default is 30 seconds. +This is the same setting as -t on the command +line.

+ + +

DisconnectClientsImmediately

+ +

Set this to TRUE to disconnect +a client after it got an activation response regardless +whether a timeout has occured or not. The default is FALSE. +Setting this to TRUE is non-standard behavior. Use only if +you are experiencing DoS or DDoS attacks. On the command +line you control this behavior with options -d and +-k.

+ +

PidFile

+ +

Write a pid file. The +argument is the full pathname of a pid file. The pid +file contains is single line containing the process id of +the vlmcsd process. It can be used to stop (SIGTERM) or +restart (SIGHUP) vlmcsd. This directive can be overriden +using -p on the command line.

+ +

LogFile

+ +

Write a log file. The +argument is the full pathname of a log file. On a +unixoid OS and with Cygwin you can use the special filename +’syslog’ to log to the syslog facility. This is +the same as specifying -l on the command line.

+ +

LogVerbose

+ +

Set this to either TRUE or +FALSE. The default is FALSE. If set to TRUE, more details of +each activation will be logged. You use -v and +-q in the command line to control this setting. +LogVerbose has an effect only if you specify a log +file or redirect logging to stdout(3).

+ +

ActivationInterval

+ +

This is the same as specifying +-A on the command line. See vlmcsd(8) for +details. The default is 2 hours. Example: ActivationInterval += 1h

+ +

RenewalInterval

+ +

This is the same as specifying +-R on the command line. See vlmcsd(8) for +details. The default is 7 days. Example: ActivationInterval += 3h. Please note that the KMS client decides itself when to +renew activation. Even though vlmcsd sends the renewal +interval you specify, it is no more than some kind of +recommendation to the client. Older KMS clients did follow +the recommendation from a KMS server or emulator. Newer +clients do not.

+ + + + + + + + + + + + +
+ + +

User

+ + +

Run vlmcsd as another, preferrably less privileged, +user. The argument can be a user name or a numeric +user id. You must have the required privileges (capabilities +on Linux) to change the security context of a process +without providing any credentials (a password in most +cases). On most unixoid OSses ’root’ is the only +user who has these privileges in the default configuration. +This setting is not available in the native Windows version +of vlmcsd. See -u in vlmcsd(8). This setting +cannot be changed on the fly by sending SIGHUP to +vlmcsd.

+ + +

Group

+ + +

Run vlmcsd as another, preferrably less privileged, +group. The argument can be a group name or a numeric +group id. You must have the required privileges +(capabilities on Linux) to change the security context of a +process without providing any credentials (a password in +most cases). On most unixoid OSses ’root’ is the +only user who has these privileges in the default +configuration. This setting is not available in the native +Windows version of vlmcsd. See -g in +vlmcsd(8). This setting cannot be changed on the fly +by sending SIGHUP to vlmcsd.

+ +

SPECIAL KEYWORDS + +

+ + +

Any valid GUID +is being treated as a special keyword in the ini +file. It is used to select a specfic ePID and HwId for an +application GUID. The argument has the form +ePID [ / HwId ]. KMS currently knows only 3 +application GUIDs:

+ + +

55c92734−d682−4d71−983e−d6ec3f16059f (Windows) +
+ +59a52881−a989−479d−af46−f275c6370663 (Office +2010)
+ +0ff1ce15−a989−479d−af46−f275c6370663 (Office +2013)

+ +

To use specific +ePIDs for Windows, Office 2010 and Office 2013 you could add +the following lines to vlmcsd.ini:

+ + +

55c92734−d682−4d71−983e−d6ec3f16059f = 55041−00206−184−207146−03−1062−6002.0000−3322013 +
+ +59a52881−a989−479d−af46−f275c6370663 = 55041−00096−216−598637−03−17418−6002.0000−3312013 +
+ +0ff1ce15−a989−479d−af46−f275c6370663 = 55041−00206-234−742099−03−9217−6002.0000−2942013

+ +

The ePID is +currently a comment only. You can specify any string up to +63 bytes. In Windows 7 Microsoft has blacklisted few ( < +10 ) ePIDs that were used in KMSv5 versions of the +"ratiborus virtual machine". Microsoft has given +up on blacklisting when KMS emulators appeared in the +wild.

+ +

Even if you can +use "Activated by cool hacker guys" as an ePID, +you may wish to use ePIDs that cannot be detected as non-MS +ePIDs. If you don’t know how these "valid" +ePIDs look like exactly, do not use GUIDS in vlmcsd.ini. +vlmcsd provides internal mechanisms to generate valid +ePIDs.

+ +

If you use +non-ASCII characters in your ePID (you shouldn’t do +anyway), these must be in UTF-8 format. This is especially +important when you run vlmcsd on Windows or cygwin because +UTF-8 is not the default encoding for most editors.

+ +

If you are +specifying an optional HWID it follows the same syntax as in +the −H option in vlmcsd(8) ecxept that +you must not enclose a HWID in quotes even if it contains +spaces.

+ +

FILES + +

+ + + +

vlmcsd.ini(5)

+ +

AUTHOR + +

+ + + +

vlmcsd(8) +was written by crony12, Hotbird64 and vityan666. With +contributions from DougQaid.

+ +

CREDITS + +

+ + +

Thanks to +CODYQX4, deagles, eIcn, mikmik38, nosferati87, qad, +Ratiborus, ...

+ +

SEE ALSO + +

+ + + +

vlmcsd(8), +vlmcsd(7), vlmcs(1), vlmcsdmulti(1)

+
+ + diff --git a/vlmcsd.ini.5.pdf b/vlmcsd.ini.5.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dc78cfb02187125f69ad36e8fb66d0489f9dbb82 GIT binary patch literal 19037 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%0D;K}qf>*JGw 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 literal 0 HcmV?d00001 diff --git a/vlmcsd.ini.5.unix.txt b/vlmcsd.ini.5.unix.txt new file mode 100644 index 0000000..25fe161 --- /dev/null +++ b/vlmcsd.ini.5.unix.txt @@ -0,0 +1,268 @@ +VLMCSD.INI(5) KMS Activation Manual VLMCSD.INI(5) + + + +NAME + vlmcsd.ini - vlmcsd KMS emulator configuration file + + +SYNOPSIS + vlmcsd.ini + + +DESCRIPTION + vlmcsd.ini (or simply called the "ini file") is a configuration file + for vlmcsd(8). By default vlmcsd does not use a configuration file. It + is completely optional and for advanced users only. You must use the -i + option on the vlmcsd command line to use an ini file. There is no + default name or default location for the ini file. + + Everything, that can be configured in the ini file, may also be speci‐ + fied on the command line. Any configuration option specified on the + command line takes precedence over the respective configuration line in + the ini file. + + Benefits of a configuration file + + While you can use the configuration file to simply modify the default + behavior of vlmcsd, it can also be used to change the configuration of + vlmcsd after you sent a HUP signal(7). Whenever you send SIGHUP, the + configuration file will be re-read. Any changes you made to the ini + file will be reflected after vlmcsd received the hangup signal. + + Differences between command line and configuration file + + If you specify an illegal option or option argument on the command + line, vlmcsd displays help and exits. If you specify an incorrect key‐ + word or argument in the ini file, vlmcsd displays a warning with some + information, ignores the respective line and continues. This is inten‐ + tional and prevents vlmcsd from aborting after a SIGHUP if the configu‐ + ration was modified incorrectly. + + +SYNTAX + vlmcsd.ini is a UTF-8 encoded text file with each line being in the + format keyword = argument. The keyword is not case-sensitive. The argu‐ + ment is treated literally. It is neither required nor allowed to + enclose the argument in any form of quote characters except when quote + characters are part of the argument itself. Whitespace characters are + ignored only + + - at the beginning of a line + - between the keyword and '=' + - between '=' and the argument + + Lines, that start with '#' or ';' are treated as comments. Empty lines + are ignored as well. If a keyword is repeated in another line, vlmcsd + will use the argument of the last occurence of the keyword. An excep‐ + tion to this is the Listen keyword which can be specified multiple + times and causes vlmcsd to listen on more than one IP address and/or + port. + + Some arguments are binary arguments that need to be either TRUE or + FALSE. You can use "Yes", "On" or "1" as an alias for TRUE and "No", + "Off" or "0" as an alias for FALSE. Binary arguments are case-insensi‐ + tive. + + +KEYWORDS + The following keywords are defined: + + + Listen This defines on what combinations of IP addresses and ports vlm‐ + csd should listen. Listen can be specified more than once. The + argument has the form ipaddress[:port]. If you omit the port, + the default port of 1688 is used. If the ipaddress contains + colons and a port is used, you must enclose the ipaddress in + brackets. The default is to listen to 0.0.0.0:1688 and [::]:1688 + which means listen to all IPv4 and all IPv6 addresses. See the + -L option in vlmcsd(8) for more info about the syntax. If you + use -L, -P, -4 or -6 on the command line, all Listen keywords in + the ini file will be ignored. The Listen keyword cannot be used + on Windows and Cygwin if vlmcsd has been compiled to use Micro‐ + soft RPC. + + Examples: + + Listen = 192.168.1.123:1688 + Listen = 0.0.0.0:1234 + Listen = [fe80::1721:12ff:fe81:d36b%eth0]:1688 + + + Port Can only be used on Windows and Cygwin if vlmcsd has been com‐ + piled to use Microsoft RPC. Causes vlmcsd to listen on that port + instead of 1688. On all non-Windows operating systems or if vlm‐ + csd has been compiled to use its own RPC implementation, you + must use Listen instead. + + + UseNDR64 + Can be TRUE or FALSE. Specifies whether you want to use the + NDR64 transfer syntax. See options -n0 and -n1 in vlmcsd(8). The + default is TRUE. + + + UseBTFN + Can be TRUE or FALSE. Specifies whether you want to use bind + time feature negotiation in RPC. See options -b0 and -b1 in vlm‐ + csd(8). The default is TRUE. + + + RandomizationLevel + The argument must 0, 1 or 2. This specifies the ePID randomiza‐ + tion level. See options -r0, -r1 and -r2 in vlmcsd(8). The + default randomization level is 1. + + + LCID Use a specific culture id (LCID) even if the ePID is randomized. + The argument must be a number between 1 and 32767. While any + number in that range is valid, you should use an offcial LCID. A + list of assigned LCIDs can be found at http://msdn.micro‐ + soft.com/en-us/goglobal/bb964664.aspx. On the command line you + control this setting with option -C. + + + MaxWorkers + The argument specifies the maximum number of worker processes or + threads that will be used to serve activation requests concur‐ + rently. This is the same as specifying -m on the command line. + Minimum is 1. The maximum is platform specific and is at least + 32767 but is likely to be greater on most systems. The default + is no limit. + + + ConnectionTimeout + Used to control when the vlmcsd disconnects idle TPC connec‐ + tions. The default is 30 seconds. This is the same setting as -t + on the command line. + + + DisconnectClientsImmediately + Set this to TRUE to disconnect a client after it got an activa‐ + tion response regardless whether a timeout has occured or not. + The default is FALSE. Setting this to TRUE is non-standard + behavior. Use only if you are experiencing DoS or DDoS attacks. + On the command line you control this behavior with options -d + and -k. + + + PidFile + Write a pid file. The argument is the full pathname of a pid + file. The pid file contains is single line containing the + process id of the vlmcsd process. It can be used to stop + (SIGTERM) or restart (SIGHUP) vlmcsd. This directive can be + overriden using -p on the command line. + + + LogFile + Write a log file. The argument is the full pathname of a log + file. On a unixoid OS and with Cygwin you can use the special + filename 'syslog' to log to the syslog facility. This is the + same as specifying -l on the command line. + + + LogVerbose + Set this to either TRUE or FALSE. The default is FALSE. If set + to TRUE, more details of each activation will be logged. You use + -v and -q in the command line to control this setting. LogVer‐ + bose has an effect only if you specify a log file or redirect + logging to stdout(3). + + + ActivationInterval + This is the same as specifying -A on the command line. See vlm‐ + csd(8) for details. The default is 2 hours. Example: Activation‐ + Interval = 1h + + + RenewalInterval + This is the same as specifying -R on the command line. See vlm‐ + csd(8) for details. The default is 7 days. Example: Activation‐ + Interval = 3h. Please note that the KMS client decides itself + when to renew activation. Even though vlmcsd sends the renewal + interval you specify, it is no more than some kind of recommen‐ + dation to the client. Older KMS clients did follow the recommen‐ + dation from a KMS server or emulator. Newer clients do not. + + + User Run vlmcsd as another, preferrably less privileged, user. The + argument can be a user name or a numeric user id. You must have + the required privileges (capabilities on Linux) to change the + security context of a process without providing any credentials + (a password in most cases). On most unixoid OSses 'root' is the + only user who has these privileges in the default configuration. + This setting is not available in the native Windows version of + vlmcsd. See -u in vlmcsd(8). This setting cannot be changed on + the fly by sending SIGHUP to vlmcsd. + + + Group Run vlmcsd as another, preferrably less privileged, group. The + argument can be a group name or a numeric group id. You must + have the required privileges (capabilities on Linux) to change + the security context of a process without providing any creden‐ + tials (a password in most cases). On most unixoid OSses 'root' + is the only user who has these privileges in the default config‐ + uration. This setting is not available in the native Windows + version of vlmcsd. See -g in vlmcsd(8). This setting cannot be + changed on the fly by sending SIGHUP to vlmcsd. + + +SPECIAL KEYWORDS + Any valid GUID is being treated as a special keyword in the ini file. + It is used to select a specfic ePID and HwId for an application GUID. + The argument has the form ePID [ / HwId ]. KMS currently knows only 3 + application GUIDs: + + 55c92734-d682-4d71-983e-d6ec3f16059f (Windows) + 59a52881-a989-479d-af46-f275c6370663 (Office 2010) + 0ff1ce15-a989-479d-af46-f275c6370663 (Office 2013) + + To use specific ePIDs for Windows, Office 2010 and Office 2013 you + could add the following lines to vlmcsd.ini: + + 55c92734-d682-4d71-983e-d6ec3f16059f = 55041-00206-184-207146-03-1062-6002.0000-3322013 + 59a52881-a989-479d-af46-f275c6370663 = 55041-00096-216-598637-03-17418-6002.0000-3312013 + 0ff1ce15-a989-479d-af46-f275c6370663 = 55041-00206-234-742099-03-9217-6002.0000-2942013 + + The ePID is currently a comment only. You can specify any string up to + 63 bytes. In Windows 7 Microsoft has blacklisted few ( < 10 ) ePIDs + that were used in KMSv5 versions of the "ratiborus virtual machine". + Microsoft has given up on blacklisting when KMS emulators appeared in + the wild. + + Even if you can use "Activated by cool hacker guys" as an ePID, you may + wish to use ePIDs that cannot be detected as non-MS ePIDs. If you don't + know how these "valid" ePIDs look like exactly, do not use GUIDS in + vlmcsd.ini. vlmcsd provides internal mechanisms to generate valid + ePIDs. + + If you use non-ASCII characters in your ePID (you shouldn't do anyway), + these must be in UTF-8 format. This is especially important when you + run vlmcsd on Windows or cygwin because UTF-8 is not the default encod‐ + ing for most editors. + + If you are specifying an optional HWID it follows the same syntax as in + the -H option in vlmcsd(8) ecxept that you must not enclose a HWID in + quotes even if it contains spaces. + + +FILES + vlmcsd.ini(5) + + +AUTHOR + vlmcsd(8) was written by crony12, Hotbird64 and vityan666. With contri‐ + butions from DougQaid. + + +CREDITS + Thanks to CODYQX4, deagles, eIcn, mikmik38, nosferati87, qad, Rati‐ + borus, ... + + +SEE ALSO + vlmcsd(8), vlmcsd(7), vlmcs(1), vlmcsdmulti(1) + + + +Hotbird64 February 2015 VLMCSD.INI(5) diff --git a/vlmcsd_all.c b/vlmcsd_all.c new file mode 100644 index 0000000..8440b6a --- /dev/null +++ b/vlmcsd_all.c @@ -0,0 +1,6009 @@ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#if defined(USE_MSRPC) && !defined(_WIN32) && !defined(__CYGWIN__) +#error Microsoft RPC is only available on Windows and Cygwin +#endif + +#if defined(NO_SOCKETS) && defined(USE_MSRPC) +#error Cannot use inetd mode with Microsoft RPC +#endif + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include +#include +#include +#include +#include + +#ifndef _WIN32 +#include +#include +#include + +#if !defined(NO_LIMIT) && !__minix__ +#include +#if !__ANDROID__ +#include +#else // __ANDROID__ +#include +#endif // __ANDROID__ +#endif // !defined(NO_LIMIT) && !__minix__ + +#include +#include +#include +#include +#include +#endif // !_WIN32 + +#if __APPLE__ +#include +#endif // __APPLE__ + +#if __linux__ && defined(USE_AUXV) +#include +#endif + +#if __FreeBSD__ +#include +#endif + +#include "vlmcsd.h" +#include "endian.h" +#include "shared_globals.h" +#include "output.h" +#ifndef USE_MSRPC +#include "network.h" +#else // USE_MSRPC +#include "msrpc-server.h" +#endif // USE_MSRPC +#include "ntservice.h" +#include "helpers.h" + + +static const char* const optstring = "N:B:m:t:w:0:3:H:A:R:u:g:L:p:i:P:l:r:U:W:C:SsfeDd46VvIdqkZ"; + +#if !defined(NO_SOCKETS) +#if !defined(USE_MSRPC) +static uint_fast8_t maxsockets = 0; +static int_fast8_t haveIPv6Stack = 0; +static int_fast8_t haveIPv4Stack = 0; +static int_fast8_t v6required = 0; +static int_fast8_t v4required = 0; +#endif // !defined(USE_MSRPC) +#endif // !defined(NO_SOCKETS) + +#ifdef _NTSERVICE +static int_fast8_t installService = 0; +static const char *restrict ServiceUser = NULL; +static const char *restrict ServicePassword = ""; +#endif + +#ifndef NO_PID_FILE +static const char *fn_pid = NULL; +#endif + +#ifndef NO_INI_FILE + +#ifdef INI_FILE +static const char *fn_ini = INI_FILE; +#else // !INI_FILE +static const char *fn_ini = NULL; +#endif // !INI_FILE + +static const char* IniFileErrorMessage = ""; +char* IniFileErrorBuffer = NULL; +#define INIFILE_ERROR_BUFFERSIZE 256 + +static IniFileParameter_t IniFileParameterList[] = +{ +# ifndef NO_RANDOM_EPID + { "RandomizationLevel", INI_PARAM_RANDOMIZATION_LEVEL }, + { "LCID", INI_PARAM_LCID }, +# endif // NO_RANDOM_EPID +# ifdef USE_MSRPC + { "Port", INI_PARAM_PORT }, +# endif // USE_MSRPC +# if !defined(NO_SOCKETS) && !defined(USE_MSRPC) + { "Listen", INI_PARAM_LISTEN }, +# if !defined(NO_LIMIT) && !__minix__ + { "MaxWorkers", INI_PARAM_MAX_WORKERS }, +# endif // !defined(NO_LIMIT) && !__minix__ +# endif // !defined(NO_SOCKETS) && !defined(USE_MSRPC) +# if !defined(NO_TIMEOUT) && !__minix__ && !defined(USE_MSRPC) & !defined(USE_MSRPC) + { "ConnectionTimeout", INI_PARAM_CONNECTION_TIMEOUT }, +# endif // !defined(NO_TIMEOUT) && !__minix__ && !defined(USE_MSRPC) & !defined(USE_MSRPC) +# ifndef USE_MSRPC + { "DisconnectClientsImmediately", INI_PARAM_DISCONNECT_IMMEDIATELY }, + { "UseNDR64", INI_PARAM_RPC_NDR64 }, + { "UseBTFN", INI_PARAM_RPC_BTFN }, +# endif // USE_MSRPC +# ifndef NO_PID_FILE + { "PIDFile", INI_PARAM_PID_FILE }, +# endif // NO_PID_FILE +# ifndef NO_LOG + { "LogFile", INI_PARAM_LOG_FILE }, +# ifndef NO_VERBOSE_LOG + { "LogVerbose", INI_PARAM_LOG_VERBOSE }, +# endif // NO_VERBOSE_LOG +# endif // NO_LOG +# ifndef NO_CUSTOM_INTERVALS + {"ActivationInterval", INI_PARAM_ACTIVATION_INTERVAL }, + {"RenewalInterval", INI_PARAM_RENEWAL_INTERVAL }, +# endif // NO_CUSTOM_INTERVALS +# if !defined(NO_USER_SWITCH) && !defined(_WIN32) + { "user", INI_PARAM_UID }, + { "group", INI_PARAM_GID}, +# endif // !defined(NO_USER_SWITCH) && !defined(_WIN32) +}; + +#endif // NO_INI_FILE + + +#if !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ + +#if !defined(USE_THREADS) && !defined(CYGWIN) && !defined(USE_MSRPC) +static int shmid = -1; +#endif + +#if __ANDROID__ && !defined(USE_THREADS) // Bionic does not wrap these syscalls (willingly because Google fears, developers don't know how to use it) + +#ifdef __NR_shmget +static int shmget(key_t key, size_t size, int shmflg) +{ + return syscall(__NR_shmget, key, size, shmflg); +} +#endif // __NR_shmget + +#ifdef __NR_shmat +static void *shmat(int shmid, const void *shmaddr, int shmflg) +{ + return (void *)syscall(__NR_shmat, shmid, shmaddr, shmflg); +} +#endif // __NR_shmat + +#ifdef __NR_shmdt +static int shmdt(const void *shmaddr) +{ + return syscall(__NR_shmdt, shmaddr); +} +#endif // __NR_shmdt + +#ifdef __NR_shmctl +static int shmctl(int shmid, int cmd, /*struct shmid_ds*/void *buf) +{ + return syscall(__NR_shmctl, shmid, cmd, buf); +} +#endif // __NR_shmctl + +#endif // __ANDROID__ && !defined(USE_THREADS) + +#endif // !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ + +#ifndef NO_USER_SWITCH +#ifndef _WIN32 + +static const char *uname = NULL, *gname = NULL; +static gid_t gid = INVALID_GID; +static uid_t uid = INVALID_UID; + +// Get Numeric id of user/group +static char GetNumericId(gid_t *restrict id, const char *const c) +{ + char* endptr; + gid_t temp; + + temp = (gid_t)strtoll(c, &endptr, 10); + + if (!*endptr) *id = temp; + + return *endptr; +} + + +// Get group id from option argument +static char GetGid() +{ + struct group *g; + + if ((g = getgrnam(optarg))) + gid = g->gr_gid; + else + return GetNumericId(&gid, optarg); + + return 0; +} + + +// Get user id from option argument +static char GetUid() +{ + struct passwd *u; + + ////PORTABILITY: Assumes uid_t and gid_t are of same size (shouldn't be a problem) + if ((u = getpwnam(optarg))) + uid = u->pw_uid; + else + return GetNumericId((gid_t*)&uid, optarg); + + return 0; +} +#endif // _WIN32 +#endif //NO_USER_SWITCH + +#ifdef NO_HELP +static __noreturn void usage() +{ + printerrorf("Incorrect parameters\n\n"); + exit(!0); +} +#else // HELP + + +static __noreturn void usage() +{ + printerrorf("vlmcsd %s\n" + "\nUsage:\n" + " %s [ options ]\n\n" + "Where:\n" + #ifndef NO_CL_PIDS + " -w always use for Windows\n" + " -0 always use for Office2010\n" + " -3 always use for Office2013\n" + " -H always use hardware Id \n" + #endif // NO_CL_PIDS + #if !defined(_WIN32) && !defined(NO_USER_SWITCH) + " -u set uid to \n" + " -g set gid to \n" + #endif // !defined(_WIN32) && !defined(NO_USER_SWITCH) + #ifndef NO_RANDOM_EPID + " -r 0|1|2\t\tset ePID randomization level (default 1)\n" + " -C \t\tuse fixed in random ePIDs\n" + #endif // NO_RANDOM_EPID + #ifndef NO_SOCKETS + #ifndef USE_MSRPC + " -4\t\t\tuse IPv4\n" + " -6\t\t\tuse IPv6\n" + " -L
[:]\tlisten on IP address
with optional \n" + " -P \t\tset TCP port for subsequent -L statements (default 1688)\n" + #else // USE_MSRPC + " -P \t\tuse TCP port (default 1688)\n" + #endif // USE_MSRPC + #if !defined(NO_LIMIT) && !__minix__ + " -m \t\tHandle max. simultaneously (default no limit)\n" + #endif // !defined(NO_LIMIT) && !__minix__ + #ifdef _NTSERVICE + " -s install vlmcsd as an NT service. Ignores -e" + #ifndef _WIN32 + ", -f and -D" + #endif // _WIN32 + "\n" + " -S remove vlmcsd service. Ignores all other options\n" + " -U run NT service as . Must be used with -s\n" + " -W optional for -U. Must be used with -s\n" + #endif // _NTSERVICE + #ifndef NO_LOG + " -e log to stdout\n" + #endif // NO_LOG + #ifndef _WIN32 // + " -D run in foreground\n" + " -f run in foreground" + #ifndef NO_LOG + " and log to stdout" + #endif // NO_LOG + "\n" + #endif // _WIN32 + #endif // NO_SOCKETS + #ifndef USE_MSRPC + #if !defined(NO_TIMEOUT) && !__minix__ + " -t \t\tdisconnect clients after of inactivity (default 30)\n" + #endif // !defined(NO_TIMEOUT) && !__minix__ + " -d\t\t\tdisconnect clients after each request\n" + " -k\t\t\tdon't disconnect clients after each request (default)\n" + " -N0, -N1\t\tdisable/enable NDR64\n" + " -B0, -B1\t\tdisable/enable bind time feature negotiation\n" + #endif // USE_MSRPC + #ifndef NO_PID_FILE + " -p write pid to \n" + #endif // NO_PID_FILE + #ifndef NO_INI_FILE + " -i \t\tuse config file \n" + #endif // NO_INI_FILE + #ifndef NO_CUSTOM_INTERVALS + " -R renew activation every (default 1w)\n" + " -A retry activation every (default 2h)\n" + #endif // NO_CUSTOM_INTERVALS + #ifndef NO_LOG + #ifndef _WIN32 + " -l syslog log to syslog\n" + #endif // _WIN32 + " -l log to \n" + #ifndef NO_VERBOSE_LOG + " -v\t\t\tlog verbose\n" + " -q\t\t\tdon't log verbose (default)\n" + #endif // NO_VERBOSE_LOG + #endif // NO_LOG + " -V display version information and exit" + "\n", + Version, global_argv[0]); + + exit(!0); +} +#endif // HELP + + +#ifndef NO_CUSTOM_INTERVALS + +// Convert time span strings (e.g. "2h", "5w") to minutes +__pure static DWORD timeSpanString2Minutes(const char *const restrict argument) +{ + char *unitId; + + long long val = strtoll(argument, &unitId, 10); + + switch(toupper((int)*unitId)) + { + case 0: + case 'M': + break; + case 'H': + val *= 60; + break; + case 'D': + val *= 60 * 24; + break; + case 'W': + val *= 60 * 24 * 7; + break; + case 'S': + val /= 60; + break; + default: + return 0; + } + + if (val < 1) val = 1; + if (val > UINT_MAX) val = UINT_MAX; + + return (DWORD)val; +} + + +#ifndef NO_INI_FILE +__pure static BOOL getTimeSpanFromIniFile(DWORD* result, const char *const restrict argument) +{ + DWORD val = timeSpanString2Minutes(argument); + if (!val) + { + IniFileErrorMessage = "Incorrect time span."; + return FALSE; + } + + *result = val; + return TRUE; +} +#endif // NO_INI_FILE + + +__pure static DWORD getTimeSpanFromCommandLine(const char *const restrict optarg, const char optchar) +{ + long long val = timeSpanString2Minutes(optarg); + + if (!val) + { + printerrorf("Fatal: No valid time span specified in option -%c.\n", optchar); + exit (!0); + } + + return (DWORD)val; +} + +#endif // NO_CUSTOM_INTERVALS + + +#ifndef NO_INI_FILE +static void ignoreIniFileParameter(uint_fast8_t iniFileParameterId) +{ + uint_fast8_t i; + + for (i = 0; i < _countof(IniFileParameterList); i++) + { + if (IniFileParameterList[i].Id != iniFileParameterId) continue; + IniFileParameterList[i].Id = 0; + break; + } +} +#else // NO_INI_FILE +#define ignoreIniFileParameter(x) +#endif // NO_INI_FILE + + +#ifndef NO_INI_FILE +static BOOL getIniFileArgumentBool(int_fast8_t *result, const char *const argument) +{ + IniFileErrorMessage = "Argument must be true/on/yes/1 or false/off/no/0"; + return getArgumentBool(result, argument); +} + + +static BOOL getIniFileArgumentInt(unsigned int *result, const char *const argument, const unsigned int min, const unsigned int max) +{ + unsigned int tempResult; + + if (!stringToInt(argument, min, max, &tempResult)) + { + snprintf(IniFileErrorBuffer, INIFILE_ERROR_BUFFERSIZE, "Must be integer between %u and %u", min, max); + IniFileErrorMessage = IniFileErrorBuffer; + return FALSE; + } + + *result = tempResult; + return TRUE; +} + + +static char* allocateStringArgument(const char *const argument) +{ + char* result = (char*)vlmcsd_malloc(strlen(argument) + 1); + strcpy(result, argument); + return result; +} + + +static BOOL setIniFileParameter(uint_fast8_t id, const char *const iniarg) +{ + unsigned int result; + BOOL success = TRUE; + + switch(id) + { +# if !defined(NO_USER_SWITCH) && !defined(_WIN32) + + case INI_PARAM_GID: + { + struct group *g; + IniFileErrorMessage = "Invalid group id or name"; + if (!(gname = allocateStringArgument(iniarg))) return FALSE; + + if ((g = getgrnam(iniarg))) + gid = g->gr_gid; + else + success = !GetNumericId(&gid, iniarg); + break; + } + + case INI_PARAM_UID: + { + struct passwd *p; + IniFileErrorMessage = "Invalid user id or name"; + if (!(uname = allocateStringArgument(iniarg))) return FALSE; + + if ((p = getpwnam(iniarg))) + uid = p->pw_uid; + else + success = !GetNumericId(&uid, iniarg); + break; + } + +# endif // !defined(NO_USER_SWITCH) && !defined(_WIN32) + +# ifndef NO_RANDOM_EPID + + case INI_PARAM_LCID: + success = getIniFileArgumentInt(&result, iniarg, 0, 32767); + if (success) Lcid = (uint16_t)result; + break; + + case INI_PARAM_RANDOMIZATION_LEVEL: + success = getIniFileArgumentInt(&result, iniarg, 0, 2); + if (success) RandomizationLevel = (int_fast8_t)result; + break; + +# endif // NO_RANDOM_EPID + +# ifdef USE_MSRPC + + case INI_PARAM_PORT: + defaultport = allocateStringArgument(iniarg); + break; + +# endif // USE_MSRPC + +# if !defined(NO_SOCKETS) && !defined(USE_MSRPC) + + case INI_PARAM_LISTEN: + maxsockets++; + return TRUE; + +# if !defined(NO_LIMIT) && !__minix__ + + case INI_PARAM_MAX_WORKERS: +# ifdef USE_MSRPC + success = getIniFileArgumentInt(&MaxTasks, iniarg, 1, RPC_C_LISTEN_MAX_CALLS_DEFAULT); +# else // !USE_MSRPC + success = getIniFileArgumentInt(&MaxTasks, iniarg, 1, SEM_VALUE_MAX); +# endif // !USE_MSRPC + break; + +# endif // !defined(NO_LIMIT) && !__minix__ +# endif // NO_SOCKETS + +# ifndef NO_PID_FILE + + case INI_PARAM_PID_FILE: + fn_pid = allocateStringArgument(iniarg); + break; + +# endif // NO_PID_FILE + +# ifndef NO_LOG + + case INI_PARAM_LOG_FILE: + fn_log = allocateStringArgument(iniarg); + break; + +# ifndef NO_VERBOSE_LOG + case INI_PARAM_LOG_VERBOSE: + success = getIniFileArgumentBool(&logverbose, iniarg); + break; + +# endif // NO_VERBOSE_LOG +# endif // NO_LOG + +# ifndef NO_CUSTOM_INTERVALS + + case INI_PARAM_ACTIVATION_INTERVAL: + success = getTimeSpanFromIniFile(&VLActivationInterval, iniarg); + break; + + case INI_PARAM_RENEWAL_INTERVAL: + success = getTimeSpanFromIniFile(&VLRenewalInterval, iniarg); + break; + +# endif // NO_CUSTOM_INTERVALS + +# ifndef USE_MSRPC + +# if !defined(NO_TIMEOUT) && !__minix__ + + case INI_PARAM_CONNECTION_TIMEOUT: + success = getIniFileArgumentInt(&result, iniarg, 1, 600); + if (success) ServerTimeout = (DWORD)result; + break; + +# endif // !defined(NO_TIMEOUT) && !__minix__ + + case INI_PARAM_DISCONNECT_IMMEDIATELY: + success = getIniFileArgumentBool(&DisconnectImmediately, iniarg); + break; + + case INI_PARAM_RPC_NDR64: + success = getIniFileArgumentBool(&UseRpcNDR64, iniarg); + break; + + case INI_PARAM_RPC_BTFN: + success = getIniFileArgumentBool(&UseRpcBTFN, iniarg); + break; + +# endif // USE_MSRPC + + default: + return FALSE; + } + + return success; +} + + +static __pure int isControlCharOrSlash(const char c) +{ + if ((unsigned char)c < '!') return !0; + if (c == '/') return !0; + return 0; +} + + +static void iniFileLineNextWord(const char **s) +{ + while ( **s && isspace((int)**s) ) (*s)++; +} + + +static BOOL setHwIdFromIniFileLine(const char **s, const ProdListIndex_t index) +{ + iniFileLineNextWord(s); + + if (**s == '/') + { + if (KmsResponseParameters[index].HwId) return TRUE; + + BYTE* HwId = (BYTE*)vlmcsd_malloc(sizeof(((RESPONSE_V6 *)0)->HwId)); + hex2bin(HwId, *s + 1, sizeof(((RESPONSE_V6 *)0)->HwId)); + KmsResponseParameters[index].HwId = HwId; + } + + return TRUE; +} + + +static BOOL checkGuidInIniFileLine(const char **s, ProdListIndex_t *const index) +{ + GUID AppGuid; + + if (!string2Uuid(*s, &AppGuid)) return FALSE; + + (*s) += GUID_STRING_LENGTH; + getProductNameHE(&AppGuid, AppList, index); + + if (*index > getAppListSize() - 2) + { + IniFileErrorMessage = "Unknown App Guid."; + return FALSE; + } + + iniFileLineNextWord(s); + if ( *(*s)++ != '=' ) return FALSE; + + return TRUE; +} + + +static BOOL setEpidFromIniFileLine(const char **s, const ProdListIndex_t index) +{ + iniFileLineNextWord(s); + const char *savedPosition = *s; + uint_fast16_t i; + + for (i = 0; !isControlCharOrSlash(**s); i++) + { + if (utf8_to_ucs2_char((const unsigned char*)*s, (const unsigned char**)s) == (WCHAR)~0) + { + return FALSE; + } + } + + if (i < 1 || i >= PID_BUFFER_SIZE) return FALSE; + if (KmsResponseParameters[index].Epid) return TRUE; + + size_t size = *s - savedPosition + 1; + + char* epidbuffer = (char*)vlmcsd_malloc(size); + memcpy(epidbuffer, savedPosition, size - 1); + epidbuffer[size - 1] = 0; + + KmsResponseParameters[index].Epid = epidbuffer; + + #ifndef NO_LOG + KmsResponseParameters[index].EpidSource = fn_ini; + #endif //NO_LOG + + return TRUE; +} + + +static BOOL getIniFileArgument(const char **s) +{ + while (!isspace((int)**s) && **s != '=' && **s) (*s)++; + iniFileLineNextWord(s); + + if (*((*s)++) != '=') + { + IniFileErrorMessage = "'=' required after keyword."; + return FALSE; + } + + iniFileLineNextWord(s); + + if (!**s) + { + IniFileErrorMessage = "missing argument after '='."; + return FALSE; + } + + return TRUE; +} + + +static BOOL handleIniFileParameter(const char *s) +{ + uint_fast8_t i; + + for (i = 0; i < _countof(IniFileParameterList); i++) + { + if (strncasecmp(IniFileParameterList[i].Name, s, strlen(IniFileParameterList[i].Name))) continue; + if (!IniFileParameterList[i].Id) return TRUE; + + if (!getIniFileArgument(&s)) return FALSE; + + return setIniFileParameter(IniFileParameterList[i].Id, s); + } + + IniFileErrorMessage = "Unknown keyword."; + return FALSE; +} + + +#if !defined(NO_SOCKETS) && !defined(USE_MSRPC) +static BOOL setupListeningSocketsFromIniFile(const char *s) +{ + if (!maxsockets) return TRUE; + if (strncasecmp("Listen", s, 6)) return TRUE; + if (!getIniFileArgument(&s)) return TRUE; + + snprintf(IniFileErrorBuffer, INIFILE_ERROR_BUFFERSIZE, "Cannot listen on %s.", s); + IniFileErrorMessage = IniFileErrorBuffer; + return addListeningSocket(s); +} +#endif // !defined(NO_SOCKETS) && !defined(USE_MSRPC) + + +static BOOL readIniFile(const uint_fast8_t pass) +{ + char line[256]; + const char *s; + ProdListIndex_t appIndex; + unsigned int lineNumber; + uint_fast8_t lineParseError; + + FILE *restrict f; + BOOL result = TRUE; + + IniFileErrorBuffer = (char*)vlmcsd_malloc(INIFILE_ERROR_BUFFERSIZE); + + if ( !(f = fopen(fn_ini, "r") )) return FALSE; + + for (lineNumber = 1; (s = fgets(line, sizeof(line), f)); lineNumber++) + { + line[strlen(line) - 1] = 0; + + iniFileLineNextWord(&s); + if (*s == ';' || *s == '#' || !*s) continue; + +# ifndef NO_SOCKETS + if (pass == INI_FILE_PASS_1) +# endif // NO_SOCKETS + { + if (handleIniFileParameter(s)) continue; + + lineParseError = !checkGuidInIniFileLine(&s, &appIndex) || + !setEpidFromIniFileLine(&s, appIndex) || + !setHwIdFromIniFileLine(&s, appIndex); + } +# if !defined(NO_SOCKETS) && !defined(USE_MSRPC) + else if (pass == INI_FILE_PASS_2) + { + lineParseError = !setupListeningSocketsFromIniFile(s); + } + else + { + return FALSE; + } +# endif // NO_SOCKETS + + if (lineParseError) + { + printerrorf("Warning: %s line %u: \"%s\". %s\n", fn_ini, lineNumber, line, IniFileErrorMessage); + continue; + } + } + + if (ferror(f)) result = FALSE; + + free(IniFileErrorBuffer); + fclose(f); + +# if !defined(NO_SOCKETS) && !defined(NO_LOG) + + if (pass == INI_FILE_PASS_1 && !InetdMode && result) + { +# ifdef _NTSERVICE + if (!installService) +# endif // _NTSERVICE + logger("Read ini file %s\n", fn_ini); + } + +# endif // !defined(NO_SOCKETS) && !defined(NO_LOG) + + return result; +} +#endif // NO_INI_FILE + + +#if !defined(NO_SOCKETS) +#if !defined(_WIN32) +#if !defined(NO_SIGHUP) +static void exec_self(char** argv) +{ +# if __linux__ && defined(USE_AUXV) + + char *execname_ptr = (char*)getauxval(AT_EXECFN); + if (execname_ptr) execv(execname_ptr, argv); + +# elif (__linux__ || __CYGWIN__) && !defined(NO_PROCFS) + + execv(realpath("/proc/self/exe", NULL), argv); + +# elif (__FreeBSD__) && !defined(NO_PROCFS) + + int mib[4]; + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PATHNAME; + mib[3] = -1; + char path[PATH_MAX + 1]; + size_t cb = sizeof(path); + if (!sysctl(mib, 4, path, &cb, NULL, 0)) execv(path, argv); + +# elif (__DragonFly__) && !defined(NO_PROCFS) + + execv(realpath("/proc/curproc/file", NULL), argv); + +# elif __NetBSD__ && !defined(NO_PROCFS) + + execv(realpath("/proc/curproc/exe", NULL), argv); + +# elif __sun__ + + const char* exename = getexecname(); + if (exename) execv(exename, argv); + +# elif __APPLE__ + + char path[PATH_MAX + 1]; + uint32_t size = sizeof(path); + if (_NSGetExecutablePath(path, &size) == 0) execv(path, argv); + +# else + + execvp(argv[0], argv); + +# endif +} + + +static void HangupHandler(const int signal_unused) +{ + int i; + int_fast8_t daemonize_protection = TRUE; + CARGV argv_in = multi_argv == NULL ? global_argv : multi_argv; + int argc_in = multi_argc == 0 ? global_argc : multi_argc; + const char** argv_out = (const char**)vlmcsd_malloc((argc_in + 2) * sizeof(char**)); + + for (i = 0; i < argc_in; i++) + { + if (!strcmp(argv_in[i], "-Z")) daemonize_protection = FALSE; + argv_out[i] = argv_in[i]; + } + + argv_out[argc_in] = argv_out[argc_in + 1] = NULL; + if (daemonize_protection) argv_out[argc_in] = (char*) "-Z"; + + exec_self((char**)argv_out); + +# ifndef NO_LOG + logger("Fatal: Unable to restart on SIGHUP: %s\n", strerror(errno)); +# endif + +# ifndef NO_PID_FILE + if (fn_pid) unlink(fn_pid); +# endif // NO_PID_FILE + exit(errno); +} +#endif // NO_SIGHUP + + +static void terminationHandler(const int signal_unused) +{ + cleanup(); + exit(0); +} + + +#if defined(CHILD_HANDLER) || __minix__ +static void childHandler(const int signal) +{ + waitpid(-1, NULL, WNOHANG); +} +#endif // defined(CHILD_HANDLER) || __minix__ + + +static int daemonizeAndSetSignalAction() +{ + struct sigaction sa; + sigemptyset(&sa.sa_mask); + +# ifndef NO_LOG + if ( !nodaemon) if (daemon(!0, logstdout)) +# else // NO_LOG + if ( !nodaemon) if (daemon(!0, 0)) +# endif // NO_LOG + { + printerrorf("Fatal: Could not daemonize to background.\n"); + return(errno); + } + + if (!InetdMode) + { +# ifndef USE_THREADS + +# if defined(CHILD_HANDLER) || __minix__ + sa.sa_handler = childHandler; +# else // !(defined(CHILD_HANDLER) || __minix__) + sa.sa_handler = SIG_IGN; +# endif // !(defined(CHILD_HANDLER) || __minix__) + sa.sa_flags = SA_NOCLDWAIT; + + if (sigaction(SIGCHLD, &sa, NULL)) + return(errno); + +# endif // !USE_THREADS + + sa.sa_handler = terminationHandler; + sa.sa_flags = 0; + + sigaction(SIGINT, &sa, NULL); + sigaction(SIGTERM, &sa, NULL); + +# ifndef NO_SIGHUP + sa.sa_handler = HangupHandler; + sa.sa_flags = SA_NODEFER; + sigaction(SIGHUP, &sa, NULL); +# endif // NO_SIGHUP + } + + return 0; +} + + +#else // _WIN32 + +static BOOL terminationHandler(const DWORD fdwCtrlType) +{ + // What a lame substitute for Unix signal handling + switch(fdwCtrlType) + { + case CTRL_C_EVENT: + case CTRL_CLOSE_EVENT: + case CTRL_BREAK_EVENT: + case CTRL_LOGOFF_EVENT: + case CTRL_SHUTDOWN_EVENT: + cleanup(); + exit(0); + default: + return FALSE; + } +} + + +static DWORD daemonizeAndSetSignalAction() +{ + if(!SetConsoleCtrlHandler( (PHANDLER_ROUTINE) terminationHandler, TRUE )) + { + #ifndef NO_LOG + DWORD rc = GetLastError(); + logger("Warning: Could not register Windows signal handler: Error %u\n", rc); + #endif // NO_LOG + } + + return ERROR_SUCCESS; +} +#endif // _WIN32 +#endif // !defined(NO_SOCKETS) + + +// Workaround for Cygwin fork bug (only affects cygwin processes that are Windows services) +// Best is to compile for Cygwin with threads. fork() is slow and unreliable on Cygwin +#if !defined(NO_INI_FILE) || !defined(NO_LOG) || !defined(NO_CL_PIDS) +__pure static char* getCommandLineArg(char *const restrict optarg) +{ + #if !defined (__CYGWIN__) || defined(USE_THREADS) || defined(NO_SOCKETS) + return optarg; + #else + if (!IsNTService) return optarg; + + return allocateStringArgument(optarg); + #endif +} +#endif // !defined(NO_INI_FILE) || !defined(NO_LOG) || !defined(NO_CL_PIDS) + + +static void parseGeneralArguments() { + int o; + + #ifndef NO_CL_PIDS + BYTE* HwId; + #endif // NO_CL_PIDS + + for (opterr = 0; ( o = getopt(global_argc, (char* const*)global_argv, optstring) ) > 0; ) switch (o) + { + #if !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) + case 'Z': + IsRestarted = TRUE; + nodaemon = TRUE; + break; + #endif // !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) + + #ifndef NO_CL_PIDS + case 'w': + KmsResponseParameters[APP_ID_WINDOWS].Epid = getCommandLineArg(optarg); + #ifndef NO_LOG + KmsResponseParameters[APP_ID_WINDOWS].EpidSource = "command line"; + #endif // NO_LOG + break; + + case '0': + KmsResponseParameters[APP_ID_OFFICE2010].Epid = getCommandLineArg(optarg); + #ifndef NO_LOG + KmsResponseParameters[APP_ID_OFFICE2010].EpidSource = "command line"; + #endif // NO_LOG + break; + + case '3': + KmsResponseParameters[APP_ID_OFFICE2013].Epid = getCommandLineArg(optarg); + #ifndef NO_LOG + KmsResponseParameters[APP_ID_OFFICE2013].EpidSource = "command line"; + #endif // NO_LOG + break; + + case 'H': + HwId = (BYTE*)vlmcsd_malloc(sizeof(((RESPONSE_V6 *)0)->HwId)); + + hex2bin(HwId, optarg, sizeof(((RESPONSE_V6 *)0)->HwId)); + + KmsResponseParameters[APP_ID_WINDOWS].HwId = HwId; + KmsResponseParameters[APP_ID_OFFICE2010].HwId = HwId; + KmsResponseParameters[APP_ID_OFFICE2013].HwId = HwId; + break; + #endif // NO_CL_PIDS + + #ifndef NO_SOCKETS + + #ifndef USE_MSRPC + case '4': + case '6': + case 'P': + ignoreIniFileParameter(INI_PARAM_LISTEN); + break; + #else // USE_MSRPC + case 'P': + defaultport = optarg; + ignoreIniFileParameter(INI_PARAM_PORT); + break; + #endif // USE_MSRPC + + #if !defined(NO_LIMIT) && !__minix__ + + case 'm': + #ifdef USE_MSRPC + MaxTasks = getOptionArgumentInt(o, 1, RPC_C_LISTEN_MAX_CALLS_DEFAULT); + #else // !USE_MSRPC + MaxTasks = getOptionArgumentInt(o, 1, SEM_VALUE_MAX); + #endif // !USE_MSRPC + ignoreIniFileParameter(INI_PARAM_MAX_WORKERS); + break; + + #endif // !defined(NO_LIMIT) && !__minix__ + #endif // NO_SOCKETS + + #if !defined(NO_TIMEOUT) && !__minix__ && !defined(USE_MSRPC) + case 't': + ServerTimeout = getOptionArgumentInt(o, 1, 600); + ignoreIniFileParameter(INI_PARAM_CONNECTION_TIMEOUT); + break; + #endif // !defined(NO_TIMEOUT) && !__minix__ && !defined(USE_MSRPC) + + #ifndef NO_PID_FILE + case 'p': + fn_pid = getCommandLineArg(optarg); + ignoreIniFileParameter(INI_PARAM_PID_FILE); + break; + #endif + + #ifndef NO_INI_FILE + case 'i': + fn_ini = getCommandLineArg(optarg); + if (!strcmp(fn_ini, "-")) fn_ini = NULL; + break; + #endif + + #ifndef NO_LOG + case 'l': + fn_log = getCommandLineArg(optarg); + ignoreIniFileParameter(INI_PARAM_LOG_FILE); + break; + + #ifndef NO_VERBOSE_LOG + case 'v': + case 'q': + logverbose = o == 'v'; + ignoreIniFileParameter(INI_PARAM_LOG_VERBOSE); + break; + + #endif // NO_VERBOSE_LOG + #endif // NO_LOG + + #ifndef NO_SOCKETS + #ifndef USE_MSRPC + case 'L': + maxsockets++; + ignoreIniFileParameter(INI_PARAM_LISTEN); + break; + #endif // USE_MSRPC + + case 'f': + nodaemon = 1; + #ifndef NO_LOG + logstdout = 1; + #endif + break; + + #ifdef _NTSERVICE + case 'U': + ServiceUser = optarg; + break; + + case 'W': + ServicePassword = optarg; + break; + + case 's': + #ifndef USE_MSRPC + if (InetdMode) usage(); + #endif // USE_MSRPC + if (!IsNTService) installService = 1; // Install + break; + + case 'S': + if (!IsNTService) installService = 2; // Remove + break; + #endif // _NTSERVICE + + case 'D': + nodaemon = 1; + break; + + #ifndef NO_LOG + case 'e': + logstdout = 1; + break; + #endif // NO_LOG + #endif // NO_SOCKETS + + #ifndef _WIN32 + case 'I': // Backward compatibility with svn681 and earlier + break; + #endif // _WIN32 + + #ifndef NO_RANDOM_EPID + case 'r': + RandomizationLevel = (int_fast8_t)getOptionArgumentInt(o, 0, 2); + ignoreIniFileParameter(INI_PARAM_RANDOMIZATION_LEVEL); + break; + + case 'C': + Lcid = (uint16_t)getOptionArgumentInt(o, 0, 32767); + + ignoreIniFileParameter(INI_PARAM_LCID); + + #ifdef _PEDANTIC + if (!IsValidLcid(Lcid)) + { + printerrorf("Warning: %s is not a valid LCID.\n", optarg); + } + #endif // _PEDANTIC + + break; + #endif // NO_RANDOM_PID + + #if !defined(NO_USER_SWITCH) && !defined(_WIN32) + case 'g': + gname = optarg; + ignoreIniFileParameter(INI_PARAM_GID); + #ifndef NO_SIGHUP + if (!IsRestarted) + #endif // NO_SIGHUP + if (GetGid()) + { + printerrorf("Fatal: setgid for %s failed.\n", optarg); + exit(!0); + } + break; + + case 'u': + uname = optarg; + ignoreIniFileParameter(INI_PARAM_UID); + #ifndef NO_SIGHUP + if (!IsRestarted) + #endif // NO_SIGHUP + if (GetUid()) + { + printerrorf("Fatal: setuid for %s failed.\n", optarg); + exit(!0); + } + break; + #endif // NO_USER_SWITCH && !_WIN32 + + #ifndef NO_CUSTOM_INTERVALS + case 'R': + VLRenewalInterval = getTimeSpanFromCommandLine(optarg, o); + ignoreIniFileParameter(INI_PARAM_RENEWAL_INTERVAL); + break; + + case 'A': + VLActivationInterval = getTimeSpanFromCommandLine(optarg, o); + ignoreIniFileParameter(INI_PARAM_ACTIVATION_INTERVAL); + break; + #endif + + #ifndef USE_MSRPC + case 'd': + case 'k': + DisconnectImmediately = o == 'd'; + ignoreIniFileParameter(INI_PARAM_DISCONNECT_IMMEDIATELY); + break; + + case 'N': + if (!getArgumentBool(&UseRpcNDR64, optarg)) usage(); + ignoreIniFileParameter(INI_PARAM_RPC_NDR64); + break; + + case 'B': + if (!getArgumentBool(&UseRpcBTFN, optarg)) usage(); + ignoreIniFileParameter(INI_PARAM_RPC_BTFN); + break; + #endif // !USE_MSRPC + + case 'V': + #ifdef _NTSERVICE + if (IsNTService) break; + #endif + printf("vlmcsd %s\n", Version); + exit(0); + + default: + usage(); + } + + // Do not allow non-option arguments + if (optind != global_argc) + usage(); + + #ifdef _NTSERVICE + // -U and -W must be used with -s + if ((ServiceUser || *ServicePassword) && installService != 1) usage(); + #endif // _NTSERVICE +} + + +#ifndef NO_PID_FILE +static void writePidFile() +{ +# ifndef NO_SIGHUP + if (IsRestarted) return; +# endif // NO_SIGHUP + + if (fn_pid && !InetdMode) + { + FILE *_f = fopen(fn_pid, "w"); + + if ( _f ) + { + fprintf(_f, "%u", (uint32_t)getpid()); + fclose(_f); + } + + #ifndef NO_LOG + else + { + logger("Warning: Cannot write pid file '%s'. %s.\n", fn_pid, strerror(errno)); + } + #endif // NO_LOG + } +} +#else +#define writePidFile(x) +#endif // NO_PID_FILE + +#if !defined(NO_SOCKETS) && !defined(USE_MSRPC) + +void cleanup() +{ + + if (!InetdMode) + { + #ifndef NO_PID_FILE + if (fn_pid) unlink(fn_pid); + #endif // NO_PID_FILE + closeAllListeningSockets(); + + #if !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !defined(_WIN32) && !__minix__ + sem_unlink("/vlmcsd"); + #if !defined(USE_THREADS) && !defined(CYGWIN) + if (shmid >= 0) + { + if (Semaphore != (sem_t*)-1) shmdt(Semaphore); + shmctl(shmid, IPC_RMID, NULL); + } + #endif // !defined(USE_THREADS) && !defined(CYGWIN) + #endif // !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !defined(_WIN32) && !__minix__ + + #ifndef NO_LOG + logger("vlmcsd %s was shutdown\n", Version); + #endif // NO_LOG + } + +} + +#elif defined(USE_MSRPC) + +void cleanup() +{ +# ifndef NO_PID_FILE + if (fn_pid) unlink(fn_pid); +# endif // NO_PID_FILE + +# ifndef NO_LOG + logger("vlmcsd %s was shutdown\n", Version); +# endif // NO_LOG +} + +#else // Neither Sockets nor RPC + +__pure void cleanup() {} + +#endif // Neither Sockets nor RPC + + +#if !defined(USE_MSRPC) && !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !__minix__ +// Get a semaphore for limiting the maximum concurrent tasks +static void allocateSemaphore(void) +{ + #ifdef USE_THREADS + #define sharemode 0 + #else + #define sharemode 1 + #endif + + #ifndef _WIN32 + sem_unlink("/vlmcsd"); + #endif + + if(MaxTasks < SEM_VALUE_MAX && !InetdMode) + { + #ifndef _WIN32 + + #if !defined(USE_THREADS) && !defined(CYGWIN) + + if ((Semaphore = sem_open("/vlmcsd", O_CREAT /*| O_EXCL*/, 0700, MaxTasks)) == SEM_FAILED) // fails on many systems + { + // We didn't get a named Semaphore (/dev/shm on Linux) so let's try our own shared page + + if ( + ( shmid = shmget(IPC_PRIVATE, sizeof(sem_t), IPC_CREAT | 0600) ) < 0 || + ( Semaphore = (sem_t*)shmat(shmid, NULL, 0) ) == (sem_t*)-1 || + sem_init(Semaphore, 1, MaxTasks) < 0 + ) + { + int errno_save = errno; + if (Semaphore != (sem_t*)-1) shmdt(Semaphore); + if (shmid >= 0) shmctl(shmid, IPC_RMID, NULL); + printerrorf("Warning: Could not create semaphore: %s\n", vlmcsd_strerror(errno_save)); + MaxTasks = SEM_VALUE_MAX; + } + } + + #else // THREADS or CYGWIN + + Semaphore = (sem_t*)vlmcsd_malloc(sizeof(sem_t)); + + if (sem_init(Semaphore, sharemode, MaxTasks) < 0) // sem_init is not implemented on Darwin (returns ENOSYS) + { + free(Semaphore); + + if ((Semaphore = sem_open("/vlmcsd", O_CREAT /*| O_EXCL*/, 0700, MaxTasks)) == SEM_FAILED) + { + printerrorf("Warning: Could not create semaphore: %s\n", vlmcsd_strerror(errno)); + MaxTasks = SEM_VALUE_MAX; + } + } + + #endif // THREADS or CYGWIN + + #else // _WIN32 + + if (!(Semaphore = CreateSemaphoreA(NULL, MaxTasks, MaxTasks, NULL))) + { + printerrorf("Warning: Could not create semaphore: %s\n", vlmcsd_strerror(GetLastError())); + MaxTasks = SEM_VALUE_MAX; + } + + #endif // _WIN32 + } +} +#endif // !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !__minix__ + + +#if !defined(NO_SOCKETS) && !defined(USE_MSRPC) +int setupListeningSockets() +{ + int o; + uint_fast8_t allocsockets = maxsockets ? maxsockets : 2; + + SocketList = (SOCKET*)vlmcsd_malloc((size_t)allocsockets * sizeof(SOCKET)); + + haveIPv4Stack = checkProtocolStack(AF_INET); + haveIPv6Stack = checkProtocolStack(AF_INET6); + + // Reset getopt since we've alread used it + optReset(); + + for (opterr = 0; ( o = getopt(global_argc, (char* const*)global_argv, optstring) ) > 0; ) switch (o) + { + case '4': + + if (!haveIPv4Stack) + { + printerrorf("Fatal: Your system does not support %s.\n", cIPv4); + return !0; + } + v4required = 1; + break; + + case '6': + + if (!haveIPv6Stack) + { + printerrorf("Fatal: Your system does not support %s.\n", cIPv6); + return !0; + } + v6required = 1; + break; + + case 'L': + + addListeningSocket(optarg); + break; + + case 'P': + + defaultport = optarg; + break; + + default: + + break; + } + + +# ifndef NO_INI_FILE + if (maxsockets && !numsockets) + { + if (fn_ini && !readIniFile(INI_FILE_PASS_2)) + { + #ifdef INI_FILE + if (strcmp(fn_ini, INI_FILE)) + #endif // INI_FILE + printerrorf("Warning: Can't read %s: %s\n", fn_ini, strerror(errno)); + } + } +# endif + + // if -L hasn't been specified on the command line, use default sockets (all IP addresses) + // maxsocket results from first pass parsing the arguments + if (!maxsockets) + { + if (haveIPv6Stack && (v6required || !v4required)) addListeningSocket("::"); + if (haveIPv4Stack && (v4required || !v6required)) addListeningSocket("0.0.0.0"); + } + + if (!numsockets) + { + printerrorf("Fatal: Could not listen on any socket.\n"); + return(!0); + } + + return 0; +} +#endif // !defined(NO_SOCKETS) && !defined(USE_MSRPC) + + +int server_main(int argc, CARGV argv) +{ + #if !defined(_NTSERVICE) && !defined(NO_SOCKETS) + int error; + #endif // !defined(_NTSERVICE) && !defined(NO_SOCKETS) + + // Initialize ePID / HwId parameters + memset(KmsResponseParameters, 0, sizeof(KmsResponseParameters)); + + global_argc = argc; + global_argv = argv; + + #ifdef _NTSERVICE // #endif is in newmain() + DWORD lasterror = ERROR_SUCCESS; + + if (!StartServiceCtrlDispatcher(NTServiceDispatchTable) && (lasterror = GetLastError()) == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) + { + IsNTService = FALSE; + return newmain(); + } + + return lasterror; +} + + +int newmain() +{ + int error; + + // Initialize thread synchronization objects for Windows and Cygwin + #ifdef USE_THREADS + + #ifndef NO_LOG + // Initialize the Critical Section for proper logging + InitializeCriticalSection(&logmutex); + #endif // NO_LOG + + #endif // USE_THREADS + + #ifdef _WIN32 + + #ifndef USE_MSRPC + // Windows Sockets must be initialized + WSADATA wsadata; + + if ((error = WSAStartup(0x0202, &wsadata))) + { + printerrorf("Fatal: Could not initialize Windows sockets (Error: %d).\n", error); + return error; + } + #endif // USE_MSRPC + + // Windows can never daemonize + nodaemon = 1; + + #else // __CYGWIN__ + + // Do not daemonize if we are a Windows service + if (IsNTService) nodaemon = 1; + + #endif // _WIN32 / __CYGWIN__ + #endif // _NTSERVICE ( #ifdef is main(int argc, CARGV argv) ) + + parseGeneralArguments(); // Does not return if an error occurs + + #if !defined(_WIN32) && !defined(NO_SOCKETS) && !defined(USE_MSRPC) + struct stat statbuf; + fstat(STDIN_FILENO, &statbuf); + if (S_ISSOCK(statbuf.st_mode)) + { + InetdMode = 1; + nodaemon = 1; + maxsockets = 0; + #ifndef NO_LOG + logstdout = 0; + #endif // NO_LOG + } + #endif // !defined(_WIN32) && !defined(NO_SOCKETS) && !defined(USE_MSRPC) + + #ifndef NO_INI_FILE + if (fn_ini && !readIniFile(INI_FILE_PASS_1)) + { + #ifdef INI_FILE + if (strcmp(fn_ini, INI_FILE)) + #endif // INI_FILE + printerrorf("Warning: Can't read %s: %s\n", fn_ini, strerror(errno)); + } + #endif // NO_INI_FILE + + #if !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !__minix__ && !defined(USE_MSRPC) + allocateSemaphore(); + #endif // !defined(NO_LIMIT) && !defined(NO_SOCKETS) && __minix__ + + #ifdef _NTSERVICE + if (installService) + return NtServiceInstallation(installService, ServiceUser, ServicePassword); + #endif // _NTSERVICE + + #if !defined(NO_SOCKETS) && !defined(USE_MSRPC) + if (!InetdMode) + { + if ((error = setupListeningSockets())) return error; + } + #endif // NO_SOCKETS + + // After sockets have been set up, we may switch to a lower privileged user + #if !defined(_WIN32) && !defined(NO_USER_SWITCH) + + #ifndef NO_SIGHUP + if (!IsRestarted) + { + #endif // NO_SIGHUP + if (gid != INVALID_GID && setgid(gid)) + { + printerrorf("Fatal: setgid for %s failed.\n", gname); + return !0; + } + + if (uid != INVALID_UID && setuid(uid)) + { + printerrorf("Fatal: setuid for %s failed.\n", uname); + return !0; + } + #ifndef NO_SIGHUP + } + #endif // NO_SIGHUP + + #endif // !defined(_WIN32) && !defined(NO_USER_SWITCH) + + randomNumberInit(); + + // Randomization Level 1 means generate ePIDs at startup and use them during + // the lifetime of the process. So we generate them now + #ifndef NO_RANDOM_EPID + if (RandomizationLevel == 1) randomPidInit(); + #endif + + #if !defined(NO_SOCKETS) + #ifdef _WIN32 + if (!IsNTService) + #endif // _WIN32 + if ((error = daemonizeAndSetSignalAction())) return error; + #endif // !defined(NO_SOCKETS) + + writePidFile(); + + #if !defined(NO_LOG) && !defined(NO_SOCKETS) && !defined(USE_MSRPC) + if (!InetdMode) + logger("vlmcsd %s started successfully\n", Version); + #endif // !defined(NO_LOG) && !defined(NO_SOCKETS) && !defined(USE_MSRPC) + + #if defined(_NTSERVICE) && !defined(USE_MSRPC) + if (IsNTService) ReportServiceStatus(SERVICE_RUNNING, NO_ERROR, 200); + #endif // defined(_NTSERVICE) && !defined(USE_MSRPC) + + int rc; + rc = runServer(); + + // Clean up things and exit + #ifdef _NTSERVICE + if (!ServiceShutdown) + #endif + cleanup(); + #ifdef _NTSERVICE + else + ReportServiceStatus(SERVICE_STOPPED, NO_ERROR, 0); + #endif + + return rc; +} +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "crypto.h" +#include "endian.h" +#include + +const BYTE AesKeyV4[] = { + 0x05, 0x3D, 0x83, 0x07, 0xF9, 0xE5, 0xF0, 0x88, 0xEB, 0x5E, 0xA6, 0x68, 0x6C, 0xF0, 0x37, 0xC7, 0xE4, 0xEF, 0xD2, 0xD6}; + +const BYTE AesKeyV5[] = { + 0xCD, 0x7E, 0x79, 0x6F, 0x2A, 0xB2, 0x5D, 0xCB, 0x55, 0xFF, 0xC8, 0xEF, 0x83, 0x64, 0xC4, 0x70 }; + +const BYTE AesKeyV6[] = { + 0xA9, 0x4A, 0x41, 0x95, 0xE2, 0x01, 0x43, 0x2D, 0x9B, 0xCB, 0x46, 0x04, 0x05, 0xD8, 0x4A, 0x21 }; + +static const BYTE SBox[] = { + 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, + 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, + 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 0xB7, 0xFD, 0x93, 0x26, + 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, + 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, + 0xEB, 0x27, 0xB2, 0x75, 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, + 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, 0x53, 0xD1, 0x00, 0xED, + 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, + 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, + 0x50, 0x3C, 0x9F, 0xA8, 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, + 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 0xCD, 0x0C, 0x13, 0xEC, + 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, + 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, + 0xDE, 0x5E, 0x0B, 0xDB, 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, + 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, 0xE7, 0xC8, 0x37, 0x6D, + 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, + 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, + 0x4B, 0xBD, 0x8B, 0x8A, 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, + 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, 0xE1, 0xF8, 0x98, 0x11, + 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, + 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, + 0xB0, 0x54, 0xBB, 0x16 +}; + + +void XorBlock(const BYTE *const in, const BYTE *out) // Ensure that this is always 32 bit aligned +{ + /*UAA64( out, 0 ) ^= UAA64( in, 0 ); + UAA64( out, 1 ) ^= UAA64( in, 1 );*/ + + uint_fast8_t i; + + for (i = 0; i < AES_BLOCK_WORDS; i++) + { + ((DWORD*)out)[i] ^= ((DWORD*)in)[i]; + } +} + +#define AddRoundKey(d, rk) XorBlock((const BYTE *)rk, (const BYTE *)d) + +#define Mul2(word) (((word & 0x7f7f7f7f) << 1) ^ (((word & 0x80808080) >> 7) * 0x1b)) +#define Mul3(word) (Mul2(word) ^ word) +#define Mul4(word) (Mul2(Mul2(word))) +#define Mul8(word) (Mul2(Mul2(Mul2(word)))) +#define Mul9(word) (Mul8(word) ^ word) +#define MulB(word) (Mul8(word) ^ Mul3(word)) +#define MulD(word) (Mul8(word) ^ Mul4(word) ^ word) +#define MulE(word) (Mul8(word) ^ Mul4(word) ^ Mul2(word)) + +//32 bit Galois Multiplication (generates bigger code than Macros) +/*static DWORD Mul(DWORD x, DWORD y) +{ + DWORD result = x, yTemp = y, log2; + + if (!y) return 0; + + for (log2 = 0; yTemp >>= 1; log2++ ) + { + result = Mul2(result); + } + + return result ^ Mul(x, y - (1 << log2)); +}*/ + + +void MixColumnsR(BYTE *restrict state) +{ + uint_fast8_t i = 0; + for (; i < AES_BLOCK_WORDS; i++) + { + #if defined(_CRYPTO_OPENSSL) && defined(_OPENSSL_SOFTWARE) && defined(_USE_AES_FROM_OPENSSL) //Always byte swap regardless of endianess + DWORD word = BS32(((DWORD *) state)[i]); + ((DWORD *) state)[i] = BS32(MulE(word) ^ ROR32(MulB(word), 8) ^ ROR32(MulD(word), 16) ^ ROR32(Mul9(word), 24)); + #else + DWORD word = LE32(((DWORD *) state)[i]); + ((DWORD *) state)[i] = LE32(MulE(word) ^ ROR32(MulB(word), 8) ^ ROR32(MulD(word), 16) ^ ROR32(Mul9(word), 24)); + #endif + } +} + + +static DWORD SubDword(DWORD v) +{ + BYTE *b = (BYTE *)&v; + uint_fast8_t i = 0; + + for (; i < sizeof(DWORD); i++) b[i] = SBox[b[i]]; + + return v; +} + + +void AesInitKey(AesCtx *Ctx, const BYTE *Key, int_fast8_t IsV6, int RijndaelKeyBytes) +{ + int RijndaelKeyDwords = RijndaelKeyBytes / sizeof(DWORD); + Ctx->rounds = (uint_fast8_t)(RijndaelKeyDwords + 6); + + static const DWORD RCon[] = { + 0x00000000, 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, + 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000 }; + + uint_fast8_t i; + DWORD temp; + + memcpy(Ctx->Key, Key, RijndaelKeyBytes); + + for ( i = RijndaelKeyDwords; i < ( Ctx->rounds + 1 ) << 2; i++ ) + { + temp = Ctx->Key[ i - 1 ]; + + if ( ( i % RijndaelKeyDwords ) == 0 ) + temp = BE32( SubDword( ROR32( BE32(temp), 24) ) ^ RCon[ i / RijndaelKeyDwords ] ); + + Ctx->Key[ i ] = Ctx->Key[ i - RijndaelKeyDwords ] ^ temp; + } + + if ( IsV6 ) + { + BYTE *_p = (BYTE *)Ctx->Key; + + _p[ 4 * 16 ] ^= 0x73; + _p[ 6 * 16 ] ^= 0x09; + _p[ 8 * 16 ] ^= 0xE4; + } +} + + +#if !defined(_CRYPTO_OPENSSL) || !defined(_USE_AES_FROM_OPENSSL) || defined(_OPENSSL_SOFTWARE) +static void SubBytes(BYTE *block) +{ + uint_fast8_t i; + + for (i = 0; i < AES_BLOCK_BYTES; i++) + block[i] = SBox[ block[i] ]; +} + + +static void ShiftRows(BYTE *state) +{ + BYTE bIn[AES_BLOCK_BYTES]; + uint_fast8_t i; + + memcpy(bIn, state, AES_BLOCK_BYTES); + for (i = 0; i < AES_BLOCK_BYTES; i++) + { + state[i] = bIn[(i + ((i & 3) << 2)) & 0xf]; + } +}; + + +static void MixColumns(BYTE *state) +{ + uint_fast8_t i = 0; + for (; i < AES_BLOCK_WORDS; i++) + { + DWORD word = LE32(((DWORD *) state)[i]); + ((DWORD *) state)[i] = LE32(Mul2(word) ^ ROR32(Mul3(word), 8) ^ ROR32(word, 16) ^ ROR32(word, 24)); + } +} + + +void AesEncryptBlock(const AesCtx *const Ctx, BYTE *block) +{ + uint_fast8_t i; + + for ( i = 0 ;; i += 4 ) + { + AddRoundKey(block, &Ctx->Key[ i ]); + SubBytes(block); + ShiftRows(block); + + if ( i >= ( Ctx->rounds - 1 ) << 2 ) break; + + MixColumns(block); + } + + AddRoundKey(block, &Ctx->Key[ Ctx->rounds << 2 ]); +} + + +void AesCmacV4(BYTE *Message, size_t MessageSize, BYTE *MacOut) +{ + size_t i; + BYTE mac[AES_BLOCK_BYTES]; + AesCtx Ctx; + + AesInitKey(&Ctx, AesKeyV4, FALSE, V4_KEY_BYTES); + + memset(mac, 0, sizeof(mac)); + memset(Message + MessageSize, 0, AES_BLOCK_BYTES); + Message[MessageSize] = 0x80; + + for (i = 0; i <= MessageSize; i += AES_BLOCK_BYTES) + { + XorBlock(Message + i, mac); + AesEncryptBlock(&Ctx, mac); + } + + memcpy(MacOut, mac, AES_BLOCK_BYTES); +} +#endif + +#if !defined(_CRYPTO_OPENSSL) || !defined(_USE_AES_FROM_OPENSSL) + +static const BYTE SBoxR[] = { + 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, + 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, + 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, 0x54, 0x7B, 0x94, 0x32, + 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, + 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, + 0x6D, 0x8B, 0xD1, 0x25, 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, + 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, 0x6C, 0x70, 0x48, 0x50, + 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, + 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, + 0xB8, 0xB3, 0x45, 0x06, 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, + 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, 0x3A, 0x91, 0x11, 0x41, + 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, + 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, + 0x1C, 0x75, 0xDF, 0x6E, 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, + 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, 0xFC, 0x56, 0x3E, 0x4B, + 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, + 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, + 0x27, 0x80, 0xEC, 0x5F, 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, + 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, 0xA0, 0xE0, 0x3B, 0x4D, + 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, + 0x55, 0x21, 0x0C, 0x7D +}; + + +static void ShiftRowsR(BYTE *state) +{ + BYTE b[AES_BLOCK_BYTES]; + uint_fast8_t i; + + memcpy(b, state, AES_BLOCK_BYTES); + + for (i = 0; i < AES_BLOCK_BYTES; i++) + state[i] = b[(i - ((i & 0x3) << 2)) & 0xf]; +} + + +static void SubBytesR(BYTE *block) +{ + uint_fast8_t i; + + for (i = 0; i < AES_BLOCK_BYTES; i++) + block[i] = SBoxR[ block[i] ]; +} + + +void AesEncryptCbc(const AesCtx *const Ctx, BYTE *restrict iv, BYTE *restrict data, size_t *restrict len) +{ + // Pad up to blocksize inclusive + size_t i; + uint_fast8_t pad = (~*len & (AES_BLOCK_BYTES - 1)) + 1; + + #if defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ == 8) // gcc 4.8 memset bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56977 + for (i = 0; i < pad; i++) data[*len + i] = pad; + #else + memset(data + *len, pad, pad); + #endif + *len += pad; + + if ( iv ) XorBlock(iv, data); + AesEncryptBlock(Ctx, data); + + for (i = *len - AES_BLOCK_BYTES; i; i -= AES_BLOCK_BYTES) + { + XorBlock(data, data + AES_BLOCK_BYTES); + data += AES_BLOCK_BYTES; + AesEncryptBlock(Ctx, data); + } +} + + +void AesDecryptBlock(const AesCtx *const Ctx, BYTE *block) +{ + uint_fast8_t i; + + AddRoundKey(block, &Ctx->Key[ Ctx->rounds << 2 ]); + + for ( i = ( Ctx->rounds - 1 ) << 2 ;; i -= 4 ) + { + ShiftRowsR(block); + SubBytesR(block); + AddRoundKey(block, &Ctx->Key[ i ]); + + if ( i == 0 ) break; + + MixColumnsR(block); + } +} + + +void AesDecryptCbc(const AesCtx *const Ctx, BYTE *iv, BYTE *data, size_t len) +{ + BYTE *cc; + + for (cc = data + len - AES_BLOCK_BYTES; cc > data; cc -= AES_BLOCK_BYTES) + { + AesDecryptBlock(Ctx, cc); + XorBlock(cc - AES_BLOCK_BYTES, cc); + } + + AesDecryptBlock(Ctx, cc); + if ( iv ) XorBlock(iv, cc); +} +#endif // _CRYPTO_OPENSSL || OPENSSL_VERSION_NUMBER < 0x10000000L +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include +#include +#include +#include +#include +#if !defined(_WIN32) +#include +#endif + +#include "output.h" +#include "crypto.h" +#include "endian.h" +#include "kms.h" +#include "shared_globals.h" +#include "helpers.h" + +#define FRIENDLY_NAME_WINDOWS "Windows" +#define FRIENDLY_NAME_OFFICE2010 "Office 2010" +#define FRIENDLY_NAME_OFFICE2013 "Office" + +#ifndef NO_BASIC_PRODUCT_LIST +// Do not change the order of this list. Append items as necessary +const KmsIdList ProductList[] = { + /* 000 */ { { 0x212a64dc, 0x43b1, 0x4d3d, { 0xa3, 0x0c, 0x2f, 0xc6, 0x9d, 0x20, 0x95, 0xc6 } } /*"212a64dc-43b1-4d3d-a30c-2fc69d2095c6"*/, "Vista", EPID_WINDOWS, 4, 25 }, + /* 001 */ { { 0x7fde5219, 0xfbfa, 0x484a, { 0x82, 0xc9, 0x34, 0xd1, 0xad, 0x53, 0xe8, 0x56 } } /*"7fde5219-fbfa-484a-82c9-34d1ad53e856"*/, "Windows 7", EPID_WINDOWS, 4, 25 }, + /* 002 */ { { 0x3c40b358, 0x5948, 0x45af, { 0x92, 0x3b, 0x53, 0xd2, 0x1f, 0xcc, 0x7e, 0x79 } } /*"3c40b358-5948-45af-923b-53d21fcc7e79"*/, "Windows 8 VL", EPID_WINDOWS, 5, 25 }, + /* 003 */ { { 0x5f94a0bb, 0xd5a0, 0x4081, { 0xa6, 0x85, 0x58, 0x19, 0x41, 0x8b, 0x2f, 0xe0 } } /*"5f94a0bb-d5a0-4081-a685-5819418b2fe0"*/, "Windows Preview", EPID_WINDOWS, 6, 25 }, + /* 004 */ { { 0xbbb97b3b, 0x8ca4, 0x4a28, { 0x97, 0x17, 0x89, 0xfa, 0xbd, 0x42, 0xc4, 0xac } } /*"bbb97b3b-8ca4-4a28-9717-89fabd42c4ac"*/, "Windows 8 Retail", EPID_WINDOWS, 5, 25 }, + /* 005 */ { { 0xcb8fc780, 0x2c05, 0x495a, { 0x97, 0x10, 0x85, 0xaf, 0xff, 0xc9, 0x04, 0xd7 } } /*"cb8fc780-2c05-495a-9710-85afffc904d7"*/, "Windows 8.1 VL", EPID_WINDOWS, 6, 25 }, + /* 006 */ { { 0x6d646890, 0x3606, 0x461a, { 0x86, 0xab, 0x59, 0x8b, 0xb8, 0x4a, 0xce, 0x82 } } /*"6d646890-3606-461a-86ab-598bb84ace82"*/, "Windows 8.1 Retail", EPID_WINDOWS, 6, 25 }, + /* 007 */ { { 0x33e156e4, 0xb76f, 0x4a52, { 0x9f, 0x91, 0xf6, 0x41, 0xdd, 0x95, 0xac, 0x48 } } /*"33e156e4-b76f-4a52-9f91-f641dd95ac48"*/, "Windows 2008 A", EPID_WINDOWS, 4, 5 }, + /* 008 */ { { 0x8fe53387, 0x3087, 0x4447, { 0x89, 0x85, 0xf7, 0x51, 0x32, 0x21, 0x5a, 0xc9 } } /*"8fe53387-3087-4447-8985-f75132215ac9"*/, "Windows 2008 B", EPID_WINDOWS, 4, 5 }, + /* 009 */ { { 0x8a21fdf3, 0xcbc5, 0x44eb, { 0x83, 0xf3, 0xfe, 0x28, 0x4e, 0x66, 0x80, 0xa7 } } /*"8a21fdf3-cbc5-44eb-83f3-fe284e6680a7"*/, "Windows 2008 C", EPID_WINDOWS, 4, 5 }, + /* 010 */ { { 0x0fc6ccaf, 0xff0e, 0x4fae, { 0x9d, 0x08, 0x43, 0x70, 0x78, 0x5b, 0xf7, 0xed } } /*"0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed"*/, "Windows 2008 R2 A", EPID_WINDOWS, 4, 5 }, + /* 011 */ { { 0xca87f5b6, 0xcd46, 0x40c0, { 0xb0, 0x6d, 0x8e, 0xcd, 0x57, 0xa4, 0x37, 0x3f } } /*"ca87f5b6-cd46-40c0-b06d-8ecd57a4373f"*/, "Windows 2008 R2 B", EPID_WINDOWS, 4, 5 }, + /* 012 */ { { 0xb2ca2689, 0xa9a8, 0x42d7, { 0x93, 0x8d, 0xcf, 0x8e, 0x9f, 0x20, 0x19, 0x58 } } /*"b2ca2689-a9a8-42d7-938d-cf8e9f201958"*/, "Windows 2008 R2 C", EPID_WINDOWS, 4, 5 }, + /* 013 */ { { 0x8665cb71, 0x468c, 0x4aa3, { 0xa3, 0x37, 0xcb, 0x9b, 0xc9, 0xd5, 0xea, 0xac } } /*"8665cb71-468c-4aa3-a337-cb9bc9d5eaac"*/, "Windows 2012", EPID_WINDOWS, 5, 5 }, + /* 014 */ { { 0x8456EFD3, 0x0C04, 0x4089, { 0x87, 0x40, 0x5b, 0x72, 0x38, 0x53, 0x5a, 0x65 } } /*"8456EFD3-0C04-4089-8740-5B7238535A65"*/, "Windows 2012 R2", EPID_WINDOWS, 6, 5 }, + /* 015 */ { { 0xe85af946, 0x2e25, 0x47b7, { 0x83, 0xe1, 0xbe, 0xbc, 0xeb, 0xea, 0xc6, 0x11 } } /*"e85af946-2e25-47b7-83e1-bebcebeac611"*/, "Office 2010", EPID_OFFICE2010, 4, 5 }, + /* 016 */ { { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } /*"e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0"*/, "Office 2013", EPID_OFFICE2013, 6, 5 }, + /* 017 */ { { 0x6d5f5270, 0x31ac, 0x433e, { 0xb9, 0x0a, 0x39, 0x89, 0x29, 0x23, 0xc6, 0x57 } } /*"6d5f5270-31ac-433e-b90a-39892923c657"*/, "Windows Server Preview", EPID_WINDOWS, 6, 5 }, + /* 018 */ { { 0x85b5f61b, 0x320b, 0x4be3, { 0x81, 0x4a, 0xb7, 0x6b, 0x2b, 0xfa, 0xfc, 0x82 } } /*"85b5f61b-320b-4be3-814a-b76b2bfafc82"*/, "Office 2016", EPID_OFFICE2013, 6, 5 }, + /* 019 */ { { 0x58e2134f, 0x8e11, 0x4d17, { 0x9c, 0xb2, 0x91, 0x06, 0x9c, 0x15, 0x11, 0x48 } } /*"58e2134f-8e11-4d17-9cb2-91069c151148"*/, "Windows 10 VL", EPID_WINDOWS, 6, 25 }, + /* 020 */ { { 0xe1c51358, 0xfe3e, 0x4203, { 0xa4, 0xa2, 0x3b, 0x6b, 0x20, 0xc9, 0x73, 0x4e } } /*"e1c51358-fe3e-4203-a4a2-3b6b20c9734e"*/, "Windows 10 Retail", EPID_WINDOWS, 6, 25 }, + /* 021 */ { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 } +}; +#endif + +// Application ID is used by KMS server to count KeyManagementServiceCurrentCount +// Do not change the order of this list. Append items as necessary +const KmsIdList AppList[] = { + /* 000 */ { { 0x55c92734, 0xd682, 0x4d71, { 0x98, 0x3e, 0xd6, 0xec, 0x3f, 0x16, 0x05, 0x9f } } /*"55C92734-D682-4D71-983E-D6EC3F16059F"*/, FRIENDLY_NAME_WINDOWS, EPID_WINDOWS, 0, 0}, + /* 001 */ { { 0x59A52881, 0xa989, 0x479d, { 0xaf, 0x46, 0xf2, 0x75, 0xc6, 0x37, 0x06, 0x63 } } /*"59A52881-A989-479D-AF46-F275C6370663"*/, FRIENDLY_NAME_OFFICE2010, EPID_OFFICE2010, 0, 0}, + /* 002 */ { { 0x0FF1CE15, 0xA989, 0x479D, { 0xaf, 0x46, 0xf2, 0x75, 0xc6, 0x37, 0x06, 0x63 } } /*"0FF1CE15-A989-479D-AF46-F275C6370663"*/, FRIENDLY_NAME_OFFICE2013, EPID_OFFICE2013, 0, 0}, + /* 003 */ { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 } +}; + +#ifndef NO_EXTENDED_PRODUCT_LIST +const KmsIdList ExtendedProductList [] = { + + // Windows Server + + { { 0xad2542d4, 0x9154, 0x4c6d, { 0x8a, 0x44, 0x30, 0xf1, 0x1e, 0xe9, 0x69, 0x89, } } /*ad2542d4-9154-4c6d-8a44-30f11ee96989*/, "Windows Server 2008 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, + { { 0x2401e3d0, 0xc50a, 0x4b58, { 0x87, 0xb2, 0x7e, 0x79, 0x4b, 0x7d, 0x26, 0x07, } } /*2401e3d0-c50a-4b58-87b2-7e794b7d2607*/, "Windows Server 2008 Standard V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, + { { 0x68b6e220, 0xcf09, 0x466b, { 0x92, 0xd3, 0x45, 0xcd, 0x96, 0x4b, 0x95, 0x09, } } /*68b6e220-cf09-466b-92d3-45cd964b9509*/, "Windows Server 2008 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + { { 0xfd09ef77, 0x5647, 0x4eff, { 0x80, 0x9c, 0xaf, 0x2b, 0x64, 0x65, 0x9a, 0x45, } } /*fd09ef77-5647-4eff-809c-af2b64659a45*/, "Windows Server 2008 Datacenter V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + { { 0xc1af4d90, 0xd1bc, 0x44ca, { 0x85, 0xd4, 0x00, 0x3b, 0xa3, 0x3d, 0xb3, 0xb9, } } /*c1af4d90-d1bc-44ca-85d4-003ba33db3b9*/, "Windows Server 2008 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B }, + { { 0x8198490a, 0xadd0, 0x47b2, { 0xb3, 0xba, 0x31, 0x6b, 0x12, 0xd6, 0x47, 0xb4, } } /*8198490a-add0-47b2-b3ba-316b12d647b4*/, "Windows Server 2008 Enterprise V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B }, + { { 0xddfa9f7c, 0xf09e, 0x40b9, { 0x8c, 0x1a, 0xbe, 0x87, 0x7a, 0x9a, 0x7f, 0x4b, } } /*ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b*/, "Windows Server 2008 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, + { { 0x7afb1156, 0x2c1d, 0x40fc, { 0xb2, 0x60, 0xaa, 0xb7, 0x44, 0x2b, 0x62, 0xfe, } } /*7afb1156-2c1d-40fc-b260-aab7442b62fe*/, "Windows Server 2008 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + { { 0x68531fb9, 0x5511, 0x4989, { 0x97, 0xbe, 0xd1, 0x1a, 0x0f, 0x55, 0x63, 0x3f, } } /*68531fb9-5511-4989-97be-d11a0f55633f*/, "Windows Server 2008 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A }, + { { 0x7482e61b, 0xc589, 0x4b7f, { 0x8e, 0xcc, 0x46, 0xd4, 0x55, 0xac, 0x3b, 0x87, } } /*7482e61b-c589-4b7f-8ecc-46d455ac3b87*/, "Windows Server 2008 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C }, + { { 0x620e2b3d, 0x09e7, 0x42fd, { 0x80, 0x2a, 0x17, 0xa1, 0x36, 0x52, 0xfe, 0x7a, } } /*620e2b3d-09e7-42fd-802a-17a13652fe7a*/, "Windows Server 2008 R2 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2B }, + { { 0xa78b8bd9, 0x8017, 0x4df5, { 0xb8, 0x6a, 0x09, 0xf7, 0x56, 0xaf, 0xfa, 0x7c, } } /*a78b8bd9-8017-4df5-b86a-09f756affa7c*/, "Windows Server 2008 R2 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A }, + { { 0xcda18cf3, 0xc196, 0x46ad, { 0xb2, 0x89, 0x60, 0xc0, 0x72, 0x86, 0x99, 0x94, } } /*cda18cf3-c196-46ad-b289-60c072869994*/, "Windows Server 2008 R2 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C }, + { { 0xd3643d60, 0x0c42, 0x412d, { 0xa7, 0xd6, 0x52, 0xe6, 0x63, 0x53, 0x27, 0xf6, } } /*d3643d60-0c42-412d-a7d6-52e6635327f6*/, "Windows Server 2012 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0xf0f5ec41, 0x0d55, 0x4732, { 0xaf, 0x02, 0x44, 0x0a, 0x44, 0xa3, 0xcf, 0x0f, } } /*f0f5ec41-0d55-4732-af02-440a44a3cf0f*/, "Windows Server 2012 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0x95fd1c83, 0x7df5, 0x494a, { 0xbe, 0x8b, 0x13, 0x00, 0xe1, 0xc9, 0xd1, 0xcd, } } /*95fd1c83-7df5-494a-be8b-1300e1c9d1cd*/, "Windows Server 2012 MultiPoint Premium", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0x7d5486c7, 0xe120, 0x4771, { 0xb7, 0xf1, 0x7b, 0x56, 0xc6, 0xd3, 0x17, 0x0c, } } /*7d5486c7-e120-4771-b7f1-7b56c6d3170c*/, "Windows Server 2012 MultiPoint Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0x00091344, 0x1ea4, 0x4f37, { 0xb7, 0x89, 0x01, 0x75, 0x0b, 0xa6, 0x98, 0x8c, } } /*00091344-1ea4-4f37-b789-01750ba6988c*/, "Windows Server 2012 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0xb3ca044e, 0xa358, 0x4d68, { 0x98, 0x83, 0xaa, 0xa2, 0x94, 0x1a, 0xca, 0x99, } } /*b3ca044e-a358-4d68-9883-aaa2941aca99*/, "Windows Server 2012 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0xb743a2be, 0x68d4, 0x4dd3, { 0xaf, 0x32, 0x92, 0x42, 0x5b, 0x7b, 0xb6, 0x23, } } /*b743a2be-68d4-4dd3-af32-92425b7bb623*/, "Windows Server 2012 R2 Cloud Storage", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0x21db6ba4, 0x9a7b, 0x4a14, { 0x9e, 0x29, 0x64, 0xa6, 0x0c, 0x59, 0x30, 0x1d, } } /*21db6ba4-9a7b-4a14-9e29-64a60c59301d*/, "Windows Server 2012 R2 Essentials", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0xba947c44, 0xd19d, 0x4786, { 0xb6, 0xae, 0x22, 0x77, 0x0b, 0xc9, 0x4c, 0x54, } } /*ba947c44-d19d-4786-b6ae-22770bc94c54*/, "Windows Server 2016 Datacenter Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_SRV_BETA }, + + + // Windows 10 Preview +# ifdef INCLUDE_BETAS + { { 0x6496e59d, 0x89dc, 0x49eb, { 0xa3, 0x53, 0x09, 0xce, 0xb9, 0x40, 0x48, 0x45, } } /*6496e59d-89dc-49eb-a353-09ceb9404845*/, "Windows 10 Core Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0xa4383e6b, 0xdada, 0x423d, { 0xa4, 0x3d, 0xf2, 0x56, 0x78, 0x42, 0x96, 0x76, } } /*a4383e6b-dada-423d-a43d-f25678429676*/, "Windows 10 Professional Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0xcf59a07b, 0x1a2a, 0x4be0, { 0xbf, 0xe0, 0x42, 0x3b, 0x58, 0x23, 0xe6, 0x63, } } /*cf59a07b-1a2a-4be0-bfe0-423b5823e663*/, "Windows 10 Professional WMC Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0xcde952c7, 0x2f96, 0x4d9d, { 0x8f, 0x2b, 0x2d, 0x34, 0x9f, 0x64, 0xfc, 0x51, } } /*cde952c7-2f96-4d9d-8f2b-2d349f64fc51*/, "Windows 10 Enterprise Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, +# endif + + + // Windows 10 + + { { 0x73111121, 0x5638, 0x40f6, { 0xbc, 0x11, 0xf1, 0xd7, 0xb0, 0xd6, 0x43, 0x00, } } /*73111121-5638-40f6-bc11-f1d7b0d64300*/, "Windows 10 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0xe272e3e2, 0x732f, 0x4c65, { 0xa8, 0xf0, 0x48, 0x47, 0x47, 0xd0, 0xd9, 0x47, } } /*e272e3e2-732f-4c65-a8f0-484747d0d947*/, "Windows 10 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x7b51a46c, 0x0c04, 0x4e8f, { 0x9a, 0xf4, 0x84, 0x96, 0xcc, 0xa9, 0x0d, 0x5e, } } /*7b51a46c-0c04-4e8f-9af4-8496cca90d5e*/, "Windows 10 Enterprise LTSB", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x87b838b7, 0x41b6, 0x4590, { 0x83, 0x18, 0x57, 0x97, 0x95, 0x1d, 0x85, 0x29, } } /*87b838b7-41b6-4590-8318-5797951d8529*/, "Windows 10 Enterprise LTSB N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0xe0c42288, 0x980c, 0x4788, { 0xa0, 0x14, 0xc0, 0x80, 0xd2, 0xe1, 0x92, 0x6e, } } /*e0c42288-980c-4788-a014-c080d2e1926e*/, "Windows 10 Education", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x3c102355, 0xd027, 0x42c6, { 0xad, 0x23, 0x2e, 0x7e, 0xf8, 0xa0, 0x25, 0x85, } } /*3c102355-d027-42c6-ad23-2e7ef8a02585*/, "Windows 10 Education N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x2de67392, 0xb7a7, 0x462a, { 0xb1, 0xca, 0x10, 0x8d, 0xd1, 0x89, 0xf5, 0x88, } } /*2de67392-b7a7-462a-b1ca-108dd189f588*/, "Windows 10 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0xa80b5abf, 0x75ad, 0x428b, { 0xb0, 0x5d, 0xa4, 0x7d, 0x2d, 0xff, 0xee, 0xbf, } } /*a80b5abf-76ad-428b-b05d-a47d2dffeebf*/, "Windows 10 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x58e97c99, 0xf377, 0x4ef1, { 0x81, 0xd5, 0x4a, 0xd5, 0x52, 0x2b, 0x5f, 0xd8, } } /*58e97c99-f377-4ef1-81d5-4ad5522b5fd8*/, "Windows 10 Home", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + { { 0x7b9e1751, 0xa8da, 0x4f75, { 0x95, 0x60, 0x5f, 0xad, 0xfe, 0x3d, 0x8e, 0x38, } } /*7b9e1751-a8da-4f75-9560-5fadfe3d8e38*/, "Windows 10 Home N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + { { 0xcd918a57, 0xa41b, 0x4c82, { 0x8d, 0xce, 0x1a, 0x53, 0x8e, 0x22, 0x1a, 0x83, } } /*cd918a57-a41b-4c82-8dce-1a538e221a83*/, "Windows 10 Home Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + { { 0xa9107544, 0xf4a0, 0x4053, { 0xa9, 0x6a, 0x14, 0x79, 0xab, 0xde, 0xf9, 0x12, } } /*a9107544-f4a0-4053-a96a-1479abdef912*/, "Windows 10 Home Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + + + // Windows 8.x + +# ifdef INCLUDE_BETAS + { { 0x2B9C337F, 0x7A1D, 0x4271, { 0x90, 0xA3, 0xC6, 0x85, 0x5A, 0x2B, 0x8A, 0x1C, } } /*2B9C337F-7A1D-4271-90A3-C6855A2B8A1C*/, "Windows 8.x Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0x631EAD72, 0xA8AB, 0x4DF8, { 0xBB, 0xDF, 0x37, 0x20, 0x29, 0x98, 0x9B, 0xDD, } } /*631EAD72-A8AB-4DF8-BBDF-372029989BDD*/, "Windows 8.x Preview ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, +# endif + { { 0x81671aaf, 0x79d1, 0x4eb1, { 0xb0, 0x04, 0x8c, 0xbb, 0xe1, 0x73, 0xaf, 0xea, } } /*81671aaf-79d1-4eb1-b004-8cbbe173afea*/, "Windows 8.1 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0x113e705c, 0xfa49, 0x48a4, { 0xbe, 0xea, 0x7d, 0xd8, 0x79, 0xb4, 0x6b, 0x14, } } /*113e705c-fa49-48a4-beea-7dd879b46b14*/, "Windows 8.1 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0x096ce63d, 0x4fac, 0x48a9, { 0x82, 0xa9, 0x61, 0xae, 0x9e, 0x80, 0x0e, 0x5f, } } /*096ce63d-4fac-48a9-82a9-61ae9e800e5f*/, "Windows 8.1 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xc06b6981, 0xd7fd, 0x4a35, { 0xb7, 0xb4, 0x05, 0x47, 0x42, 0xb7, 0xaf, 0x67, } } /*c06b6981-d7fd-4a35-b7b4-054742b7af67*/, "Windows 8.1 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0x7476d79f, 0x8e48, 0x49b4, { 0xab, 0x63, 0x4d, 0x0b, 0x81, 0x3a, 0x16, 0xe4, } } /*7476d79f-8e48-49b4-ab63-4d0b813a16e4*/, "Windows 8.1 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xfe1c3238, 0x432a, 0x43a1, { 0x8e, 0x25, 0x97, 0xe7, 0xd1, 0xef, 0x10, 0xf3, } } /*fe1c3238-432a-43a1-8e25-97e7d1ef10f3*/, "Windows 8.1 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0x78558a64, 0xdc19, 0x43fe, { 0xa0, 0xd0, 0x80, 0x75, 0xb2, 0xa3, 0x70, 0xa3, } } /*78558a64-dc19-43fe-a0d0-8075b2a370a3*/, "Windows 8.1 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xffee456a, 0xcd87, 0x4390, { 0x8e, 0x07, 0x16, 0x14, 0x6c, 0x67, 0x2f, 0xd0, } } /*ffee456a-cd87-4390-8e07-16146c672fd0*/, "Windows 8.1 Core ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xc72c6a1d, 0xf252, 0x4e7e, { 0xbd, 0xd1, 0x3f, 0xca, 0x34, 0x2a, 0xcb, 0x35, } } /*c72c6a1d-f252-4e7e-bdd1-3fca342acb35*/, "Windows 8.1 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xdb78b74f, 0xef1c, 0x4892, { 0xab, 0xfe, 0x1e, 0x66, 0xb8, 0x23, 0x1d, 0xf6, } } /*db78b74f-ef1c-4892-abfe-1e66b8231df6*/, "Windows 8.1 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xe9942b32, 0x2e55, 0x4197, { 0xb0, 0xbd, 0x5f, 0xf5, 0x8c, 0xba, 0x88, 0x60, } } /*e9942b32-2e55-4197-b0bd-5ff58cba8860*/, "Windows 8.1 Core Connected", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xc6ddecd6, 0x2354, 0x4c19, { 0x90, 0x9b, 0x30, 0x6a, 0x30, 0x58, 0x48, 0x4e, } } /*c6ddecd6-2354-4c19-909b-306a3058484e*/, "Windows 8.1 Core Connected N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xb8f5e3a3, 0xed33, 0x4608, { 0x81, 0xe1, 0x37, 0xd6, 0xc9, 0xdc, 0xfd, 0x9c, } } /*b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c*/, "Windows 8.1 Core Connected Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xba998212, 0x460a, 0x44db, { 0xbf, 0xb5, 0x71, 0xbf, 0x09, 0xd1, 0xc6, 0x8b, } } /*ba998212-460a-44db-bfb5-71bf09d1c68b*/, "Windows 8.1 Core Connected Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xe58d87b5, 0x8126, 0x4580, { 0x80, 0xfb, 0x86, 0x1b, 0x22, 0xf7, 0x92, 0x96, } } /*e58d87b5-8126-4580-80fb-861b22f79296*/, "Windows 8.1 Professional Student", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xcab491c7, 0xa918, 0x4f60, { 0xb5, 0x02, 0xda, 0xb7, 0x5e, 0x33, 0x4f, 0x40, } } /*cab491c7-a918-4f60-b502-dab75e334f40*/, "Windows 8.1 Professional Student N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xa00018a3, 0xf20f, 0x4632, { 0xbf, 0x7c, 0x8d, 0xaa, 0x53, 0x51, 0xc9, 0x14, } } /*a00018a3-f20f-4632-bf7c-8daa5351c914*/, "Windows 8 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0xa98bcd6d, 0x5343, 0x4603, { 0x8a, 0xfe, 0x59, 0x08, 0xe4, 0x61, 0x11, 0x12, } } /*a98bcd6d-5343-4603-8afe-5908e4611112*/, "Windows 8 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0xebf245c1, 0x29a8, 0x4daf, { 0x9c, 0xb1, 0x38, 0xdf, 0xc6, 0x08, 0xa8, 0xc8, } } /*ebf245c1-29a8-4daf-9cb1-38dfc608a8c8*/, "Windows 8 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0x458e1bec, 0x837a, 0x45f6, { 0xb9, 0xd5, 0x92, 0x5e, 0xd5, 0xd2, 0x99, 0xde, } } /*458e1bec-837a-45f6-b9d5-925ed5d299de*/, "Windows 8 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0xe14997e7, 0x800a, 0x4cf7, { 0xad, 0x10, 0xde, 0x4b, 0x45, 0xb5, 0x78, 0xdb, } } /*e14997e7-800a-4cf7-ad10-de4b45b578db*/, "Windows 8 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0xc04ed6bf, 0x55c8, 0x4b47, { 0x9f, 0x8e, 0x5a, 0x1f, 0x31, 0xce, 0xee, 0x60, } } /*c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60*/, "Windows 8 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0x197390a0, 0x65f6, 0x4a95, { 0xbd, 0xc4, 0x55, 0xd5, 0x8a, 0x3b, 0x02, 0x53, } } /*197390a0-65f6-4a95-bdc4-55d58a3b0253*/, "Windows 8 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0x9d5584a2, 0x2d85, 0x419a, { 0x98, 0x2c, 0xa0, 0x08, 0x88, 0xbb, 0x9d, 0xdf, } } /*9d5584a2-2d85-419a-982c-a00888bb9ddf*/, "Windows 8 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0x8860fcd4, 0xa77b, 0x4a20, { 0x90, 0x45, 0xa1, 0x50, 0xff, 0x11, 0xd6, 0x09, } } /*8860fcd4-a77b-4a20-9045-a150ff11d609*/, "Windows 8 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + + + // Windows 7 + + { { 0xae2ee509, 0x1b34, 0x41c0, { 0xac, 0xb7, 0x6d, 0x46, 0x50, 0x16, 0x89, 0x15, } } /*ae2ee509-1b34-41c0-acb7-6d4650168915*/, "Windows 7 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x1cb6d605, 0x11b3, 0x4e14, { 0xbb, 0x30, 0xda, 0x91, 0xc8, 0xe3, 0x98, 0x3a, } } /*1cb6d605-11b3-4e14-bb30-da91c8e3983a*/, "Windows 7 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0xb92e9980, 0xb9d5, 0x4821, { 0x9c, 0x94, 0x14, 0x0f, 0x63, 0x2f, 0x63, 0x12, } } /*b92e9980-b9d5-4821-9c94-140f632f6312*/, "Windows 7 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x54a09a0d, 0xd57b, 0x4c10, { 0x8b, 0x69, 0xa8, 0x42, 0xd6, 0x59, 0x0a, 0xd5, } } /*54a09a0d-d57b-4c10-8b69-a842d6590ad5*/, "Windows 7 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + + + // Windows Vista + + { { 0xcfd8ff08, 0xc0d7, 0x452b, { 0x9f, 0x60, 0xef, 0x5c, 0x70, 0xc3, 0x20, 0x94, } } /*cfd8ff08-c0d7-452b-9f60-ef5c70c32094*/, "Windows Vista Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + { { 0xd4f54950, 0x26f2, 0x4fb4, { 0xba, 0x21, 0xff, 0xab, 0x16, 0xaf, 0xca, 0xde, } } /*d4f54950-26f2-4fb4-ba21-ffab16afcade*/, "Windows Vista Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + { { 0x4f3d1606, 0x3fea, 0x4c01, { 0xbe, 0x3c, 0x8d, 0x67, 0x1c, 0x40, 0x1e, 0x3b, } } /*4f3d1606-3fea-4c01-be3c-8d671c401e3b*/, "Windows Vista Business", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + { { 0x2c682dc2, 0x8b68, 0x4f63, { 0xa1, 0x65, 0xae, 0x29, 0x1d, 0x4c, 0xf1, 0x38, } } /*2c682dc2-8b68-4f63-a165-ae291d4cf138*/, "Windows Vista Business N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + + + // Windows Embedded + + { { 0xaa6dd3aa, 0xc2b4, 0x40e2, { 0xa5, 0x44, 0xa6, 0xbb, 0xb3, 0xf5, 0xc3, 0x95, } } /*aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395*/, "Windows ThinPC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0xdb537896, 0x376f, 0x48ae, { 0xa4, 0x92, 0x53, 0xd0, 0x54, 0x77, 0x73, 0xd0, } } /*db537896-376f-48ae-a492-53d0547773d0*/, "Windows Embedded POSReady 7", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x0ab82d54, 0x47f4, 0x4acb, { 0x81, 0x8c, 0xcc, 0x5b, 0xf0, 0xec, 0xb6, 0x49, } } /*0ab82d54-47f4-4acb-818c-cc5bf0ecb649*/, "Windows Embedded Industry 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xcd4e2d9f, 0x5059, 0x4a50, { 0xa9, 0x2d, 0x05, 0xd5, 0xbb, 0x12, 0x67, 0xc7, } } /*cd4e2d9f-5059-4a50-a92d-05d5bb1267c7*/, "Windows Embedded Industry E 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xf7e88590, 0xdfc7, 0x4c78, { 0xbc, 0xcb, 0x6f, 0x38, 0x65, 0xb9, 0x9d, 0x1a, } } /*f7e88590-dfc7-4c78-bccb-6f3865b99d1a*/, "Windows Embedded Industry A 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + + // Office 2010 + + { { 0x8ce7e872, 0x188c, 0x4b98, { 0x9d, 0x90, 0xf8, 0xf9, 0x0b, 0x7a, 0xad, 0x02, } } /*8ce7e872-188c-4b98-9d90-f8f90b7aad02*/, "Office Access 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xcee5d470, 0x6e3b, 0x4fcc, { 0x8c, 0x2b, 0xd1, 0x74, 0x28, 0x56, 0x8a, 0x9f, } } /*cee5d470-6e3b-4fcc-8c2b-d17428568a9f*/, "Office Excel 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x8947d0b8, 0xc33b, 0x43e1, { 0x8c, 0x56, 0x9b, 0x67, 0x4c, 0x05, 0x28, 0x32, } } /*8947d0b8-c33b-43e1-8c56-9b674c052832*/, "Office Groove 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xca6b6639, 0x4ad6, 0x40ae, { 0xa5, 0x75, 0x14, 0xde, 0xe0, 0x7f, 0x64, 0x30, } } /*ca6b6639-4ad6-40ae-a575-14dee07f6430*/, "Office InfoPath 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x09ed9640, 0xf020, 0x400a, { 0xac, 0xd8, 0xd7, 0xd8, 0x67, 0xdf, 0xd9, 0xc2, } } /*09ed9640-f020-400a-acd8-d7d867dfd9c2*/, "Office Mondo 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xef3d4e49, 0xa53d, 0x4d81, { 0xa2, 0xb1, 0x2c, 0xa6, 0xc2, 0x55, 0x6b, 0x2c, } } /*ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c*/, "Office Mondo 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xab586f5c, 0x5256, 0x4632, { 0x96, 0x2f, 0xfe, 0xfd, 0x8b, 0x49, 0xe6, 0xf4, } } /*ab586f5c-5256-4632-962f-fefd8b49e6f4*/, "Office OneNote 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xecb7c192, 0x73ab, 0x4ded, { 0xac, 0xf4, 0x23, 0x99, 0xb0, 0x95, 0xd0, 0xcc, } } /*ecb7c192-73ab-4ded-acf4-2399b095d0cc*/, "Office OutLook 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x45593b1d, 0xdfb1, 0x4e91, { 0xbb, 0xfb, 0x2d, 0x5d, 0x0c, 0xe2, 0x22, 0x7a, } } /*45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a*/, "Office PowerPoint 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xdf133ff7, 0xbf14, 0x4f95, { 0xaf, 0xe3, 0x7b, 0x48, 0xe7, 0xe3, 0x31, 0xef, } } /*df133ff7-bf14-4f95-afe3-7b48e7e331ef*/, "Office Project Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x5dc7bf61, 0x5ec9, 0x4996, { 0x9c, 0xcb, 0xdf, 0x80, 0x6a, 0x2d, 0x0e, 0xfe, } } /*5dc7bf61-5ec9-4996-9ccb-df806a2d0efe*/, "Office Project Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xb50c4f75, 0x599b, 0x43e8, { 0x8d, 0xcd, 0x10, 0x81, 0xa7, 0x96, 0x72, 0x41, } } /*b50c4f75-599b-43e8-8dcd-1081a7967241*/, "Office Publisher 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x92236105, 0xbb67, 0x494f, { 0x94, 0xc7, 0x7f, 0x7a, 0x60, 0x79, 0x29, 0xbd, } } /*92236105-bb67-494f-94c7-7f7a607929bd*/, "Office Visio Premium 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xe558389c, 0x83c3, 0x4b29, { 0xad, 0xfe, 0x5e, 0x4d, 0x7f, 0x46, 0xc3, 0x58, } } /*e558389c-83c3-4b29-adfe-5e4d7f46c358*/, "Office Visio Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x9ed833ff, 0x4f92, 0x4f36, { 0xb3, 0x70, 0x86, 0x83, 0xa4, 0xf1, 0x32, 0x75, } } /*9ed833ff-4f92-4f36-b370-8683a4f13275*/, "Office Visio Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x2d0882e7, 0xa4e7, 0x423b, { 0x8c, 0xcc, 0x70, 0xd9, 0x1e, 0x01, 0x58, 0xb1, } } /*2d0882e7-a4e7-423b-8ccc-70d91e0158b1*/, "Office Word 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x6f327760, 0x8c5c, 0x417c, { 0x9b, 0x61, 0x83, 0x6a, 0x98, 0x28, 0x7e, 0x0c, } } /*6f327760-8c5c-417c-9b61-836a98287e0c*/, "Office Professional Plus 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x9da2a678, 0xfb6b, 0x4e67, { 0xab, 0x84, 0x60, 0xdd, 0x6a, 0x9c, 0x81, 0x9a, } } /*9da2a678-fb6b-4e67-ab84-60dd6a9c819a*/, "Office Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xea509e87, 0x07a1, 0x4a45, { 0x9e, 0xdc, 0xeb, 0xa5, 0xa3, 0x9f, 0x36, 0xaf, } } /*ea509e87-07a1-4a45-9edc-eba5a39f36af*/, "Office Small Business Basics 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + + // Office 2013 + + { { 0x6ee7622c, 0x18d8, 0x4005, { 0x9f, 0xb7, 0x92, 0xdb, 0x64, 0x4a, 0x27, 0x9b, } } /*6ee7622c-18d8-4005-9fb7-92db644a279b*/, "Office Access 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xf7461d52, 0x7c2b, 0x43b2, { 0x87, 0x44, 0xea, 0x95, 0x8e, 0x0b, 0xd0, 0x9a, } } /*f7461d52-7c2b-43b2-8744-ea958e0bd09a*/, "Office Excel 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xa30b8040, 0xd68a, 0x423f, { 0xb0, 0xb5, 0x9c, 0xe2, 0x92, 0xea, 0x5a, 0x8f, } } /*a30b8040-d68a-423f-b0b5-9ce292ea5a8f*/, "Office InfoPath 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x1b9f11e3, 0xc85c, 0x4e1b, { 0xbb, 0x29, 0x87, 0x9a, 0xd2, 0xc9, 0x09, 0xe3, } } /*1b9f11e3-c85c-4e1b-bb29-879ad2c909e3*/, "Office Lync 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xdc981c6b, 0xfc8e, 0x420f, { 0xaa, 0x43, 0xf8, 0xf3, 0x3e, 0x5c, 0x09, 0x23, } } /*dc981c6b-fc8e-420f-aa43-f8f33e5c0923*/, "Office Mondo 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xefe1f3e6, 0xaea2, 0x4144, { 0xa2, 0x08, 0x32, 0xaa, 0x87, 0x2b, 0x65, 0x45, } } /*efe1f3e6-aea2-4144-a208-32aa872b6545*/, "Office OneNote 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x771c3afa, 0x50c5, 0x443f, { 0xb1, 0x51, 0xff, 0x25, 0x46, 0xd8, 0x63, 0xa0, } } /*771c3afa-50c5-443f-b151-ff2546d863a0*/, "Office OutLook 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x8c762649, 0x97d1, 0x4953, { 0xad, 0x27, 0xb7, 0xe2, 0xc2, 0x5b, 0x97, 0x2e, } } /*8c762649-97d1-4953-ad27-b7e2c25b972e*/, "Office PowerPoint 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x4a5d124a, 0xe620, 0x44ba, { 0xb6, 0xff, 0x65, 0x89, 0x61, 0xb3, 0x3b, 0x9a, } } /*4a5d124a-e620-44ba-b6ff-658961b33b9a*/, "Office Project Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x427a28d1, 0xd17c, 0x4abf, { 0xb7, 0x17, 0x32, 0xc7, 0x80, 0xba, 0x6f, 0x07, } } /*427a28d1-d17c-4abf-b717-32c780ba6f07*/, "Office Project Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x00c79ff1, 0x6850, 0x443d, { 0xbf, 0x61, 0x71, 0xcd, 0xe0, 0xde, 0x30, 0x5f, } } /*00c79ff1-6850-443d-bf61-71cde0de305f*/, "Office Publisher 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xac4efaf0, 0xf81f, 0x4f61, { 0xbd, 0xf7, 0xea, 0x32, 0xb0, 0x2a, 0xb1, 0x17, } } /*ac4efaf0-f81f-4f61-bdf7-ea32b02ab117*/, "Office Visio Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xe13ac10e, 0x75d0, 0x4aff, { 0xa0, 0xcd, 0x76, 0x49, 0x82, 0xcf, 0x54, 0x1c, } } /*e13ac10e-75d0-4aff-a0cd-764982cf541c*/, "Office Visio Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xd9f5b1c6, 0x5386, 0x495a, { 0x88, 0xf9, 0x9a, 0xd6, 0xb4, 0x1a, 0xc9, 0xb3, } } /*d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3*/, "Office Word 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } } /*b322da9c-a2e2-4058-9e4e-f59a6970bd69*/, "Office Professional Plus 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xb13afb38, 0xcd79, 0x4ae5, { 0x9f, 0x7f, 0xee, 0xd0, 0x58, 0xd7, 0x50, 0xca, } } /*b13afb38-cd79-4ae5-9f7f-eed058d750ca*/, "Office Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + + // Office 2016 + + { { 0xd450596f, 0x894d, 0x49e0, { 0x96, 0x6a, 0xfd, 0x39, 0xed, 0x4c, 0x4c, 0x64, } } /*d450596f-894d-49e0-966a-fd39ed4c4c64*/, "Office Professional Plus 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x4f414197, 0x0fc2, 0x4c01, { 0xb6, 0x8a, 0x86, 0xcb, 0xb9, 0xac, 0x25, 0x4c, } } /*4f414197-0fc2-4c01-b68a-86cbb9ac254c*/, "Office Project Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x6bf301c1, 0xb94a, 0x43e9, { 0xba, 0x31, 0xd4, 0x94, 0x59, 0x8c, 0x47, 0xfb, } } /*6bf301c1-b94a-43e9-ba31-d494598c47fb*/, "Office Visio Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x041a06cb, 0xc5b8, 0x4772, { 0x80, 0x9f, 0x41, 0x6d, 0x03, 0xd1, 0x66, 0x54, } } /*041a06cb-c5b8-4772-809f-416d03d16654*/, "Office Publisher 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x67c0fc0c, 0xdeba, 0x401b, { 0xbf, 0x8b, 0x9c, 0x8a, 0xd8, 0x39, 0x58, 0x04, } } /*67c0fc0c-deba-401b-bf8b-9c8ad8395804*/, "Office Access 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x83e04ee1, 0xfa8d, 0x436d, { 0x89, 0x94, 0xd3, 0x1a, 0x86, 0x2c, 0xab, 0x77, } } /*83e04ee1-fa8d-436d-8994-d31a862cab77*/, "Office Skype for Business 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x9caabccb, 0x61b1, 0x4b4b, { 0x8b, 0xec, 0xd1, 0x0a, 0x3c, 0x3a, 0xc2, 0xce, } } /*9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce*/, "Office Mondo 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xaa2a7821, 0x1827, 0x4c2c, { 0x8f, 0x1d, 0x45, 0x13, 0xa3, 0x4d, 0xda, 0x97, } } /*aa2a7821-1827-4c2c-8f1d-4513a34dda97*/, "Office Visio Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xbb11badf, 0xd8aa, 0x470e, { 0x93, 0x11, 0x20, 0xea, 0xf8, 0x0f, 0xe5, 0xcc, } } /*bb11badf-d8aa-470e-9311-20eaf80fe5cc*/, "Office Word 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xc3e65d36, 0x141f, 0x4d2f, { 0xa3, 0x03, 0xa8, 0x42, 0xee, 0x75, 0x6a, 0x29, } } /*c3e65d36-141f-4d2f-a303-a842ee756a29*/, "Office Excel 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xd70b1bba, 0xb893, 0x4544, { 0x96, 0xe2, 0xb7, 0xa3, 0x18, 0x09, 0x1c, 0x33, } } /*d70b1bba-b893-4544-96e2-b7a318091c33*/, "Office Powerpoint 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xd8cace59, 0x33d2, 0x4ac7, { 0x9b, 0x1b, 0x9b, 0x72, 0x33, 0x9c, 0x51, 0xc8, } } /*d8cace59-33d2-4ac7-9b1b-9b72339c51c8*/, "Office OneNote 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xda7ddabc, 0x3fbe, 0x4447, { 0x9e, 0x01, 0x6a, 0xb7, 0x44, 0x0b, 0x4c, 0xd4, } } /*da7ddabc-3fbe-4447-9e01-6ab7440b4cd4*/, "Office Project Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xdedfa23d, 0x6ed1, 0x45a6, { 0x85, 0xdc, 0x63, 0xca, 0xe0, 0x54, 0x6d, 0xe6, } } /*dedfa23d-6ed1-45a6-85dc-63cae0546de6*/, "Office Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xe914ea6e, 0xa5fa, 0x4439, { 0xa3, 0x94, 0xa9, 0xbb, 0x32, 0x93, 0xca, 0x09, } } /*e914ea6e-a5fa-4439-a394-a9bb3293ca09*/, "Office Mondo R 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xec9d9265, 0x9d1e, 0x4ed0, { 0x83, 0x8a, 0xcd, 0xc2, 0x0f, 0x25, 0x51, 0xa1, } } /*ec9d9265-9d1e-4ed0-838a-cdc20f2551a1*/, "Office Outlook 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + + // End marker (necessity should be removed when time permits) + + { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 } +}; + + +// necessary because other .c files cannot access _countof() +__pure ProdListIndex_t getExtendedProductListSize(void) +{ + return _countof(ExtendedProductList) - 1; +} + +__pure ProdListIndex_t getAppListSize(void) +{ + return _countof(AppList); +} + +#endif + +#ifndef NO_RANDOM_EPID +// HostType and OSBuild +static const struct KMSHostOS { uint16_t Type; uint16_t Build; } HostOS[] = +{ + { 55041, 6002 }, // Windows Server 2008 SP2 + { 55041, 7601 }, // Windows Server 2008 R2 SP1 + { 5426, 9200 }, // Windows Server 2012 + { 6401, 9600 }, // Windows Server 2012 R2 + { 3612, 10240}, // Windows Server 2016 +}; + +// GroupID and PIDRange +static const struct PKEYCONFIG { uint16_t GroupID; uint32_t RangeMin; uint32_t RangeMax; } pkeyconfig[] = { + { 206, 152000000, 191999999 }, // Windows Server 2012 KMS Host pkeyconfig + { 206, 271000000, 310999999 }, // Windows Server 2012 R2 KMS Host pkeyconfig + { 96, 199000000, 217999999 }, // Office2010 KMS Host pkeyconfig + { 206, 234000000, 255999999 }, // Office2013 KMS Host pkeyconfig +}; + +// Valid language identifiers to be used in the ePID +static const uint16_t LcidList[] = { + 1078, 1052, 1025, 2049, 3073, 4097, 5121, 6145, 7169, 8193, 9217, 10241, 11265, 12289, 13313, 14337, 15361, 16385, + 1067, 1068, 2092, 1069, 1059, 1093, 5146, 1026, 1027, 1028, 2052, 3076, 4100, 5124, 1050, 4122, 1029, 1030, 1125, 1043, 2067, + 1033, 2057, 3081, 4105, 5129, 6153, 7177, 8201, 9225, 10249, 11273, 12297, 13321, 1061, 1080, 1065, 1035, 1036, 2060, + 3084, 4108, 5132, 6156, 1079, 1110, 1031, 2055, 3079, 4103, 5127, 1032, 1095, 1037, 1081, 1038, 1039, 1057, 1040, 2064, 1041, 1099, + 1087, 1111, 1042, 1088, 1062, 1063, 1071, 1086, 2110, 1100, 1082, 1153, 1102, 1104, 1044, 2068, 1045, 1046, 2070, + 1094, 1131, 2155, 3179, 1048, 1049, 9275, 4155, 5179, 3131, 1083, 2107, 8251, 6203, 7227, 1103, 2074, 6170, 3098, + 7194, 1051, 1060, 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, 12298, 13322, 14346, 15370, 16394, + 17418, 18442, 19466, 20490, 1089, 1053, 2077, 1114, 1097, 1092, 1098, 1054, 1074, 1058, 1056, 1091, 2115, 1066, 1106, 1076, 1077 +}; + + +#ifdef _PEDANTIC +uint16_t IsValidLcid(const uint16_t Lcid) +{ + uint16_t i; + + for (i = 0; i < _countof(LcidList); i++) + { + if (Lcid == LcidList[i]) return Lcid; + } + + return 0; +} +#endif // _PEDANTIC +#endif // NO_RANDOM_EPID + + +// Unix time is seconds from 1970-01-01. Should be 64 bits to avoid Year 2035 overflow bug. +// FILETIME is 100 nanoseconds from 1601-01-01. Must be 64 bits. +void getUnixTimeAsFileTime(FILETIME *const ts) +{ + int64_t unixtime = (int64_t)time(NULL); + int64_t *filetime = (int64_t*)ts; + + *filetime = LE64( (unixtime + 11644473600LL) * 10000000LL ); +} + +__pure int64_t fileTimeToUnixTime(const FILETIME *const ts) +{ + return LE64( *((const int64_t *const)ts) ) / 10000000LL - 11644473600LL; +} + + +/* + * Get's a product name with a GUID in host-endian order. + * List can be any list defined above. + */ +const char* getProductNameHE(const GUID *const guid, const KmsIdList *const List, ProdListIndex_t *const i) +{ + for (*i = 0; List[*i].name != NULL; (*i)++) + { + if (IsEqualGUID(guid, &List[*i].guid)) + return List[*i].name; + } + + return "Unknown"; +} + + +/* + * same as getProductnameHE except GUID is in little-endian (network) order + */ +const char* getProductNameLE(const GUID *const guid, const KmsIdList *const List, ProdListIndex_t *const i) +{ + #if __BYTE_ORDER != __LITTLE_ENDIAN + GUID HeGUID; + LEGUID(&HeGUID, guid); + return getProductNameHE(&HeGUID, List, i); + #else + return getProductNameHE(guid, List, i); + #endif +} + + +#ifndef NO_RANDOM_EPID +// formats an int with a fixed number of digits with leading zeros (helper for ePID generation) +static char* itoc(char *const c, const int i, uint_fast8_t digits) +{ + char formatString[8]; + if (digits > 9) digits = 0; + strcpy(formatString,"%"); + + if (digits) + { + formatString[1] = '0'; + formatString[2] = digits | 0x30; + formatString[3] = 0; + } + + strcat(formatString, "u"); + sprintf(c, formatString, i); + return c; +} + +static int getRandomServerType() +{ +# ifndef USE_MSRPC + if (!UseRpcBTFN) +# endif // USE_MSRPC + { + // This isn't possible at all, e.g. KMS host on XP + return rand() % (int)_countof(HostOS); + } +# ifndef USE_MSRPC + else + { + // return 9200/9600/10240 if NDR64 is in use, otherwise 6002/7601 + if (UseRpcNDR64) return (rand() % 3) + 2; + return (rand() % 2); + } +# endif // USE_MSRPC +} + + +/* + * Generates a random ePID + */ +static void generateRandomPid(const int index, char *const szPid, int serverType, int16_t lang) +{ + int clientApp; + char numberBuffer[12]; + + if (serverType < 0 || serverType >= (int)_countof(HostOS)) + { + serverType = getRandomServerType(); + } + + strcpy(szPid, itoc(numberBuffer, HostOS[serverType].Type, 5)); + strcat(szPid, "-"); + + if (index == 2) + clientApp = 3; + else if (index == 1) + clientApp = 2; + else + clientApp = serverType == 3 /*change if HostOS changes*/ ? 1 : 0; + + strcat(szPid, itoc(numberBuffer, pkeyconfig[clientApp].GroupID, 5)); + strcat(szPid, "-"); + + int keyId = (rand32() % (pkeyconfig[clientApp].RangeMax - pkeyconfig[clientApp].RangeMin)) + pkeyconfig[clientApp].RangeMin; + strcat(szPid, itoc(numberBuffer, keyId / 1000000, 3)); + strcat(szPid, "-"); + strcat(szPid, itoc(numberBuffer, keyId % 1000000, 6)); + strcat(szPid, "-03-"); + + if (lang < 0) lang = LcidList[rand() % _countof(LcidList)]; + strcat(szPid, itoc(numberBuffer, lang, 0)); + strcat(szPid, "-"); + + strcat(szPid, itoc(numberBuffer, HostOS[serverType].Build, 0)); + strcat(szPid, ".0000-"); + +# define minTime ((time_t)1436958000) // Release Date Windows 10 RTM Escrow + + time_t maxTime, kmsTime; + time(&maxTime); + + if (maxTime < minTime) // Just in case the system time is < 07/15/2015 1:00 pm + maxTime = (time_t)BUILD_TIME; + + kmsTime = (rand32() % (maxTime - minTime)) + minTime; +# undef minTime + + struct tm *pidTime; + pidTime = gmtime(&kmsTime); + + strcat(szPid, itoc(numberBuffer, pidTime->tm_yday, 3)); + strcat(szPid, itoc(numberBuffer, pidTime->tm_year + 1900, 4)); +} + + +/* + * Generates random ePIDs and stores them if not already read from ini file. + * For use with randomization level 1 + */ +void randomPidInit() +{ + ProdListIndex_t i; + + int serverType = getRandomServerType(); + int16_t lang = Lcid ? Lcid : LcidList[rand() % _countof(LcidList)]; + + for (i = 0; i < _countof(AppList) - 1; i++) + { + if (KmsResponseParameters[i].Epid) continue; + + char Epid[PID_BUFFER_SIZE]; + + generateRandomPid(i, Epid, serverType, lang); + KmsResponseParameters[i].Epid = (const char*)vlmcsd_malloc(strlen(Epid) + 1); + + strcpy((char*)KmsResponseParameters[i].Epid, Epid); + + #ifndef NO_LOG + KmsResponseParameters[i].EpidSource = "randomized at program start"; + #endif // NO_LOG + } +} + +#endif // NO_RANDOM_EPID + + +#ifndef NO_LOG +/* + * Logs a Request + */ +static void logRequest(const REQUEST *const baseRequest) +{ + const char *productName; + char clientname[64]; + ProdListIndex_t index; + + #ifndef NO_EXTENDED_PRODUCT_LIST + productName = getProductNameLE(&baseRequest->ActID, ExtendedProductList, &index); + if (++index >= (int)_countof(ExtendedProductList)) + #endif // NO_EXTENDED_PRODUCT_LIST + { + #ifndef NO_BASIC_PRODUCT_LIST + productName = getProductNameLE(&baseRequest->KMSID, ProductList, &index); + if (++index >= (int)_countof(ProductList)) + #endif // NO_BASIC_PRODUCT_LIST + { + productName = getProductNameLE(&baseRequest->AppID, AppList, &index); + } + } + + #ifndef NO_VERBOSE_LOG + if (logverbose) + { + logger("<<< Incoming KMS request\n"); + logRequestVerbose(baseRequest, &logger); + } + else + { + #endif // NO_VERBOSE_LOG + ucs2_to_utf8(baseRequest->WorkstationName, clientname, 64, 64); + logger("KMS v%i.%i request from %s for %s\n", LE16(baseRequest->MajorVer), LE16(baseRequest->MinorVer), clientname, productName); + #ifndef NO_VERBOSE_LOG + } + #endif // NO_VERBOSE_LOG +} +#endif // NO_LOG + + +/* + * Converts a utf-8 ePID string to UCS-2 and writes it to a RESPONSE struct + */ +static void getEpidFromString(RESPONSE *const Response, const char *const pid) +{ + size_t length = utf8_to_ucs2(Response->KmsPID, pid, PID_BUFFER_SIZE, PID_BUFFER_SIZE * 3); + Response->PIDSize = LE32(((unsigned int )length + 1) << 1); +} + + +/* + * get ePID from appropriate source + */ +static void getEpid(RESPONSE *const baseResponse, const char** EpidSource, const ProdListIndex_t index, BYTE *const HwId) +{ + const char* pid; + if (KmsResponseParameters[index].Epid == NULL) + { + #ifndef NO_RANDOM_EPID + if (RandomizationLevel == 2) + { + char szPid[PID_BUFFER_SIZE]; + generateRandomPid(index, szPid, -1, Lcid ? Lcid : -1); + pid = szPid; + + #ifndef NO_LOG + *EpidSource = "randomized on every request"; + #endif // NO_LOG + } + else + #endif // NO_RANDOM_EPID + { + pid = AppList[index].pid; + #ifndef NO_LOG + *EpidSource = "vlmcsd default"; + #endif // NO_LOG + } + } + else + { + pid = KmsResponseParameters[index].Epid; + + if (HwId && KmsResponseParameters[index].HwId != NULL) + memcpy(HwId, KmsResponseParameters[index].HwId, sizeof(((RESPONSE_V6 *)0)->HwId)); + + #ifndef NO_LOG + *EpidSource = KmsResponseParameters[index].EpidSource; + #endif // NO_LOG + } + getEpidFromString(baseResponse, pid); +} + + +#if !defined(NO_LOG) && defined(_PEDANTIC) +static BOOL CheckVersion4Uuid(const GUID *const guid, const char *const szGuidName) +{ + if (LE16(guid->Data3) >> 12 != 4 || guid->Data4[0] >> 6 != 2) + { + logger("Warning: %s does not conform to version 4 UUID according to RFC 4122\n", szGuidName); + return FALSE; + } + return TRUE; +} + + +static void CheckRequest(const REQUEST *const Request) +{ + CheckVersion4Uuid(&Request->CMID, "Client machine ID"); + CheckVersion4Uuid(&Request->AppID, "Application ID"); + CheckVersion4Uuid(&Request->KMSID, "Server SKU ID"); + CheckVersion4Uuid(&Request->ActID, "Client SKU ID"); + + if (LE32(Request->IsClientVM) > 1) + logger("Warning: Virtual Machine field in request must be 0 or 1 but is %u\n", LE32(Request->IsClientVM)); + + if (LE32(Request->LicenseStatus) > 6 ) + logger("Warning: License status must be between 0 and 6 but is %u\n", LE32(Request->LicenseStatus)); +} +#endif // !defined(NO_LOG) && defined(_PEDANTIC) + + +#ifndef NO_LOG +/* + * Logs the Response + */ +static void logResponse(const RESPONSE *const baseResponse, const BYTE *const hwId, const char *const EpidSource) +{ + char utf8pid[PID_BUFFER_SIZE * 3]; + ucs2_to_utf8(baseResponse->KmsPID, utf8pid, PID_BUFFER_SIZE, PID_BUFFER_SIZE * 3); + + #ifndef NO_VERBOSE_LOG + if (!logverbose) + { + #endif // NO_VERBOSE_LOG + logger("Sending ePID (%s): %s\n", EpidSource, utf8pid); + #ifndef NO_VERBOSE_LOG + } + else + { + logger(">>> Sending response, ePID source = %s\n", EpidSource); + logResponseVerbose(utf8pid, hwId, baseResponse, &logger); + } + #endif // NO_VERBOSE_LOG + +} +#endif + + +/* + * Creates the unencrypted base response + */ +static BOOL __stdcall CreateResponseBaseCallback(const REQUEST *const baseRequest, RESPONSE *const baseResponse, BYTE *const hwId, const char* const ipstr) +{ + const char* EpidSource; + #ifndef NO_LOG + logRequest(baseRequest); + #ifdef _PEDANTIC + CheckRequest(baseRequest); + #endif // _PEDANTIC + #endif // NO_LOG + + ProdListIndex_t index; + + getProductNameLE(&baseRequest->AppID, AppList, &index); + + if (index >= _countof(AppList) - 1) index = 0; //default to Windows + + getEpid(baseResponse, &EpidSource, index, hwId); + + baseResponse->Version = baseRequest->Version; + + memcpy(&baseResponse->CMID, &baseRequest->CMID, sizeof(GUID)); + memcpy(&baseResponse->ClientTime, &baseRequest->ClientTime, sizeof(FILETIME)); + + baseResponse->Count = LE32(LE32(baseRequest->N_Policy) << 1); + baseResponse->VLActivationInterval = LE32(VLActivationInterval); + baseResponse->VLRenewalInterval = LE32(VLRenewalInterval); + + #ifndef NO_LOG + logResponse(baseResponse, hwId, EpidSource); + #endif // NO_LOG + + return !0; +} + +RequestCallback_t CreateResponseBase = &CreateResponseBaseCallback; + +////TODO: Move to helpers.c +void get16RandomBytes(void* ptr) +{ + int i; + for (i = 0; i < 4; i++) ((DWORD*)ptr)[i] = rand32(); +} + + +/* + * Creates v4 response + */ +size_t CreateResponseV4(REQUEST_V4 *const request_v4, BYTE *const responseBuffer, const char* const ipstr) +{ + RESPONSE_V4* Response = (RESPONSE_V4*)responseBuffer; + + if ( !CreateResponseBase(&request_v4->RequestBase, &Response->ResponseBase, NULL, ipstr) ) return 0; + + DWORD pidSize = LE32(Response->ResponseBase.PIDSize); + BYTE* postEpidPtr = responseBuffer + V4_PRE_EPID_SIZE + pidSize; + memmove(postEpidPtr, &Response->ResponseBase.CMID, V4_POST_EPID_SIZE); + + size_t encryptSize = V4_PRE_EPID_SIZE + V4_POST_EPID_SIZE + pidSize; + AesCmacV4(responseBuffer, encryptSize, responseBuffer + encryptSize); + + return encryptSize + sizeof(Response->MAC); +} + +/* +// Workaround for buggy GCC 4.2/4.3 +#if defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ < 4) +__attribute__((noinline)) +#endif +__pure static uint64_t TimestampInterval(void *ts) +{ + return ( GET_UA64LE(ts) / TIME_C1 ) * TIME_C2 + TIME_C3; +}*/ + + +/* + * Creates the HMAC for v6 + */ +static int_fast8_t CreateV6Hmac(BYTE *const encrypt_start, const size_t encryptSize, int_fast8_t tolerance) +{ + BYTE hash[32]; +# define halfHashSize (sizeof(hash) >> 1) + uint64_t timeSlot; + BYTE *responseEnd = encrypt_start + encryptSize; + + // This is the time from the response + FILETIME* ft = (FILETIME*)(responseEnd - V6_POST_EPID_SIZE + sizeof(((RESPONSE*)0)->CMID)); + + // Generate a time slot that changes every 4.11 hours. + // Request and repsonse time must match +/- 1 slot. + // When generating a response tolerance must be 0. + // If verifying the hash, try tolerance -1, 0 and +1. One of them must match. + + timeSlot = LE64( (GET_UA64LE(ft) / TIME_C1 * TIME_C2 + TIME_C3) + (tolerance * TIME_C1) ); + + // The time slot is hashed with SHA256 so it is not so obvious that it is time + Sha256((BYTE*) &timeSlot, sizeof(timeSlot), hash); + + // The last 16 bytes of the hashed time slot are the actual HMAC key + if (!Sha256Hmac + ( + hash + halfHashSize, // Use last 16 bytes of SHA256 as HMAC key + encrypt_start, // hash only the encrypted part of the v6 response + encryptSize - sizeof(((RESPONSE_V6*)0)->HMAC), // encryptSize minus the HMAC itself + hash // use same buffer for resulting hash where the key came from + )) + { + return FALSE; + } + + memcpy(responseEnd - sizeof(((RESPONSE_V6*)0)->HMAC), hash + halfHashSize, halfHashSize); + return TRUE; +# undef halfHashSize +} + + +/* + * Creates v5 or v6 response + */ +size_t CreateResponseV6(REQUEST_V6 *restrict request_v6, BYTE *const responseBuffer, const char* const ipstr) +{ + // The response will be created in a fixed sized struct to + // avoid unaligned access macros and packed structs on RISC systems + // which largely increase code size. + // + // The fixed sized struct with 64 WCHARs for the ePID will be converted + // to a variable sized struct later and requires unaligned access macros. + + RESPONSE_V6* Response = (RESPONSE_V6*)responseBuffer; + RESPONSE* baseResponse = &Response->ResponseBase; + + #ifdef _DEBUG + RESPONSE_V6_DEBUG* xxx = (RESPONSE_V6_DEBUG*)responseBuffer; + #endif + + static const BYTE DefaultHwid[8] = { HWID }; + int_fast8_t v6 = LE16(request_v6->MajorVer) > 5; + AesCtx aesCtx; + + AesInitKey(&aesCtx, v6 ? AesKeyV6 : AesKeyV5, v6, AES_KEY_BYTES); + AesDecryptCbc(&aesCtx, NULL, request_v6->IV, V6_DECRYPT_SIZE); + + // get random salt and SHA256 it + get16RandomBytes(Response->RandomXoredIVs); + Sha256(Response->RandomXoredIVs, sizeof(Response->RandomXoredIVs), Response->Hash); + + if (v6) // V6 specific stuff + { + // In v6 a random IV is generated + Response->Version = request_v6->Version; + get16RandomBytes(Response->IV); + + // pre-fill with default HwId (not required for v5) + memcpy(Response->HwId, DefaultHwid, sizeof(Response->HwId)); + + // Just copy decrypted request IV (using Null IV) here. Note this is identical + // to XORing non-decrypted request and reponse IVs + memcpy(Response->XoredIVs, request_v6->IV, sizeof(Response->XoredIVs)); + } + else // V5 specific stuff + { + // In v5 IVs of request and response must be identical (MS client checks this) + // The following memcpy copies Version and IVs at once + memcpy(Response, request_v6, V6_UNENCRYPTED_SIZE); + } + + // Xor Random bytes with decrypted request IV + XorBlock(request_v6->IV, Response->RandomXoredIVs); + + // Get the base response + if ( !CreateResponseBase(&request_v6->RequestBase, baseResponse, Response->HwId, ipstr) ) return 0; + + // Convert the fixed sized struct into variable sized + DWORD pidSize = LE32(baseResponse->PIDSize); + BYTE* postEpidPtr = responseBuffer + V6_PRE_EPID_SIZE + pidSize; + size_t post_epid_size = v6 ? V6_POST_EPID_SIZE : V5_POST_EPID_SIZE; + + memmove(postEpidPtr, &baseResponse->CMID, post_epid_size); + + // number of bytes to encrypt + size_t encryptSize = + V6_PRE_EPID_SIZE + - sizeof(Response->Version) + + pidSize + + post_epid_size; + + //AesDecryptBlock(&aesCtx, Response->IV); + if (v6 && !CreateV6Hmac(Response->IV, encryptSize, 0)) return 0; + + // Padding auto handled by encryption func + AesEncryptCbc(&aesCtx, NULL, Response->IV, &encryptSize); + + return encryptSize + sizeof(Response->Version); +} + + +// Create Hashed KMS Client Request Data for KMS Protocol Version 4 +BYTE *CreateRequestV4(size_t *size, const REQUEST* requestBase) +{ + *size = sizeof(REQUEST_V4); + + // Build a proper KMS client request data + BYTE *request = (BYTE *)vlmcsd_malloc(sizeof(REQUEST_V4)); + + // Temporary Pointer for access to REQUEST_V4 structure + REQUEST_V4 *request_v4 = (REQUEST_V4 *)request; + + // Set KMS Client Request Base + memcpy(&request_v4->RequestBase, requestBase, sizeof(REQUEST)); + + // Generate Hash Signature + AesCmacV4(request, sizeof(REQUEST), request_v4->MAC); + + // Return Request Data + return request; +} + + +// Create Encrypted KMS Client Request Data for KMS Protocol Version 6 +BYTE* CreateRequestV6(size_t *size, const REQUEST* requestBase) +{ + *size = sizeof(REQUEST_V6); + + // Temporary Pointer for access to REQUEST_V5 structure + REQUEST_V6 *request = (REQUEST_V6 *)vlmcsd_malloc(sizeof(REQUEST_V6)); + + // KMS Protocol Version + request->Version = requestBase->Version; + + // Initialize the IV + get16RandomBytes(request->IV); + + // Set KMS Client Request Base + memcpy(&request->RequestBase, requestBase, sizeof(REQUEST)); + + // Encrypt KMS Client Request + size_t encryptSize = sizeof(request->RequestBase); + AesCtx Ctx; + int_fast8_t v6 = LE16(request->MajorVer) > 5; + AesInitKey(&Ctx, v6 ? AesKeyV6 : AesKeyV5, v6, 16); + AesEncryptCbc(&Ctx, request->IV, (BYTE*)(&request->RequestBase), &encryptSize); + + // Return Proper Request Data + return (BYTE*)request; +} + + +/* + * Checks whether Length of ePID is valid + */ +static uint8_t checkPidLength(const RESPONSE *const responseBase) +{ + unsigned int i; + + if (LE32(responseBase->PIDSize) > (PID_BUFFER_SIZE << 1)) return FALSE; + if (responseBase->KmsPID[(LE32(responseBase->PIDSize) >> 1) - 1]) return FALSE; + + for (i = 0; i < (LE32(responseBase->PIDSize) >> 1) - 2; i++) + { + if (!responseBase->KmsPID[i]) return FALSE; + } + + return TRUE; +} + + +/* + * "Decrypts" a KMS v4 response. Actually just copies to a fixed size buffer + */ +RESPONSE_RESULT DecryptResponseV4(RESPONSE_V4* response_v4, const int responseSize, BYTE* const rawResponse, const BYTE* const rawRequest) +{ + int copySize = + V4_PRE_EPID_SIZE + + (LE32(((RESPONSE_V4*)rawResponse)->ResponseBase.PIDSize) <= PID_BUFFER_SIZE << 1 ? + LE32(((RESPONSE_V4*)rawResponse)->ResponseBase.PIDSize) : + PID_BUFFER_SIZE << 1); + + int messageSize = copySize + V4_POST_EPID_SIZE; + + memcpy(response_v4, rawResponse, copySize); + memcpy(&response_v4->ResponseBase.CMID, rawResponse + copySize, responseSize - copySize); + + // ensure PID is null terminated + response_v4->ResponseBase.KmsPID[PID_BUFFER_SIZE-1] = 0; + + uint8_t* mac = rawResponse + messageSize; + AesCmacV4(rawResponse, messageSize, mac); + + REQUEST_V4* request_v4 = (REQUEST_V4*)rawRequest; + RESPONSE_RESULT result; + + result.mask = (DWORD)~0; + result.PidLengthOK = checkPidLength((RESPONSE*)rawResponse); + result.VersionOK = response_v4->ResponseBase.Version == request_v4->RequestBase.Version; + result.HashOK = !memcmp(&response_v4->MAC, mac, sizeof(response_v4->MAC)); + result.TimeStampOK = !memcmp(&response_v4->ResponseBase.ClientTime, &request_v4->RequestBase.ClientTime, sizeof(FILETIME)); + result.ClientMachineIDOK = !memcmp(&response_v4->ResponseBase.CMID, &request_v4->RequestBase.CMID, sizeof(GUID)); + result.effectiveResponseSize = responseSize; + result.correctResponseSize = sizeof(RESPONSE_V4) - sizeof(response_v4->ResponseBase.KmsPID) + LE32(response_v4->ResponseBase.PIDSize); + + return result; +} + + +static RESPONSE_RESULT VerifyResponseV6(RESPONSE_RESULT result, const AesCtx* Ctx, RESPONSE_V6* response_v6, REQUEST_V6* request_v6, BYTE* const rawResponse) +{ + // Check IVs + result.IVsOK = !memcmp // In V6 the XoredIV is actually the request IV + ( + response_v6->XoredIVs, + request_v6->IV, + sizeof(response_v6->XoredIVs) + ); + + result.IVnotSuspicious = !!memcmp // If IVs are identical, it is obviously an emulator + ( + request_v6->IV, + response_v6->IV, + sizeof(request_v6->IV) + ); + + // Check Hmac + int_fast8_t tolerance; + BYTE OldHmac[sizeof(response_v6->HMAC)]; + + result.HmacSha256OK = FALSE; + + memcpy // Save received HMAC to compare with calculated HMAC later + ( + OldHmac, + response_v6->HMAC, + sizeof(response_v6->HMAC) + ); + + //AesEncryptBlock(Ctx, Response_v6->IV); // CreateV6Hmac needs original IV as received over the network + + for (tolerance = -1; tolerance < 2; tolerance++) + { + CreateV6Hmac + ( + rawResponse + sizeof(response_v6->Version), // Pointer to start of the encrypted part of the response + (size_t)result.correctResponseSize - V6_UNENCRYPTED_SIZE, // size of the encrypted part + tolerance // tolerance -1, 0, or +1 + ); + + if + (( + result.HmacSha256OK = !memcmp // Compare both HMACs + ( + OldHmac, + rawResponse + (size_t)result.correctResponseSize - sizeof(response_v6->HMAC), + sizeof(OldHmac) + ) + )) + { + break; + } + } + return result; +} + + +static RESPONSE_RESULT VerifyResponseV5(RESPONSE_RESULT result, REQUEST_V5* request_v5, RESPONSE_V5* response_v5) +{ + // Check IVs: in V5 (and only v5) request and response IVs must match + result.IVsOK = !memcmp(request_v5->IV, response_v5->IV, sizeof(request_v5->IV)); + + // V5 has no Hmac, always set to TRUE + result.HmacSha256OK = TRUE; + + return result; +} + + +/* + * Decrypts a KMS v5 or v6 response received from a server. + * hwid must supply a valid 16 byte buffer for v6. hwid is ignored in v5 + */ +RESPONSE_RESULT DecryptResponseV6(RESPONSE_V6* response_v6, int responseSize, BYTE* const response, const BYTE* const rawRequest, BYTE* hwid) +{ + RESPONSE_RESULT result; + result.mask = ~0; // Set all bits in the results mask to 1. Assume success first. + result.effectiveResponseSize = responseSize; + + int copySize1 = + sizeof(response_v6->Version); + + // Decrypt KMS Server Response (encrypted part starts after RequestIV) + responseSize -= copySize1; + + AesCtx Ctx; + int_fast8_t v6 = LE16(((RESPONSE_V6*)response)->MajorVer) > 5; + + AesInitKey(&Ctx, v6 ? AesKeyV6 : AesKeyV5, v6, AES_KEY_BYTES); + AesDecryptCbc(&Ctx, NULL, response + copySize1, responseSize); + + // Check padding + BYTE* lastPadByte = response + (size_t)result.effectiveResponseSize - 1; + + // Must be from 1 to 16 + if (!*lastPadByte || *lastPadByte > AES_BLOCK_BYTES) + { + result.DecryptSuccess = FALSE; + return result; + } + + // Check if pad bytes are all the same + BYTE* padByte; + for (padByte = lastPadByte - *lastPadByte + 1; padByte < lastPadByte; padByte++) + if (*padByte != *lastPadByte) + { + result.DecryptSuccess = FALSE; + return result; + } + + // Add size of Version, KmsPIDLen and variable size PID + DWORD pidSize = LE32(((RESPONSE_V6*) response)->ResponseBase.PIDSize); + + copySize1 += + V6_UNENCRYPTED_SIZE + + sizeof(response_v6->ResponseBase.PIDSize) + + (pidSize <= PID_BUFFER_SIZE << 1 ? pidSize : PID_BUFFER_SIZE << 1); + + // Copy part 1 of response up to variable sized PID + memcpy(response_v6, response, copySize1); + + // ensure PID is null terminated + response_v6->ResponseBase.KmsPID[PID_BUFFER_SIZE - 1] = 0; + + // Copy part 2 + size_t copySize2 = v6 ? V6_POST_EPID_SIZE : V5_POST_EPID_SIZE; + memcpy(&response_v6->ResponseBase.CMID, response + copySize1, copySize2); + + // Decrypting the response is finished here. Now we check the results for validity + // A basic client doesn't need the stuff below this comment but we want to use vlmcs + // as a debug tool for KMS emulators. + + REQUEST_V6* request_v6 = (REQUEST_V6*) rawRequest; + DWORD decryptSize = sizeof(request_v6->IV) + sizeof(request_v6->RequestBase) + sizeof(request_v6->Pad); + + AesDecryptCbc(&Ctx, NULL, request_v6->IV, decryptSize); + + // Check that all version informations are the same + result.VersionOK = + request_v6->Version == response_v6->ResponseBase.Version && + request_v6->Version == response_v6->Version && + request_v6->Version == request_v6->RequestBase.Version; + + // Check Base Request + result.PidLengthOK = checkPidLength(&((RESPONSE_V6*) response)->ResponseBase); + result.TimeStampOK = !memcmp(&response_v6->ResponseBase.ClientTime, &request_v6->RequestBase.ClientTime, sizeof(FILETIME)); + result.ClientMachineIDOK = IsEqualGUID(&response_v6->ResponseBase.CMID, &request_v6->RequestBase.CMID); + + // Rebuild Random Key and Sha256 Hash + BYTE HashVerify[sizeof(response_v6->Hash)]; + BYTE RandomKey[sizeof(response_v6->RandomXoredIVs)]; + + memcpy(RandomKey, request_v6->IV, sizeof(RandomKey)); + XorBlock(response_v6->RandomXoredIVs, RandomKey); + Sha256(RandomKey, sizeof(RandomKey), HashVerify); + + result.HashOK = !memcmp(response_v6->Hash, HashVerify, sizeof(HashVerify)); + + // size before encryption (padding not included) + result.correctResponseSize = + (v6 ? sizeof(RESPONSE_V6) : sizeof(RESPONSE_V5)) + - sizeof(response_v6->ResponseBase.KmsPID) + + LE32(response_v6->ResponseBase.PIDSize); + + // Version specific stuff + if (v6) + { + // Copy the HwId + memcpy(hwid, response_v6->HwId, sizeof(response_v6->HwId)); + + // Verify the V6 specific part of the response + result = VerifyResponseV6(result, &Ctx, response_v6, request_v6, response); + } + else // V5 + { + // Verify the V5 specific part of the response + result = VerifyResponseV5(result, request_v6, (RESPONSE_V5*)response_v6); + } + + // padded size after encryption + result.correctResponseSize += (~(result.correctResponseSize - sizeof(response_v6->ResponseBase.Version)) & 0xf) + 1; + + return result; +} + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "endian.h" + +#if defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN) \ + && defined(BS16) && defined(BS32) && defined(BS64) + +#else // ! defined(__BYTE_ORDER) + +void PUT_UAA64BE(void *p, unsigned long long v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + _p[ 0 ] = v >> 56; + _p[ 1 ] = v >> 48; + _p[ 2 ] = v >> 40; + _p[ 3 ] = v >> 32; + _p[ 4 ] = v >> 24; + _p[ 5 ] = v >> 16; + _p[ 6 ] = v >> 8; + _p[ 7 ] = v; +} + +void PUT_UAA32BE(void *p, unsigned int v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + _p[ 0 ] = v >> 24; + _p[ 1 ] = v >> 16; + _p[ 2 ] = v >> 8; + _p[ 3 ] = v; +} + +void PUT_UAA16BE(void *p, unsigned short v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + _p[ 0 ] = v >> 8; + _p[ 1 ] = v; +} + + +void PUT_UAA64LE(void *p, unsigned long long v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + _p[ 0 ] = v; + _p[ 1 ] = v >> 8; + _p[ 2 ] = v >> 16; + _p[ 3 ] = v >> 24; + _p[ 4 ] = v >> 32; + _p[ 5 ] = v >> 40; + _p[ 6 ] = v >> 48; + _p[ 7 ] = v >> 56; +} + +void PUT_UAA32LE(void *p, unsigned int v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + _p[ 0 ] = v; + _p[ 1 ] = v >> 8; + _p[ 2 ] = v >> 16; + _p[ 3 ] = v >> 24; +} + +void PUT_UAA16LE(void *p, unsigned short v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + _p[ 0 ] = v; + _p[ 1 ] = v >> 8; +} + + +unsigned long long GET_UAA64BE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + return + (unsigned long long)_p[ 0 ] << 56 | + (unsigned long long)_p[ 1 ] << 48 | + (unsigned long long)_p[ 2 ] << 40 | + (unsigned long long)_p[ 3 ] << 32 | + (unsigned long long)_p[ 4 ] << 24 | + (unsigned long long)_p[ 5 ] << 16 | + (unsigned long long)_p[ 6 ] << 8 | + (unsigned long long)_p[ 7 ]; + +} + +unsigned int GET_UAA32BE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + return + (unsigned int)_p[ 0 ] << 24 | + (unsigned int)_p[ 1 ] << 16 | + (unsigned int)_p[ 2 ] << 8 | + (unsigned int)_p[ 3 ]; +} + +unsigned short GET_UAA16BE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + return + (unsigned short)_p[ 0 ] << 8 | + (unsigned short)_p[ 1 ]; +} + + +unsigned long long GET_UAA64LE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + return + (unsigned long long)_p[ 0 ] | + (unsigned long long)_p[ 1 ] << 8 | + (unsigned long long)_p[ 2 ] << 16 | + (unsigned long long)_p[ 3 ] << 24 | + (unsigned long long)_p[ 4 ] << 32 | + (unsigned long long)_p[ 5 ] << 40 | + (unsigned long long)_p[ 6 ] << 48 | + (unsigned long long)_p[ 7 ] << 56; + +} + +unsigned int GET_UAA32LE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + return + (unsigned int)_p[ 0 ] | + (unsigned int)_p[ 1 ] << 8 | + (unsigned int)_p[ 2 ] << 16 | + (unsigned int)_p[ 3 ] << 24; +} + +unsigned short GET_UAA16LE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + return + (unsigned short)_p[ 0 ] | + (unsigned short)_p[ 1 ] << 8; +} + + +unsigned short BE16(unsigned short x) +{ + return GET_UAA16BE(&x, 0); +} + +unsigned short LE16(unsigned short x) +{ + return GET_UAA16LE(&x, 0); +} + +unsigned int BE32(unsigned int x) +{ + return GET_UAA32BE(&x, 0); +} + +unsigned int LE32(unsigned int x) +{ + return GET_UAA32LE(&x, 0); +} + +unsigned long long BE64(unsigned long long x) +{ + return GET_UAA64BE(&x, 0); +} + +inline unsigned long long LE64(unsigned long long x) +{ + return GET_UAA64LE(&x, 0); +} + +#endif // defined(__BYTE_ORDER) +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE +#endif // _DEFAULT_SOURCE + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "output.h" +#include "shared_globals.h" +#include "endian.h" +#include "helpers.h" + +#ifndef NO_LOG +static void vlogger(const char *message, va_list args) +{ + FILE *log; + + #ifdef _NTSERVICE + if (!IsNTService && logstdout) log = stdout; + #else + if (logstdout) log = stdout; + #endif + else + { + if (fn_log == NULL) return; + + #ifndef _WIN32 + if (!strcmp(fn_log, "syslog")) + { + openlog("vlmcsd", LOG_CONS | LOG_PID, LOG_USER); + + ////PORTABILITY: vsyslog is not in Posix but virtually all Unixes have it + vsyslog(LOG_INFO, message, args); + + closelog(); + return; + } + #endif // _WIN32 + + log = fopen(fn_log, "a"); + if ( !log ) return; + } + + time_t now = time(0); + + #ifdef USE_THREADS + char mbstr[2048]; + #else + char mbstr[24]; + #endif + + strftime(mbstr, sizeof(mbstr), "%Y-%m-%d %X", localtime(&now)); + + #ifndef USE_THREADS + + fprintf(log, "%s: ", mbstr); + vfprintf(log, message, args); + fflush(log); + + #else // USE_THREADS + + // We write everything to a string before we really log inside the critical section + // so formatting the output can be concurrent + strcat(mbstr, ": "); + int len = strlen(mbstr); + vsnprintf(mbstr + len, sizeof(mbstr) - len, message, args); + + lock_mutex(&logmutex); + fputs(mbstr, log); + fflush(log); + unlock_mutex(&logmutex); + + #endif // USE_THREADS + if (log != stdout) fclose(log); +} + + +// Always sends to log output +int logger(const char *const fmt, ...) +{ + va_list args; + + va_start(args, fmt); + vlogger(fmt, args); + va_end(args); + return 0; +} + +#endif //NO_LOG + + +// Output to stderr if it is available or to log otherwise (e.g. if running as daemon/service) +void printerrorf(const char *const fmt, ...) +{ + va_list arglist; + + va_start(arglist, fmt); + + #ifndef NO_LOG + #ifdef _NTSERVICE + if (InetdMode || IsNTService) + #else // !_NTSERVICE + if (InetdMode) + #endif // NTSERVIICE + vlogger(fmt, arglist); + else + #endif //NO_LOG + { + vfprintf(stderr, fmt, arglist); + fflush(stderr); + } + + va_end(arglist); +} + + +// Always output to stderr +int errorout(const char* fmt, ...) +{ + va_list args; + + va_start(args, fmt); + int i = vfprintf(stderr, fmt, args); + va_end(args); + fflush(stderr); + + return i; +} + + +static const char *LicenseStatusText[] = +{ + "Unlicensed", "Licensed", "OOB grace", "OOT grace", "Non-Genuine", "Notification", "Extended grace" +}; + + +void uuid2StringLE(const GUID *const guid, char *const string) +{ + sprintf(string, + #ifdef _WIN32 + "%08x-%04x-%04x-%04x-%012I64x", + #else + "%08x-%04x-%04x-%04x-%012llx", + #endif + (unsigned int)LE32( guid->Data1 ), + (unsigned int)LE16( guid->Data2 ), + (unsigned int)LE16( guid->Data3 ), + (unsigned int)BE16( *(uint16_t*)guid->Data4 ), + (unsigned long long)BE64(*(uint64_t*)(guid->Data4)) & 0xffffffffffffLL + ); +} + + +void logRequestVerbose(const REQUEST *const Request, const PRINTFUNC p) +{ + char guidBuffer[GUID_STRING_LENGTH + 1]; + char WorkstationBuffer[3 * WORKSTATION_NAME_BUFFER]; + const char *productName; + ProdListIndex_t index; + + p("Protocol version : %u.%u\n", LE16(Request->MajorVer), LE16(Request->MinorVer)); + p("Client is a virtual machine : %s\n", LE32(Request->VMInfo) ? "Yes" : "No"); + p("Licensing status : %u (%s)\n", (uint32_t)LE32(Request->LicenseStatus), LE32(Request->LicenseStatus) < _countof(LicenseStatusText) ? LicenseStatusText[LE32(Request->LicenseStatus)] : "Unknown"); + p("Remaining time (0 = forever) : %i minutes\n", (uint32_t)LE32(Request->BindingExpiration)); + + uuid2StringLE(&Request->AppID, guidBuffer); + productName = getProductNameLE(&Request->AppID, AppList, &index); + p("Application ID : %s (%s)\n", guidBuffer, productName); + + uuid2StringLE(&Request->ActID, guidBuffer); + + #ifndef NO_EXTENDED_PRODUCT_LIST + productName = getProductNameLE(&Request->ActID, ExtendedProductList, &index); + #else + productName = "Unknown"; + #endif + + p("Activation ID (Product) : %s (%s)\n", guidBuffer, productName); + + uuid2StringLE(&Request->KMSID, guidBuffer); + + #ifndef NO_BASIC_PRODUCT_LIST + productName = getProductNameLE(&Request->KMSID, ProductList, &index); + #else + productName = "Unknown"; + #endif + + p("Key Management Service ID : %s (%s)\n", guidBuffer, productName); + + uuid2StringLE(&Request->CMID, guidBuffer); + p("Client machine ID : %s\n", guidBuffer); + + uuid2StringLE(&Request->CMID_prev, guidBuffer); + p("Previous client machine ID : %s\n", guidBuffer); + + + char mbstr[64]; + time_t st; + st = fileTimeToUnixTime(&Request->ClientTime); + strftime(mbstr, sizeof(mbstr), "%Y-%m-%d %X", gmtime(&st)); + p("Client request timestamp (UTC) : %s\n", mbstr); + + ucs2_to_utf8(Request->WorkstationName, WorkstationBuffer, WORKSTATION_NAME_BUFFER, sizeof(WorkstationBuffer)); + + p("Workstation name : %s\n", WorkstationBuffer); + p("N count policy (minimum clients): %u\n", (uint32_t)LE32(Request->N_Policy)); +} + + +void logResponseVerbose(const char *const ePID, const BYTE *const hwid, const RESPONSE *const response, const PRINTFUNC p) +{ + char guidBuffer[GUID_STRING_LENGTH + 1]; + //SYSTEMTIME st; + + p("Protocol version : %u.%u\n", (uint32_t)LE16(response->MajorVer), (uint32_t)LE16(response->MinorVer)); + p("KMS host extended PID : %s\n", ePID); + if (LE16(response->MajorVer) > 5) +# ifndef _WIN32 + p("KMS host Hardware ID : %016llX\n", (unsigned long long)BE64(*(uint64_t*)hwid)); +# else // _WIN32 + p("KMS host Hardware ID : %016I64X\n", (unsigned long long)BE64(*(uint64_t*)hwid)); +# endif // WIN32 + + uuid2StringLE(&response->CMID, guidBuffer); + p("Client machine ID : %s\n", guidBuffer); + + char mbstr[64]; + time_t st; + + st = fileTimeToUnixTime(&response->ClientTime); + strftime(mbstr, sizeof(mbstr), "%Y-%m-%d %X", gmtime(&st)); + p("Client request timestamp (UTC) : %s\n", mbstr); + + p("KMS host current active clients : %u\n", (uint32_t)LE32(response->Count)); + p("Renewal interval policy : %u\n", (uint32_t)LE32(response->VLRenewalInterval)); + p("Activation interval policy : %u\n", (uint32_t)LE32(response->VLActivationInterval)); +} + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "shared_globals.h" + +int global_argc, multi_argc = 0; +CARGV global_argv, multi_argv = NULL; +const char *const Version = VERSION; +DWORD VLActivationInterval = 60 * 2; // 2 hours +DWORD VLRenewalInterval = 60 * 24 * 7; // 7 days +int_fast8_t DisconnectImmediately = FALSE; +const char *const cIPv4 = "IPv4"; +const char *const cIPv6 = "IPv6"; + +#ifndef USE_MSRPC +int_fast8_t UseMultiplexedRpc = TRUE; +int_fast8_t UseRpcNDR64 = TRUE; +int_fast8_t UseRpcBTFN = TRUE; +#endif // USE_MSRPC + +#ifndef NO_SOCKETS +const char *defaultport = "1688"; +#endif // NO_SOCKETS + +KmsResponseParam_t KmsResponseParameters[MAX_KMSAPPS]; + +#if !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) +int_fast8_t IsRestarted = FALSE; +#endif // !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) + +#if !defined(NO_TIMEOUT) && !__minix__ +DWORD ServerTimeout = 30; +#endif // !defined(NO_TIMEOUT) && !__minix__ + +#if !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ +#ifdef USE_MSRPC +uint32_t MaxTasks = RPC_C_LISTEN_MAX_CALLS_DEFAULT; +#else // !USE_MSRPC +uint32_t MaxTasks = SEM_VALUE_MAX; +#endif // !USE_MSRPC +#endif // !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ + +#ifndef NO_LOG +char *fn_log = NULL; +int_fast8_t logstdout = 0; +#ifndef NO_VERBOSE_LOG +int_fast8_t logverbose = 0; +#endif // NO_VERBOSE_LOG +#endif // NO_LOG + +#ifndef NO_SOCKETS +int_fast8_t nodaemon = 0; +int_fast8_t InetdMode = 0; +#else +int_fast8_t nodaemon = 1; +int_fast8_t InetdMode = 1; +#endif + +#ifndef NO_RANDOM_EPID +int_fast8_t RandomizationLevel = 1; +uint16_t Lcid = 0; +#endif + +#ifndef NO_SOCKETS +SOCKET *SocketList; +int numsockets = 0; + +#if !defined(NO_LIMIT) && !__minix__ +#ifndef _WIN32 // Posix +sem_t *Semaphore; +#else // _WIN32 +HANDLE Semaphore; +#endif // _WIN32 + +#endif // !defined(NO_LIMIT) && !__minix__ +#endif // NO_SOCKETS + +#ifdef _NTSERVICE +int_fast8_t IsNTService = TRUE; +int_fast8_t ServiceShutdown = FALSE; +#endif // _NTSERVICE + +#ifndef NO_LOG +#ifdef USE_THREADS +#if !defined(_WIN32) && !defined(__CYGWIN__) +pthread_mutex_t logmutex = PTHREAD_MUTEX_INITIALIZER; +#else +CRITICAL_SECTION logmutex; +#endif // !defined(_WIN32) && !defined(__CYGWIN__) +#endif // USE_THREADS +#endif // NO_LOG + + + + + +/* + * Helper functions used by other modules + */ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef _WIN32 +#include +#endif // _WIN32 +#include +#include +#include +#include +#include "helpers.h" +#include "output.h" +#include "endian.h" +#include "shared_globals.h" + + +/* + * UCS2 <-> UTF-8 functions + * All functions use little endian UCS2 since we only need it to communicate with Windows via RPC + */ + +// Convert one character from UTF-8 to UCS2 +// Returns 0xffff, if utf-8 evaluates to > 0xfffe (outside basic multilingual pane) +WCHAR utf8_to_ucs2_char (const unsigned char *input, const unsigned char **end_ptr) +{ + *end_ptr = input; + if (input[0] == 0) + return ~0; + + if (input[0] < 0x80) { + *end_ptr = input + 1; + return LE16(input[0]); + } + + if ((input[0] & 0xE0) == 0xE0) { + + if (input[1] == 0 || input[2] == 0) + return ~0; + + *end_ptr = input + 3; + + return + LE16((input[0] & 0x0F)<<12 | + (input[1] & 0x3F)<<6 | + (input[2] & 0x3F)); + } + + if ((input[0] & 0xC0) == 0xC0) { + if (input[1] == 0) + return ~0; + + *end_ptr = input + 2; + + return + LE16((input[0] & 0x1F)<<6 | + (input[1] & 0x3F)); + } + return ~0; +} + +// Convert one character from UCS2 to UTF-8 +// Returns length of UTF-8 char (1, 2 or 3) or -1 on error (UTF-16 outside UCS2) +// char *utf8 must be large enough to hold 3 bytes +int ucs2_to_utf8_char (const WCHAR ucs2_le, char *utf8) +{ + const WCHAR ucs2 = LE16(ucs2_le); + + if (ucs2 < 0x80) { + utf8[0] = ucs2; + utf8[1] = '\0'; + return 1; + } + + if (ucs2 >= 0x80 && ucs2 < 0x800) { + utf8[0] = (ucs2 >> 6) | 0xC0; + utf8[1] = (ucs2 & 0x3F) | 0x80; + utf8[2] = '\0'; + return 2; + } + + if (ucs2 >= 0x800 && ucs2 < 0xFFFF) { + + if (ucs2 >= 0xD800 && ucs2 <= 0xDFFF) { + /* Ill-formed (UTF-16 ouside of BMP) */ + return -1; + } + + utf8[0] = ((ucs2 >> 12) ) | 0xE0; + utf8[1] = ((ucs2 >> 6 ) & 0x3F) | 0x80; + utf8[2] = ((ucs2 ) & 0x3F) | 0x80; + utf8[3] = '\0'; + return 3; + } + + return -1; +} + + +// Converts UTF8 to UCS2. Returns size in bytes of the converted string or -1 on error +size_t utf8_to_ucs2(WCHAR* const ucs2_le, const char* const utf8, const size_t maxucs2, const size_t maxutf8) +{ + const unsigned char* current_utf8 = (unsigned char*)utf8; + WCHAR* current_ucs2_le = ucs2_le; + + for (; *current_utf8; current_ucs2_le++) + { + size_t size = (char*)current_utf8 - utf8; + + if (size >= maxutf8) return (size_t)-1; + if (((*current_utf8 & 0xc0) == 0xc0) && (size >= maxutf8 - 1)) return (size_t)-1; + if (((*current_utf8 & 0xe0) == 0xe0) && (size >= maxutf8 - 2)) return (size_t)-1; + if (current_ucs2_le - ucs2_le >= (intptr_t)maxucs2 - 1) return (size_t)-1; + + *current_ucs2_le = utf8_to_ucs2_char(current_utf8, ¤t_utf8); + current_ucs2_le[1] = 0; + + if (*current_ucs2_le == (WCHAR)-1) return (size_t)-1; + } + return current_ucs2_le - ucs2_le; +} + +// Converts UCS2 to UTF-8. Return TRUE or FALSE +BOOL ucs2_to_utf8(const WCHAR* const ucs2_le, char* utf8, size_t maxucs2, size_t maxutf8) +{ + char utf8_char[4]; + const WCHAR* current_ucs2 = ucs2_le; + unsigned int index_utf8 = 0; + + for(*utf8 = 0; *current_ucs2; current_ucs2++) + { + if (current_ucs2 - ucs2_le > (intptr_t)maxucs2) return FALSE; + int len = ucs2_to_utf8_char(*current_ucs2, utf8_char); + if (index_utf8 + len > maxutf8) return FALSE; + strncat(utf8, utf8_char, len); + index_utf8+=len; + } + + return TRUE; +} + +/* End of UTF-8 <-> UCS2 conversion */ + + +// Checks, whether a string is a valid integer number between min and max. Returns TRUE or FALSE. Puts int value in *value +BOOL stringToInt(const char *const szValue, const unsigned int min, const unsigned int max, unsigned int *const value) +{ + char *nextchar; + + errno = 0; + long long result = strtoll(szValue, &nextchar, 10); + + if (errno || result < (long long)min || result > (long long)max || *nextchar) + { + return FALSE; + } + + *value = (unsigned int)result; + return TRUE; +} + + +//Converts a String Guid to a host binary guid in host endianess +int_fast8_t string2Uuid(const char *const restrict input, GUID *const restrict guid) +{ + int i; + + if (strlen(input) < GUID_STRING_LENGTH) return FALSE; + if (input[8] != '-' || input[13] != '-' || input[18] != '-' || input[23] != '-') return FALSE; + + for (i = 0; i < GUID_STRING_LENGTH; i++) + { + if (i == 8 || i == 13 || i == 18 || i == 23) continue; + + const char c = toupper((int)input[i]); + + if (c < '0' || c > 'F' || (c > '9' && c < 'A')) return FALSE; + } + + char inputCopy[GUID_STRING_LENGTH + 1]; + strncpy(inputCopy, input, GUID_STRING_LENGTH + 1); + inputCopy[8] = inputCopy[13] = inputCopy[18] = 0; + + hex2bin((BYTE*)&guid->Data1, inputCopy, 8); + hex2bin((BYTE*)&guid->Data2, inputCopy + 9, 4); + hex2bin((BYTE*)&guid->Data3, inputCopy + 14, 4); + hex2bin(guid->Data4, input + 19, 16); + + guid->Data1 = BE32(guid->Data1); + guid->Data2 = BE16(guid->Data2); + guid->Data3 = BE16(guid->Data3); + return TRUE; +} + + +// convert GUID to little-endian +void LEGUID(GUID *const restrict out, const GUID* const restrict in) +{ + #if __BYTE_ORDER != __LITTLE_ENDIAN + out->Data1 = LE32(in->Data1); + out->Data2 = LE16(in->Data2); + out->Data3 = LE16(in->Data3); + memcpy(out->Data4, in->Data4, sizeof(out->Data4)); + #else + memcpy(out, in, sizeof(GUID)); + #endif +} + + +//Checks a command line argument if it is numeric and between min and max. Returns the numeric value or exits on error +__pure unsigned int getOptionArgumentInt(const char o, const unsigned int min, const unsigned int max) +{ + unsigned int result; + + if (!stringToInt(optarg, min, max, &result)) + { + printerrorf("Fatal: Option \"-%c\" must be numeric between %u and %u.\n", o, min, max); + exit(!0); + } + + return result; +} + + +// Resets getopt() to start parsing from the beginning +void optReset(void) +{ + #if __minix__ || defined(__BSD__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) + optind = 1; + optreset = 1; // Makes newer BSD getopt happy + #elif defined(__UCLIBC__) // uClibc headers also define __GLIBC__ so be careful here + optind = 0; // uClibc seeks compatibility with GLIBC + #elif defined(__GLIBC__) + optind = 0; // Makes GLIBC getopt happy + #else // Standard for most systems + optind = 1; + #endif +} + + +#if defined(_WIN32) || defined(USE_MSRPC) + +// Returns a static message buffer containing text for a given Win32 error. Not thread safe (same as strerror) +char* win_strerror(const int message) +{ + #define STRERROR_BUFFER_SIZE 256 + static char buffer[STRERROR_BUFFER_SIZE]; + + FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, NULL, message, 0, buffer, STRERROR_BUFFER_SIZE, NULL); + return buffer; +} + +#endif // defined(_WIN32) || defined(USE_MSRPC) + + +/* + * parses an address in the form host:[port] in addr + * returns host and port in seperate strings + */ +void parseAddress(char *const addr, char** szHost, char** szPort) +{ + *szHost = addr; + +# ifndef NO_SOCKETS + *szPort = (char*)defaultport; +# else // NO_SOCKETS + *szPort = "1688"; +# endif // NO_SOCKETS + + char *lastcolon = strrchr(addr, ':'); + char *firstcolon = strchr(addr, ':'); + char *closingbracket = strrchr(addr, ']'); + + if (*addr == '[' && closingbracket) //Address in brackets + { + *closingbracket = 0; + (*szHost)++; + + if (closingbracket[1] == ':') + *szPort = closingbracket + 2; + } + else if (firstcolon && firstcolon == lastcolon) //IPv4 address or hostname with port + { + *firstcolon = 0; + *szPort = firstcolon + 1; + } +} + + +// Initialize random generator (needs to be done in each thread) +void randomNumberInit() +{ + struct timeval tv; + gettimeofday(&tv, NULL); + srand((unsigned int)(tv.tv_sec ^ tv.tv_usec)); +} + + +// We always exit immediately if any OOM condition occurs +__noreturn void OutOfMemory(void) +{ + errorout("Fatal: Out of memory"); + exit(!0); +} + + +void* vlmcsd_malloc(size_t len) +{ + void* buf = malloc(len); + if (!buf) OutOfMemory(); + return buf; +} + + +/* + * Converts hex digits to bytes in big-endian order. + * Ignores any non-hex characters + */ +void hex2bin(BYTE *const bin, const char *hex, const size_t maxbin) +{ + static const char *const hexdigits = "0123456789ABCDEF"; + char* nextchar; + size_t i; + + for (i = 0; (i < 16) && utf8_to_ucs2_char((const unsigned char*)hex, (const unsigned char**)&nextchar) != (WCHAR)-1; hex = nextchar) + { + const char* pos = strchr(hexdigits, toupper((int)*hex)); + if (!pos) continue; + + if (!(i & 1)) bin[i >> 1] = 0; + bin[i >> 1] |= (char)(pos - hexdigits); + if (!(i & 1)) bin[i >> 1] <<= 4; + i++; + if (i >> 1 > maxbin) break; + } +} + + +__pure BOOL getArgumentBool(int_fast8_t *result, const char *const argument) +{ + if ( + !strncasecmp(argument, "true", 4) || + !strncasecmp(argument, "on", 4) || + !strncasecmp(argument, "yes", 3) || + !strncasecmp(argument, "1", 1) + ) + { + *result = TRUE; + return TRUE; + } + else if ( + !strncasecmp(argument, "false", 5) || + !strncasecmp(argument, "off", 3) || + !strncasecmp(argument, "no", 2) || + !strncasecmp(argument, "0", 1) + ) + { + *result = FALSE; + return TRUE; + } + + return FALSE; +} + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef USE_MSRPC + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include +#ifndef _WIN32 +#include +#include +#include +#include +#include +#endif // WIN32 + +#include "network.h" +#include "endian.h" +#include "output.h" +#include "helpers.h" +#include "shared_globals.h" +#include "rpc.h" + + +#ifndef _WIN32 +typedef ssize_t (*sendrecv_t)(int, void*, size_t, int); +#else +typedef int (WINAPI *sendrecv_t)(SOCKET, void*, int, int); +#endif + + +// Send or receive a fixed number of bytes regardless if received in one or more chunks +int_fast8_t sendrecv(SOCKET sock, BYTE *data, int len, int_fast8_t do_send) +{ + int n; + sendrecv_t f = do_send + ? (sendrecv_t) send + : (sendrecv_t) recv; + + do + { + n = f(sock, data, len, 0); + } + while ( + ( n < 0 && socket_errno == VLMCSD_EINTR ) || ( n > 0 && ( data += n, (len -= n) > 0 ) )); + + return ! len; +} + + +static int_fast8_t ip2str(char *restrict result, const size_t resultLength, const struct sockaddr *const restrict socketAddress, const socklen_t socketLength) +{ + static const char *const fIPv4 = "%s:%s"; + static const char *const fIPv6 = "[%s]:%s"; + char ipAddress[64], portNumber[8]; + + if (getnameinfo + ( + socketAddress, + socketLength, + ipAddress, + sizeof(ipAddress), + portNumber, + sizeof(portNumber), + NI_NUMERICHOST | NI_NUMERICSERV + )) + { + return FALSE; + } + + if ((unsigned int)snprintf(result, resultLength, socketAddress->sa_family == AF_INET6 ? fIPv6 : fIPv4, ipAddress, portNumber) > resultLength) return FALSE; + return TRUE; +} + + +static int_fast8_t getSocketList(struct addrinfo **saList, const char *const addr, const int flags, const int AddressFamily) +{ + int status; + char *szHost, *szPort; + size_t len = strlen(addr) + 1; + + // Don't alloca too much + if (len > 264) return FALSE; + + char *addrcopy = (char*)alloca(len); + memcpy(addrcopy, addr, len); + + parseAddress(addrcopy, &szHost, &szPort); + + struct addrinfo hints; + + memset(&hints, 0, sizeof(struct addrinfo)); + + hints.ai_family = AddressFamily; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + hints.ai_flags = flags; + + if ((status = getaddrinfo(szHost, szPort, &hints, saList))) + { + printerrorf("Warning: %s: %s\n", addr, gai_strerror(status)); + return FALSE; + } + + return TRUE; +} + + +static int_fast8_t setBlockingEnabled(SOCKET fd, int_fast8_t blocking) +{ + if (fd == INVALID_SOCKET) return FALSE; + + #ifdef _WIN32 + + unsigned long mode = blocking ? 0 : 1; + return (ioctlsocket(fd, FIONBIO, &mode) == 0) ? TRUE : FALSE; + + #else // POSIX + + int flags = fcntl(fd, F_GETFL, 0); + + if (flags < 0) return FALSE; + + flags = blocking ? (flags & ~O_NONBLOCK) : (flags | O_NONBLOCK); + return (fcntl(fd, F_SETFL, flags) == 0) ? TRUE : FALSE; + + #endif // POSIX +} + + +int_fast8_t isDisconnected(const SOCKET s) +{ + char buffer[1]; + + if (!setBlockingEnabled(s, FALSE)) return TRUE; + + int n = recv(s, buffer, 1, MSG_PEEK); + + if (!setBlockingEnabled(s, TRUE)) return TRUE; + if (n == 0) return TRUE; + + return FALSE; +} + + +// Connect to TCP address addr (e.g. "kms.example.com:1688") and return an +// open socket for the connection if successful or INVALID_SOCKET otherwise +SOCKET connectToAddress(const char *const addr, const int AddressFamily, int_fast8_t showHostName) +{ + struct addrinfo *saList, *sa; + SOCKET s = INVALID_SOCKET; + char szAddr[128]; + + if (!getSocketList(&saList, addr, 0, AddressFamily)) return INVALID_SOCKET; + + for (sa = saList; sa; sa = sa->ai_next) + { + // struct sockaddr_in* addr4 = (struct sockaddr_in*)sa->ai_addr; + // struct sockaddr_in6* addr6 = (struct sockaddr_in6*)sa->ai_addr; + + if (ip2str(szAddr, sizeof(szAddr), sa->ai_addr, sa->ai_addrlen)) + { + if (showHostName) + printf("Connecting to %s (%s) ... ", addr, szAddr); + else + printf("Connecting to %s ... ", szAddr); + + fflush(stdout); + } + + s = socket(sa->ai_family, SOCK_STREAM, IPPROTO_TCP); + +# if !defined(NO_TIMEOUT) && !__minix__ +# ifndef _WIN32 // Standard Posix timeout structure + + struct timeval to; + to.tv_sec = 10; + to.tv_usec = 0; + +# else // Windows requires a DWORD with milliseconds + + DWORD to = 10000; + +# endif // _WIN32 + + setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (sockopt_t)&to, sizeof(to)); + setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, (sockopt_t)&to, sizeof(to)); +# endif // !defined(NO_TIMEOUT) && !__minix__ + + if (!connect(s, sa->ai_addr, sa->ai_addrlen)) + { + printf("successful\n"); + break; + } + + errorout("%s\n", socket_errno == VLMCSD_EINPROGRESS ? "Timed out" : vlmcsd_strerror(socket_errno)); + + socketclose(s); + s = INVALID_SOCKET; + } + + freeaddrinfo(saList); + return s; +} + + +#ifndef NO_SOCKETS + +// Create a Listening socket for addrinfo sa and return socket s +// szHost and szPort are for logging only +static int listenOnAddress(const struct addrinfo *const ai, SOCKET *s) +{ + int error; + char ipstr[64]; + + ip2str(ipstr, sizeof(ipstr), ai->ai_addr, ai->ai_addrlen); + + //*s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); + *s = socket(ai->ai_family, SOCK_STREAM, IPPROTO_TCP); + + if (*s == INVALID_SOCKET) + { + error = socket_errno; + printerrorf("Warning: %s error. %s\n", ai->ai_family == AF_INET6 ? cIPv6 : cIPv4, vlmcsd_strerror(error)); + return error; + } + +# if !defined(_WIN32) && !defined(NO_SIGHUP) + + int flags = fcntl(*s, F_GETFD, 0); + + if (flags != -1) + { + flags |= FD_CLOEXEC; + fcntl(*s, F_SETFD, flags); + } +# ifdef _PEDANTIC + else + { + printerrorf("Warning: Could not set FD_CLOEXEC flag on %s: %s\n", ipstr, vlmcsd_strerror(errno)); + } +# endif // _PEDANTIC + +# endif // !defined(_WIN32) && !defined(NO_SIGHUP) + + BOOL socketOption = TRUE; + + // fix for lame tomato toolchain +# ifndef IPV6_V6ONLY +# ifdef __linux__ +# define IPV6_V6ONLY (26) +# endif // __linux__ +# endif // IPV6_V6ONLY + +# ifdef IPV6_V6ONLY + if (ai->ai_family == AF_INET6) setsockopt(*s, IPPROTO_IPV6, IPV6_V6ONLY, (sockopt_t)&socketOption, sizeof(socketOption)); +# endif + +# ifndef _WIN32 + setsockopt(*s, SOL_SOCKET, SO_REUSEADDR, (sockopt_t)&socketOption, sizeof(socketOption)); +# endif + + if (bind(*s, ai->ai_addr, ai->ai_addrlen) || listen(*s, SOMAXCONN)) + { + error = socket_errno; + printerrorf("Warning: %s: %s\n", ipstr, vlmcsd_strerror(error)); + socketclose(*s); + return error; + } + +# ifndef NO_LOG + logger("Listening on %s\n", ipstr); +# endif + + return 0; +} + + +// Adds a listening socket for an address string, +// e.g. 127.0.0.1:1688 or [2001:db8:dead:beef::1]:1688 +BOOL addListeningSocket(const char *const addr) +{ + struct addrinfo *aiList, *ai; + int result = FALSE; + SOCKET *s = SocketList + numsockets; + + if (getSocketList(&aiList, addr, AI_PASSIVE | AI_NUMERICHOST, AF_UNSPEC)) + { + for (ai = aiList; ai; ai = ai->ai_next) + { + // struct sockaddr_in* addr4 = (struct sockaddr_in*)sa->ai_addr; + // struct sockaddr_in6* addr6 = (struct sockaddr_in6*)sa->ai_addr; + + if (numsockets >= FD_SETSIZE) + { + #ifdef _PEDANTIC // Do not report this error in normal builds to keep file size low + printerrorf("Warning: Cannot listen on %s. Your OS only supports %u listening sockets in an FD_SET.\n", addr, FD_SETSIZE); + #endif + break; + } + + if (!listenOnAddress(ai, s)) + { + numsockets++; + result = TRUE; + } + } + + freeaddrinfo(aiList); + } + return result; +} + + +// Just create some dummy sockets to see if we have a specific protocol (IPv4 or IPv6) +__pure int_fast8_t checkProtocolStack(const int addressfamily) +{ + SOCKET s; // = INVALID_SOCKET; + + s = socket(addressfamily, SOCK_STREAM, 0); + int_fast8_t success = (s != INVALID_SOCKET); + + socketclose(s); + return success; +} + + +// Build an fd_set of all listening socket then use select to wait for an incoming connection +static SOCKET network_accept_any() +{ + fd_set ListeningSocketsList; + SOCKET maxSocket, sock; + int i; + int status; + + FD_ZERO(&ListeningSocketsList); + maxSocket = 0; + + for (i = 0; i < numsockets; i++) + { + FD_SET(SocketList[i], &ListeningSocketsList); + if (SocketList[i] > maxSocket) maxSocket = SocketList[i]; + } + + status = select(maxSocket + 1, &ListeningSocketsList, NULL, NULL, NULL); + + if (status < 0) return INVALID_SOCKET; + + sock = INVALID_SOCKET; + + for (i = 0; i < numsockets; i++) + { + if (FD_ISSET(SocketList[i], &ListeningSocketsList)) + { + sock = SocketList[i]; + break; + } + } + + if (sock == INVALID_SOCKET) + return INVALID_SOCKET; + else + return accept(sock, NULL, NULL); +} + + +void closeAllListeningSockets() +{ + int i; + + for (i = 0; i < numsockets; i++) + { + shutdown(SocketList[i], VLMCSD_SHUT_RDWR); + socketclose(SocketList[i]); + } +} +#endif // NO_SOCKETS + + +static void serveClient(const SOCKET s_client, const DWORD RpcAssocGroup) +{ +# if !defined(NO_TIMEOUT) && !__minix__ + +# ifndef _WIN32 // Standard Posix timeout structure + + struct timeval to; + to.tv_sec = ServerTimeout; + to.tv_usec = 0; + + #else // Windows requires a DWORD with milliseconds + + DWORD to = ServerTimeout * 1000; + +# endif // _WIN32 + +# if !defined(NO_LOG) && defined(_PEDANTIC) + + int result = + setsockopt(s_client, SOL_SOCKET, SO_RCVTIMEO, (sockopt_t)&to, sizeof(to)) || + setsockopt(s_client, SOL_SOCKET, SO_SNDTIMEO, (sockopt_t)&to, sizeof(to)); + + if (result) logger("Warning: Set timeout failed: %s\n", vlmcsd_strerror(socket_errno)); + +# else // !(!defined(NO_LOG) && defined(_PEDANTIC)) + + setsockopt(s_client, SOL_SOCKET, SO_RCVTIMEO, (sockopt_t)&to, sizeof(to)); + setsockopt(s_client, SOL_SOCKET, SO_SNDTIMEO, (sockopt_t)&to, sizeof(to)); + +# endif // !(!defined(NO_LOG) && defined(_PEDANTIC)) + +# endif // !defined(NO_TIMEOUT) && !__minix__ + + char ipstr[64]; + socklen_t len; + struct sockaddr_storage addr; + + len = sizeof addr; + + if (getpeername(s_client, (struct sockaddr*)&addr, &len) || + !ip2str(ipstr, sizeof(ipstr), (struct sockaddr*)&addr, len)) + { +# if !defined(NO_LOG) && defined(_PEDANTIC) + logger("Fatal: Cannot determine client's IP address: %s\n", vlmcsd_strerror(errno)); +# endif // !defined(NO_LOG) && defined(_PEDANTIC) + socketclose(s_client); + return; + } + + +# ifndef NO_LOG + const char *const connection_type = addr.ss_family == AF_INET6 ? cIPv6 : cIPv4; + static const char *const cAccepted = "accepted"; + static const char *const cClosed = "closed"; + static const char *const fIP = "%s connection %s: %s.\n"; + + logger(fIP, connection_type, cAccepted, ipstr); + #endif // NO_LOG + + rpcServer(s_client, RpcAssocGroup, ipstr); + +# ifndef NO_LOG + logger(fIP, connection_type, cClosed, ipstr); +# endif // NO_LOG + + socketclose(s_client); +} + + +#ifndef NO_SOCKETS +static void post_sem(void) +{ + #if !defined(NO_LIMIT) && !__minix__ + if (!InetdMode && MaxTasks != SEM_VALUE_MAX) + { + semaphore_post(Semaphore); + } + #endif // !defined(NO_LIMIT) && !__minix__ +} + + +static void wait_sem(void) +{ + #if !defined(NO_LIMIT) && !__minix__ + if (!InetdMode && MaxTasks != SEM_VALUE_MAX) + { + semaphore_wait(Semaphore); + } + #endif // !defined(NO_LIMIT) && !__minix__ +} +#endif // NO_SOCKETS + +#if defined(USE_THREADS) && !defined(NO_SOCKETS) + +#if defined(_WIN32) || defined(__CYGWIN__) // Win32 Threads +static DWORD WINAPI serveClientThreadProc(PCLDATA clData) +#else // Posix threads +static void *serveClientThreadProc (PCLDATA clData) +#endif // Thread proc is identical in WIN32 and Posix threads +{ + serveClient(clData->socket, clData->RpcAssocGroup); + free(clData); + post_sem(); + + return 0; +} + +#endif // USE_THREADS + + +#ifndef NO_SOCKETS + +#if defined(USE_THREADS) && (defined(_WIN32) || defined(__CYGWIN__)) // Windows Threads +static int serveClientAsyncWinThreads(const PCLDATA thr_CLData) +{ + wait_sem(); + + HANDLE h = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)serveClientThreadProc, thr_CLData, 0, NULL); + + if (h) + CloseHandle(h); + else + { + socketclose(thr_CLData->socket); + free(thr_CLData); + post_sem(); + return GetLastError(); + } + + return NO_ERROR; +} +#endif // defined(USE_THREADS) && defined(_WIN32) // Windows Threads + + +#if defined(USE_THREADS) && !defined(_WIN32) && !defined(__CYGWIN__) // Posix Threads +static int ServeClientAsyncPosixThreads(const PCLDATA thr_CLData) +{ + pthread_t p_thr; + pthread_attr_t attr; + + wait_sem(); + + // Must set detached state to avoid memory leak + if (pthread_attr_init(&attr) || + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) || + pthread_create(&p_thr, &attr, (void * (*)(void *))serveClientThreadProc, thr_CLData)) + { + socketclose(thr_CLData->socket); + free(thr_CLData); + post_sem(); + return !0; + } + + return 0; +} +#endif // defined(USE_THREADS) && !defined(_WIN32) // Posix Threads + +#ifndef USE_THREADS // fork() implementation +static void ChildSignalHandler(const int signal) +{ + if (signal == SIGHUP) return; + + post_sem(); + + #ifndef NO_LOG + logger("Warning: Child killed/crashed by %s\n", strsignal(signal)); + #endif // NO_LOG + + exit(!0); +} + +static int ServeClientAsyncFork(const SOCKET s_client, const DWORD RpcAssocGroup) +{ + int pid; + wait_sem(); + + if ((pid = fork()) < 0) + { + return errno; + } + else if ( pid ) + { + // Parent process + socketclose(s_client); + return 0; + } + else + { + // Child process + + // Setup a Child Handler for most common termination signals + struct sigaction sa; + + sa.sa_flags = 0; + sa.sa_handler = ChildSignalHandler; + + static int signallist[] = { SIGHUP, SIGINT, SIGTERM, SIGSEGV, SIGILL, SIGFPE, SIGBUS }; + + if (!sigemptyset(&sa.sa_mask)) + { + uint_fast8_t i; + + for (i = 0; i < _countof(signallist); i++) + { + sigaction(signallist[i], &sa, NULL); + } + } + + serveClient(s_client, RpcAssocGroup); + post_sem(); + exit(0); + } +} +#endif + + +int serveClientAsync(const SOCKET s_client, const DWORD RpcAssocGroup) +{ + #ifndef USE_THREADS // fork() implementation + + return ServeClientAsyncFork(s_client, RpcAssocGroup); + + #else // threads implementation + + PCLDATA thr_CLData = (PCLDATA)vlmcsd_malloc(sizeof(CLDATA)); + thr_CLData->socket = s_client; + thr_CLData->RpcAssocGroup = RpcAssocGroup; + + #if defined(_WIN32) || defined (__CYGWIN__) // Windows threads + + return serveClientAsyncWinThreads(thr_CLData); + + #else // Posix Threads + + return ServeClientAsyncPosixThreads(thr_CLData); + + #endif // Posix Threads + + #endif // USE_THREADS +} + +#endif // NO_SOCKETS + + +int runServer() +{ + DWORD RpcAssocGroup = rand32(); + + // If compiled for inetd-only mode just serve the stdin socket + #ifdef NO_SOCKETS + serveClient(STDIN_FILENO, RpcAssocGroup); + return 0; + #else + // In inetd mode just handle the stdin socket + if (InetdMode) + { + serveClient(STDIN_FILENO, RpcAssocGroup); + return 0; + } + + // Standalone mode + for (;;) + { + int error; + SOCKET s_client; + + if ( (s_client = network_accept_any()) == INVALID_SOCKET ) + { + error = socket_errno; + + if (error == VLMCSD_EINTR || error == VLMCSD_ECONNABORTED) continue; + + #ifdef _NTSERVICE + if (ServiceShutdown) return 0; + #endif + + #ifndef NO_LOG + logger("Fatal: %s\n",vlmcsd_strerror(error)); + #endif + + return error; + } + + RpcAssocGroup++; + serveClientAsync(s_client, RpcAssocGroup); + } + #endif // NO_SOCKETS + + return 0; +} + +#endif // USE_MSRPC +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE +#endif // _DEFAULT_SOURCE + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef USE_MSRPC + +#include +#include +#include +#include +#include +#include +#if !defined(_WIN32) +#include +#include +#endif +#include "rpc.h" +#include "output.h" +#include "crypto.h" +#include "endian.h" +#include "helpers.h" +#include "network.h" +#include "shared_globals.h" + +/* Forwards */ + +static int checkRpcHeader(const RPC_HEADER *const Header, const BYTE desiredPacketType, const PRINTFUNC p); + + +/* Data definitions */ + +// All GUIDs are defined as BYTE[16] here. No big-endian/little-endian byteswapping required. +static const BYTE TransferSyntaxNDR32[] = { + 0x04, 0x5D, 0x88, 0x8A, 0xEB, 0x1C, 0xC9, 0x11, 0x9F, 0xE8, 0x08, 0x00, 0x2B, 0x10, 0x48, 0x60 +}; + +static const BYTE InterfaceUuid[] = { + 0x75, 0x21, 0xc8, 0x51, 0x4e, 0x84, 0x50, 0x47, 0xB0, 0xD8, 0xEC, 0x25, 0x55, 0x55, 0xBC, 0x06 +}; + +static const BYTE TransferSyntaxNDR64[] = { + 0x33, 0x05, 0x71, 0x71, 0xba, 0xbe, 0x37, 0x49, 0x83, 0x19, 0xb5, 0xdb, 0xef, 0x9c, 0xcc, 0x36 +}; + +static const BYTE BindTimeFeatureNegotiation[] = { + 0x2c, 0x1c, 0xb7, 0x6c, 0x12, 0x98, 0x40, 0x45, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + + +// +// Dispatch RPC payload to kms.c +// +typedef int (*CreateResponse_t)(const void *const, void *const, const char* const); + +static const struct { + unsigned int RequestSize; + CreateResponse_t CreateResponse; +} _Versions[] = { + { sizeof(REQUEST_V4), (CreateResponse_t) CreateResponseV4 }, + { sizeof(REQUEST_V6), (CreateResponse_t) CreateResponseV6 }, + { sizeof(REQUEST_V6), (CreateResponse_t) CreateResponseV6 } +}; + +RPC_FLAGS RpcFlags; +static int_fast8_t firstPacketSent; + +// +// RPC request (server) +// +#if defined(_PEDANTIC) && !defined(NO_LOG) +static void CheckRpcRequest(const RPC_REQUEST64 *const Request, const unsigned int len, WORD* NdrCtx, WORD* Ndr64Ctx, WORD Ctx) +{ + uint_fast8_t kmsMajorVersion; + uint32_t requestSize = Ctx != *Ndr64Ctx ? sizeof(RPC_REQUEST) : sizeof(RPC_REQUEST64); + + if (len < requestSize) + { + logger("Fatal: RPC request (including header) must be at least %i bytes but is only %i bytes.\n", + (int)(sizeof(RPC_HEADER) + requestSize), + (int)(len + sizeof(RPC_HEADER)) + ); + + return; + } + + if (len < requestSize + sizeof(DWORD)) + { + logger("Fatal: KMS Request too small to contain version info (less than 4 bytes).\n"); + return; + } + + if (Ctx != *Ndr64Ctx) + kmsMajorVersion = LE16(((WORD*)Request->Ndr.Data)[1]); + else + kmsMajorVersion = LE16(((WORD*)Request->Ndr64.Data)[1]); + + if (kmsMajorVersion > 6) + { + logger("Fatal: KMSv%u is not supported.\n", (unsigned int)kmsMajorVersion); + } + else + { + if (len >_Versions[kmsMajorVersion].RequestSize + requestSize) + logger("Warning: %u excess bytes in RPC request.\n", + len - _Versions[kmsMajorVersion].RequestSize + ); + } + + if (Ctx != *Ndr64Ctx && Ctx != *NdrCtx) + logger("Warning: Context id should be %u (NDR32) or %u (NDR64) but is %u.\n", + (unsigned int)*NdrCtx, + (unsigned int)*Ndr64Ctx, + Ctx + ); + + if (Request->Opnum) + logger("Warning: OpNum should be 0 but is %u.\n", + (unsigned int)LE16(Request->Opnum) + ); + + if (LE32(Request->AllocHint) != len - sizeof(RPC_REQUEST) + sizeof(Request->Ndr)) + logger("Warning: Allocation hint should be %u but is %u.\n", + len + sizeof(Request->Ndr), + LE32(Request->AllocHint) + ); + + if (Ctx != *Ndr64Ctx) + { + if (LE32(Request->Ndr.DataLength) != len - sizeof(RPC_REQUEST)) + logger("Warning: NDR32 data length field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST), + LE32(Request->Ndr.DataLength) + ); + + if (LE32(Request->Ndr.DataSizeIs) != len - sizeof(RPC_REQUEST)) + logger("Warning: NDR32 data size field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST), + LE32(Request->Ndr.DataSizeIs) + ); + } + else + { + if (LE64(Request->Ndr64.DataLength) != len - sizeof(RPC_REQUEST64)) + logger("Warning: NDR32 data length field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST) + sizeof(Request->Ndr), + LE64(Request->Ndr64.DataLength) + ); + + if (LE64(Request->Ndr64.DataSizeIs) != len - sizeof(RPC_REQUEST64)) + logger("Warning: NDR32 data size field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST64), + LE64(Request->Ndr64.DataSizeIs) + ); + } +} +#endif // defined(_PEDANTIC) && !defined(NO_LOG) + +/* + * check RPC request for (somewhat) correct size + * allow any size that does not cause CreateResponse to fail badly + */ +static unsigned int checkRpcRequestSize(const RPC_REQUEST64 *const Request, const unsigned int requestSize, WORD* NdrCtx, WORD* Ndr64Ctx) +{ + WORD Ctx = LE16(Request->ContextId); + +# if defined(_PEDANTIC) && !defined(NO_LOG) + CheckRpcRequest(Request, requestSize, NdrCtx, Ndr64Ctx, Ctx); +# endif // defined(_PEDANTIC) && !defined(NO_LOG) + + // Anything that is smaller than a v4 request is illegal + if (requestSize < sizeof(REQUEST_V4) + (Ctx != *Ndr64Ctx ? sizeof(RPC_REQUEST) : sizeof(RPC_REQUEST64))) return 0; + + // Get KMS major version + uint_fast16_t _v; + + if (Ctx != *Ndr64Ctx) + _v = LE16(((WORD*)Request->Ndr.Data)[1]) - 4; + else + _v = LE16(((WORD*)Request->Ndr64.Data)[1]) - 4; + + // Only KMS v4, v5 and v6 are supported + if (_v >= vlmcsd_countof(_Versions)) + { +# ifndef NO_LOG + logger("Fatal: KMSv%i unsupported\n", _v + 4); +# endif // NO_LOG + return 0; + } + + // Could check for equality but allow bigger requests to support buggy RPC clients (e.g. wine) + // Buffer overrun is check by caller. + return (requestSize >= _Versions[_v].RequestSize); +} + + +/* + * Handles the actual KMS request from the client. + * Calls KMS functions (CreateResponseV4 or CreateResponseV6) in kms.c + * Returns size of the KMS response packet or 0 on failure. + * + * The RPC packet size (excluding header) is actually in Response->AllocHint + */ +static int rpcRequest(const RPC_REQUEST64 *const Request, RPC_RESPONSE64 *const Response, const DWORD RpcAssocGroup_unused, const SOCKET sock_unused, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE packetType, const char* const ipstr) +{ + uint_fast16_t _v; + int ResponseSize; + WORD Ctx = LE16(Request->ContextId); + BYTE* requestData; + BYTE* responseData; + BYTE* pRpcReturnCode; + int len; + + if (Ctx != *Ndr64Ctx) + { + requestData = (BYTE*)&Request->Ndr.Data; + responseData = (BYTE*)&Response->Ndr.Data; + } + else + { + requestData = (BYTE*)&Request->Ndr64.Data; + responseData = (BYTE*)&Response->Ndr64.Data; + } + + _v = LE16(((WORD*)requestData)[1]) - 4; + + if (!(ResponseSize = _Versions[_v].CreateResponse(requestData, responseData, ipstr))) + { + return 0; + } + + if (Ctx != *Ndr64Ctx) + { + Response->Ndr.DataSizeMax = LE32(0x00020000); + Response->Ndr.DataLength = Response->Ndr.DataSizeIs = LE32(ResponseSize); + len = ResponseSize + sizeof(Response->Ndr); + } + else + { + Response->Ndr64.DataSizeMax = LE64(0x00020000ULL); + Response->Ndr64.DataLength = Response->Ndr64.DataSizeIs = LE64((uint64_t)ResponseSize); + len = ResponseSize + sizeof(Response->Ndr64); + } + + pRpcReturnCode = ((BYTE*)&Response->Ndr) + len; + UA32(pRpcReturnCode) = 0; //LE32 not needed for 0 + len += sizeof(DWORD); + + // Pad zeros to 32-bit align (seems not neccassary but Windows RPC does it this way) + int pad = ((~len & 3) + 1) & 3; + memset(pRpcReturnCode + sizeof(DWORD), 0, pad); + len += pad; + + Response->AllocHint = LE32(len); + Response->ContextId = Request->ContextId; + + *((WORD*)&Response->CancelCount) = 0; // CancelCount + Pad1 + + return len + 8; +} + + +#if defined(_PEDANTIC) && !defined(NO_LOG) +static void CheckRpcBindRequest(const RPC_BIND_REQUEST *const Request, const unsigned int len) +{ + uint_fast8_t i, HasTransferSyntaxNDR32 = FALSE; + char guidBuffer1[GUID_STRING_LENGTH + 1], guidBuffer2[GUID_STRING_LENGTH + 1]; + + uint32_t CapCtxItems = (len - sizeof(*Request) + sizeof(Request->CtxItems)) / sizeof(Request->CtxItems); + DWORD NumCtxItems = LE32(Request->NumCtxItems); + + if (NumCtxItems < CapCtxItems) // Can't be too small because already handled by RpcBindSize + logger("Warning: Excess bytes in RPC bind request.\n"); + + for (i = 0; i < NumCtxItems; i++) + { + if (!IsEqualGUID(&Request->CtxItems[i].InterfaceUUID, InterfaceUuid)) + { + uuid2StringLE((GUID*)&Request->CtxItems[i].InterfaceUUID, guidBuffer1); + uuid2StringLE((GUID*)InterfaceUuid, guidBuffer2); + logger("Warning: Interface UUID is %s but should be %s in Ctx item %u.\n", guidBuffer1, guidBuffer2, (unsigned int)i); + } + + if (Request->CtxItems[i].NumTransItems != LE16(1)) + logger("Fatal: %u NDR32 transfer items detected in Ctx item %u, but only one is supported.\n", + (unsigned int)LE16(Request->CtxItems[i].NumTransItems), (unsigned int)i + ); + + if (Request->CtxItems[i].InterfaceVerMajor != LE16(1) || Request->CtxItems[i].InterfaceVerMinor != 0) + logger("Warning: NDR32 Interface version is %u.%u but should be 1.0.\n", + (unsigned int)LE16(Request->CtxItems[i].InterfaceVerMajor), + (unsigned int)LE16(Request->CtxItems[i].InterfaceVerMinor) + ); + + if (Request->CtxItems[i].ContextId != LE16((WORD)i)) + logger("Warning: context id of Ctx item %u is %u.\n", (unsigned int)i, (unsigned int)Request->CtxItems[i].ContextId); + + if ( IsEqualGUID((GUID*)TransferSyntaxNDR32, &Request->CtxItems[i].TransferSyntax) ) + { + HasTransferSyntaxNDR32 = TRUE; + + if (Request->CtxItems[i].SyntaxVersion != LE32(2)) + logger("NDR32 transfer syntax version is %u but should be 2.\n", LE32(Request->CtxItems[i].SyntaxVersion)); + } + else if ( IsEqualGUID((GUID*)TransferSyntaxNDR64, &Request->CtxItems[i].TransferSyntax) ) + { + if (Request->CtxItems[i].SyntaxVersion != LE32(1)) + logger("NDR64 transfer syntax version is %u but should be 1.\n", LE32(Request->CtxItems[i].SyntaxVersion)); + } + else if (!memcmp(BindTimeFeatureNegotiation, (BYTE*)(&Request->CtxItems[i].TransferSyntax), 8)) + { + if (Request->CtxItems[i].SyntaxVersion != LE32(1)) + logger("BTFN syntax version is %u but should be 1.\n", LE32(Request->CtxItems[i].SyntaxVersion)); + } + } + + if (!HasTransferSyntaxNDR32) + logger("Warning: RPC bind request has no NDR32 CtxItem.\n"); +} +#endif // defined(_PEDANTIC) && !defined(NO_LOG) + + +/* + * Check, if we receive enough bytes to return a valid RPC bind response + */ +static unsigned int checkRpcBindSize(const RPC_BIND_REQUEST *const Request, const unsigned int RequestSize, WORD* NdrCtx, WORD* Ndr64Ctx) +{ + if ( RequestSize < sizeof(RPC_BIND_REQUEST) ) return FALSE; + + unsigned int _NumCtxItems = LE32(Request->NumCtxItems); + + if ( RequestSize < sizeof(RPC_BIND_REQUEST) - sizeof(Request->CtxItems[0]) + _NumCtxItems * sizeof(Request->CtxItems[0]) ) return FALSE; + + #if defined(_PEDANTIC) && !defined(NO_LOG) + CheckRpcBindRequest(Request, RequestSize); + #endif // defined(_PEDANTIC) && !defined(NO_LOG) + + return TRUE; +} + + +/* + * Accepts a bind or alter context request from the client and composes the bind response. + * Needs the socket because the tcp port number is part of the response. + * len is not used here. + * + * Returns TRUE on success. + */ +static int rpcBind(const RPC_BIND_REQUEST *const Request, RPC_BIND_RESPONSE* Response, const DWORD RpcAssocGroup, const SOCKET sock, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE packetType, const char* const ipstr_unused) +{ + unsigned int i, _st = FALSE; + DWORD numCtxItems = LE32(Request->NumCtxItems); + int_fast8_t IsNDR64possible = FALSE; + uint_fast8_t portNumberSize; + + socklen_t socklen; + struct sockaddr_storage addr; + + // M$ RPC does not do this. Pad bytes contain apparently random data + // memset(Response->SecondaryAddress, 0, sizeof(Response->SecondaryAddress)); + + socklen = sizeof addr; + + if ( + packetType == RPC_PT_ALTERCONTEXT_REQ || + getsockname(sock, (struct sockaddr*)&addr, &socklen) || + getnameinfo((struct sockaddr*)&addr, socklen, NULL, 0, (char*)Response->SecondaryAddress, sizeof(Response->SecondaryAddress), NI_NUMERICSERV)) + { + portNumberSize = Response->SecondaryAddressLength = 0; + } + else + { + portNumberSize = strlen((char*)Response->SecondaryAddress) + 1; + Response->SecondaryAddressLength = LE16(portNumberSize); + } + + Response->MaxXmitFrag = Request->MaxXmitFrag; + Response->MaxRecvFrag = Request->MaxRecvFrag; + Response->AssocGroup = LE32(RpcAssocGroup); + + // This is really ugly (but efficient) code to support padding after the secondary address field + if (portNumberSize < 3) + { + Response = (RPC_BIND_RESPONSE*)((BYTE*)Response - 4); + } + + Response->NumResults = Request->NumCtxItems; + + if (UseRpcNDR64) + { + for (i = 0; i < numCtxItems; i++) + { + if ( IsEqualGUID((GUID*)TransferSyntaxNDR32, &Request->CtxItems[i].TransferSyntax) ) + { + /*if (packetType == RPC_PT_BIND_REQ)*/ + *NdrCtx = LE16(Request->CtxItems[i].ContextId); + } + + if ( IsEqualGUID((GUID*)TransferSyntaxNDR64, &Request->CtxItems[i].TransferSyntax) ) + { + IsNDR64possible = TRUE; + + /*if (packetType == RPC_PT_BIND_REQ)*/ + *Ndr64Ctx = LE16(Request->CtxItems[i].ContextId); + } + } + } + + for (i = 0; i < numCtxItems; i++) + { + memset(&Response->Results[i].TransferSyntax, 0, sizeof(GUID)); + + if ( !IsNDR64possible && IsEqualGUID((GUID*)TransferSyntaxNDR32, &Request->CtxItems[i].TransferSyntax) ) + { + Response->Results[i].SyntaxVersion = LE32(2); + Response->Results[i].AckResult = + Response->Results[i].AckReason = RPC_BIND_ACCEPT; + memcpy(&Response->Results[i].TransferSyntax, TransferSyntaxNDR32, sizeof(GUID)); + + _st = TRUE; + } + else if ( IsNDR64possible && IsEqualGUID((GUID*)TransferSyntaxNDR64, &Request->CtxItems[i].TransferSyntax) ) + { + Response->Results[i].SyntaxVersion = LE32(1); + Response->Results[i].AckResult = + Response->Results[i].AckReason = RPC_BIND_ACCEPT; + memcpy(&Response->Results[i].TransferSyntax, TransferSyntaxNDR64, sizeof(GUID)); + + _st = TRUE; + } + else if ( UseRpcBTFN && !memcmp(BindTimeFeatureNegotiation, (BYTE*)(&Request->CtxItems[i].TransferSyntax), 8) ) + { + Response->Results[i].SyntaxVersion = 0; + Response->Results[i].AckResult = RPC_BIND_ACK; + + // Features requested are actually encoded in the GUID + Response->Results[i].AckReason = + ((WORD*)(&Request->CtxItems[i].TransferSyntax))[4] & + (RPC_BTFN_SEC_CONTEXT_MULTIPLEX | RPC_BTFN_KEEP_ORPHAN); + } + else + { + Response->Results[i].SyntaxVersion = 0; + Response->Results[i].AckResult = + Response->Results[i].AckReason = RPC_BIND_NACK; // Unsupported + } + } + + if ( !_st ) return 0; + + return sizeof(RPC_BIND_RESPONSE) + numCtxItems * sizeof(((RPC_BIND_RESPONSE *)0)->Results[0]) - (portNumberSize < 3 ? 4 : 0); +} + + +// +// Main RPC handling routine +// +typedef unsigned int (*GetResponseSize_t)(const void *const request, const unsigned int requestSize, WORD* NdrCtx, WORD* Ndr64Ctx); +typedef int (*GetResponse_t)(const void* const request, void* response, const DWORD rpcAssocGroup, const SOCKET socket, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE packetType, const char* const ipstr); + +static const struct { + BYTE ResponsePacketType; + GetResponseSize_t CheckRequestSize; + GetResponse_t GetResponse; +} +_Actions[] = { + { RPC_PT_BIND_ACK, (GetResponseSize_t)checkRpcBindSize, (GetResponse_t) rpcBind }, + { RPC_PT_RESPONSE, (GetResponseSize_t)checkRpcRequestSize, (GetResponse_t) rpcRequest }, + { RPC_PT_ALTERCONTEXT_ACK, (GetResponseSize_t)checkRpcBindSize, (GetResponse_t) rpcBind }, +}; + + +/* + * This is the main RPC server loop. Returns after KMS request has been serviced + * or a timeout has occured. + */ +void rpcServer(const SOCKET sock, const DWORD RpcAssocGroup, const char* const ipstr) +{ + RPC_HEADER rpcRequestHeader; + WORD NdrCtx = INVALID_NDR_CTX, Ndr64Ctx = INVALID_NDR_CTX; + + randomNumberInit(); + + while (_recv(sock, &rpcRequestHeader, sizeof(rpcRequestHeader))) + { + //int_fast8_t _st; + unsigned int request_len, response_len; + uint_fast8_t _a; + + #if defined(_PEDANTIC) && !defined(NO_LOG) + checkRpcHeader(&rpcRequestHeader, rpcRequestHeader.PacketType, &logger); + #endif // defined(_PEDANTIC) && !defined(NO_LOG) + + switch (rpcRequestHeader.PacketType) + { + case RPC_PT_BIND_REQ: _a = 0; break; + case RPC_PT_REQUEST: _a = 1; break; + case RPC_PT_ALTERCONTEXT_REQ: _a = 2; break; + default: return; + } + + request_len = LE16(rpcRequestHeader.FragLength) - sizeof(rpcRequestHeader); + + BYTE requestBuffer[MAX_REQUEST_SIZE + sizeof(RPC_RESPONSE64)]; + BYTE responseBuffer[MAX_RESPONSE_SIZE + sizeof(RPC_HEADER) + sizeof(RPC_RESPONSE64)]; + + RPC_HEADER *rpcResponseHeader = (RPC_HEADER *)responseBuffer; + RPC_RESPONSE* rpcResponse = (RPC_RESPONSE*)(responseBuffer + sizeof(rpcRequestHeader)); + + // The request is larger than the buffer size + if (request_len > MAX_REQUEST_SIZE + sizeof(RPC_REQUEST64)) return; + + // Unable to receive the complete request + if (!_recv(sock, requestBuffer, request_len)) return; + + // Request is invalid + if (!_Actions[_a].CheckRequestSize(requestBuffer, request_len, &NdrCtx, &Ndr64Ctx)) return; + + // Unable to create a valid response from request + if (!(response_len = _Actions[_a].GetResponse(requestBuffer, rpcResponse, RpcAssocGroup, sock, &NdrCtx, &Ndr64Ctx, rpcRequestHeader.PacketType, ipstr))) return; + + response_len += sizeof(RPC_HEADER); + + memcpy(rpcResponseHeader, &rpcRequestHeader, sizeof(RPC_HEADER)); + + rpcResponseHeader->FragLength = LE16(response_len); + rpcResponseHeader->PacketType = _Actions[_a].ResponsePacketType; + + if (rpcResponseHeader->PacketType == RPC_PT_ALTERCONTEXT_ACK) + rpcResponseHeader->PacketFlags = RPC_PF_FIRST | RPC_PF_LAST; + + if (!_send(sock, responseBuffer, response_len)) return; + + if (DisconnectImmediately && rpcResponseHeader->PacketType == RPC_PT_RESPONSE) + shutdown(sock, VLMCSD_SHUT_RDWR); + } +} + + +/* RPC client functions */ + +static DWORD CallId = 2; // M$ starts with CallId 2. So we do the same. + + +/* + * Checks RPC header. Returns 0 on success. + * This is mainly for debugging a non Microsoft KMS server that uses its own RPC code. + */ +static int checkRpcHeader(const RPC_HEADER *const Header, const BYTE desiredPacketType, const PRINTFUNC p) +{ + int status = 0; + + if (Header->PacketType != desiredPacketType) + { + p("Fatal: Received wrong RPC packet type. Expected %u but got %u\n", + (uint32_t)desiredPacketType, + Header->PacketType + ); + status = !0; + } + + if (Header->DataRepresentation != BE32(0x10000000)) + { + p("Fatal: RPC response does not conform to Microsoft's limited support of DCE RPC\n"); + status = !0; + } + + if (Header->AuthLength != 0) + { + p("Fatal: RPC response requests authentication\n"); + status = !0; + } + + // vlmcsd does not support fragmented packets (not yet neccassary) + if ( (Header->PacketFlags & (RPC_PF_FIRST | RPC_PF_LAST)) != (RPC_PF_FIRST | RPC_PF_LAST) ) + { + p("Fatal: RPC packet flags RPC_PF_FIRST and RPC_PF_LAST are not both set.\n"); + status = !0; + } + + if (Header->PacketFlags & RPC_PF_CANCEL_PENDING) p("Warning: %s should not be set\n", "RPC_PF_CANCEL_PENDING"); + if (Header->PacketFlags & RPC_PF_RESERVED) p("Warning: %s should not be set\n", "RPC_PF_RESERVED"); + if (Header->PacketFlags & RPC_PF_NOT_EXEC) p("Warning: %s should not be set\n", "RPC_PF_NOT_EXEC"); + if (Header->PacketFlags & RPC_PF_MAYBE) p("Warning: %s should not be set\n", "RPC_PF_MAYBE"); + if (Header->PacketFlags & RPC_PF_OBJECT) p("Warning: %s should not be set\n", "RPC_PF_OBJECT"); + + if (Header->VersionMajor != 5 || Header->VersionMinor != 0) + { + p("Fatal: Expected RPC version 5.0 and got %u.%u\n", Header->VersionMajor, Header->VersionMinor); + status = !0; + } + + return status; +} + + +/* + * Checks an RPC response header. Does basic header checks by calling checkRpcHeader() + * and then does additional checks if response header complies with the respective request header. + * PRINTFUNC p can be anything that has the same prototype as printf. + * Returns 0 on success. + */ +static int checkRpcResponseHeader(const RPC_HEADER *const ResponseHeader, const RPC_HEADER *const RequestHeader, const BYTE desiredPacketType, const PRINTFUNC p) +{ + static int_fast8_t WineBugDetected = FALSE; + int status = checkRpcHeader(ResponseHeader, desiredPacketType, p); + + if (desiredPacketType == RPC_PT_BIND_ACK) + { + if ((ResponseHeader->PacketFlags & RPC_PF_MULTIPLEX) != (RequestHeader->PacketFlags & RPC_PF_MULTIPLEX)) + { + p("Warning: RPC_PF_MULTIPLEX of RPC request and response should match\n"); + } + } + else + { + if (ResponseHeader->PacketFlags & RPC_PF_MULTIPLEX) + { + p("Warning: %s should not be set\n", "RPC_PF_MULTIPLEX"); + } + } + + if (!status && ResponseHeader->CallId == LE32(1)) + { + if (!WineBugDetected) + { + p("Warning: Buggy RPC of Wine detected. Call Id of Response is always 1\n"); + WineBugDetected = TRUE; + } + } + else if (ResponseHeader->CallId != RequestHeader->CallId) + { + p("Fatal: Sent Call Id %u but received answer for Call Id %u\n", + (uint32_t)LE32(RequestHeader->CallId), + (uint32_t)LE32(ResponseHeader->CallId) + ); + + status = !0; + } + + return status; +} + +/* + * Initializes an RPC request header as needed for KMS, i.e. packet always fits in one fragment. + * size cannot be greater than fragment length negotiated during RPC bind. + */ +static void createRpcRequestHeader(RPC_HEADER* RequestHeader, BYTE packetType, WORD size) +{ + RequestHeader->PacketType = packetType; + RequestHeader->PacketFlags = RPC_PF_FIRST | RPC_PF_LAST; + RequestHeader->VersionMajor = 5; + RequestHeader->VersionMinor = 0; + RequestHeader->AuthLength = 0; + RequestHeader->DataRepresentation = BE32(0x10000000); // Little endian, ASCII charset, IEEE floating point + RequestHeader->CallId = LE32(CallId); + RequestHeader->FragLength = LE16(size); +} + + +/* + * Sends a KMS request via RPC and receives a response. + * Parameters are raw (encrypted) reqeuests / responses. + * Returns 0 on success. + */ +RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const size_t requestSize, BYTE **KmsResponse, size_t *const responseSize) +{ + #define MAX_EXCESS_BYTES 16 + RPC_HEADER *RequestHeader, ResponseHeader; + RPC_REQUEST64 *RpcRequest; + RPC_RESPONSE64 _Response; + int status = 0; + int_fast8_t useNdr64 = UseRpcNDR64 && firstPacketSent; + size_t size = sizeof(RPC_HEADER) + (useNdr64 ? sizeof(RPC_REQUEST64) : sizeof(RPC_REQUEST)) + requestSize; + size_t responseSize2; + + *KmsResponse = NULL; + + BYTE *_Request = (BYTE*)vlmcsd_malloc(size); + + RequestHeader = (RPC_HEADER*)_Request; + RpcRequest = (RPC_REQUEST64*)(_Request + sizeof(RPC_HEADER)); + + createRpcRequestHeader(RequestHeader, RPC_PT_REQUEST, size); + + // Increment CallId for next Request + CallId++; + + RpcRequest->Opnum = 0; + + if (useNdr64) + { + RpcRequest->ContextId = LE16(1); // We negotiate NDR64 always as context 1 + RpcRequest->AllocHint = LE32(requestSize + sizeof(RpcRequest->Ndr64)); + RpcRequest->Ndr64.DataLength = LE64((uint64_t)requestSize); + RpcRequest->Ndr64.DataSizeIs = LE64((uint64_t)requestSize); + memcpy(RpcRequest->Ndr64.Data, KmsRequest, requestSize); + } + else + { + RpcRequest->ContextId = 0; // We negotiate NDR32 always as context 0 + RpcRequest->AllocHint = LE32(requestSize + sizeof(RpcRequest->Ndr)); + RpcRequest->Ndr.DataLength = LE32(requestSize); + RpcRequest->Ndr.DataSizeIs = LE32(requestSize); + memcpy(RpcRequest->Ndr.Data, KmsRequest, requestSize); + } + + for(;;) + { + int bytesread; + + if (!_send(sock, _Request, size)) + { + errorout("\nFatal: Could not send RPC request\n"); + status = !0; + break; + } + + if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER))) + { + errorout("\nFatal: No RPC response received from server\n"); + status = !0; + break; + } + + if ((status = checkRpcResponseHeader(&ResponseHeader, RequestHeader, RPC_PT_RESPONSE, &errorout))) break; + + size = useNdr64 ? sizeof(RPC_RESPONSE64) : sizeof(RPC_RESPONSE); + + if (size > LE16(ResponseHeader.FragLength) - sizeof(ResponseHeader)) + size = LE16(ResponseHeader.FragLength) - sizeof(ResponseHeader); + + if (!_recv(sock, &_Response, size)) + { + errorout("\nFatal: RPC response is incomplete\n"); + status = !0; + break; + } + + if (_Response.CancelCount != 0) + { + errorout("\nFatal: RPC response cancel count is not 0\n"); + status = !0; + } + + if (_Response.ContextId != (useNdr64 ? LE16(1) : 0)) + { + errorout("\nFatal: RPC response context id %u is not bound\n", (unsigned int)LE16(_Response.ContextId)); + status = !0; + } + + int_fast8_t sizesMatch; + + if (useNdr64) + { + *responseSize = (size_t)LE64(_Response.Ndr64.DataLength); + responseSize2 = (size_t)LE64(_Response.Ndr64.DataSizeIs); + + if (!*responseSize || !_Response.Ndr64.DataSizeMax) + { + status = (int)LE32(_Response.Ndr64.status); + break; + } + + sizesMatch = (size_t)LE64(_Response.Ndr64.DataLength) == responseSize2; + } + else + { + *responseSize = (size_t)LE32(_Response.Ndr.DataLength); + responseSize2 = (size_t)LE32(_Response.Ndr.DataSizeIs); + + if (!*responseSize || !_Response.Ndr.DataSizeMax) + { + status = (int)LE32(_Response.Ndr.status); + break; + } + + sizesMatch = (size_t)LE32(_Response.Ndr.DataLength) == responseSize2; + } + + if (!sizesMatch) + { + errorout("\nFatal: NDR data length (%u) does not match NDR data size (%u)\n", + (uint32_t)*responseSize, + (uint32_t)LE32(_Response.Ndr.DataSizeIs) + ); + + status = !0; + } + + *KmsResponse = (BYTE*)vlmcsd_malloc(*responseSize + MAX_EXCESS_BYTES); + + // If RPC stub is too short, assume missing bytes are zero (same ill behavior as MS RPC) + memset(*KmsResponse, 0, *responseSize + MAX_EXCESS_BYTES); + + // Read up to 16 bytes more than bytes expected to detect faulty KMS emulators + if ((bytesread = recv(sock, (char*)*KmsResponse, *responseSize + MAX_EXCESS_BYTES, 0)) < (int)*responseSize) + { + errorout("\nFatal: No or incomplete KMS response received. Required %u bytes but only got %i\n", + (uint32_t)*responseSize, + (int32_t)(bytesread < 0 ? 0 : bytesread) + ); + + status = !0; + break; + } + + DWORD *pReturnCode; + + size_t len = *responseSize + (useNdr64 ? sizeof(_Response.Ndr64) : sizeof(_Response.Ndr)) + sizeof(*pReturnCode); + size_t pad = ((~len & 3) + 1) & 3; + + if (len + pad != LE32(_Response.AllocHint)) + { + errorout("\nWarning: RPC stub size is %u, should be %u (probably incorrect padding)\n", (uint32_t)LE32(_Response.AllocHint), (uint32_t)(len + pad)); + } + else + { + size_t i; + for (i = 0; i < pad; i++) + { + if (*(*KmsResponse + *responseSize + sizeof(*pReturnCode) + i)) + { + errorout("\nWarning: RPC stub data not padded to zeros according to Microsoft standard\n"); + break; + } + } + } + + pReturnCode = (DWORD*)(*KmsResponse + *responseSize + pad); + status = LE32(UA32(pReturnCode)); + + if (status) errorout("\nWarning: RPC stub data reported Error %u\n", (uint32_t)status); + + break; + } + + free(_Request); + firstPacketSent = TRUE; + return status; + #undef MAX_EXCESS_BYTES +} + + +static int_fast8_t IsNullGuid(BYTE* guidPtr) +{ + int_fast8_t i; + + for (i = 0; i < 16; i++) + { + if (guidPtr[i]) return FALSE; + } + + return TRUE; +} + +/* + * Perform RPC client bind. Accepts a connected client socket. + * Returns 0 on success. RPC binding is required before any payload can be + * exchanged. It negotiates about protocol details. + */ +RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const int_fast8_t verbose) +{ + RPC_HEADER *RequestHeader, ResponseHeader; + RPC_BIND_REQUEST *bindRequest; + RPC_BIND_RESPONSE *bindResponse; + int status; + WORD ctxItems = 1 + (packetType == RPC_PT_BIND_REQ ? UseRpcNDR64 + UseRpcBTFN : 0); + size_t rpcBindSize = (sizeof(RPC_HEADER) + sizeof(RPC_BIND_REQUEST) + (ctxItems - 1) * sizeof(bindRequest->CtxItems[0])); + WORD ctxIndex = 0; + WORD i; + WORD CtxBTFN = (WORD)~0, CtxNDR64 = (WORD)~0; + BYTE _Request[rpcBindSize]; + + RequestHeader = (RPC_HEADER*)_Request; + bindRequest = (RPC_BIND_REQUEST* )(_Request + sizeof(RPC_HEADER)); + + createRpcRequestHeader(RequestHeader, packetType, rpcBindSize); + RequestHeader->PacketFlags |= UseMultiplexedRpc ? RPC_PF_MULTIPLEX : 0; + + bindRequest->AssocGroup = 0; + bindRequest->MaxRecvFrag = bindRequest->MaxXmitFrag = LE16(5840); + bindRequest->NumCtxItems = LE32(ctxItems); + + // data that is identical in all Ctx items + for (i = 0; i < ctxItems; i++) + { + bindRequest->CtxItems[i].ContextId = LE16(i); + bindRequest->CtxItems[i].InterfaceVerMajor = LE16(1); + bindRequest->CtxItems[i].InterfaceVerMinor = 0; + bindRequest->CtxItems[i].NumTransItems = LE16(1); + bindRequest->CtxItems[i].SyntaxVersion = i ? LE32(1) : LE32(2); + + memcpy(&bindRequest->CtxItems[i].InterfaceUUID, InterfaceUuid, sizeof(GUID)); + } + + memcpy(&bindRequest->CtxItems[0].TransferSyntax, TransferSyntaxNDR32, sizeof(GUID)); + + if (UseRpcNDR64 && packetType == RPC_PT_BIND_REQ) + { + memcpy(&bindRequest->CtxItems[++ctxIndex].TransferSyntax, TransferSyntaxNDR64, sizeof(GUID)); + CtxNDR64 = ctxIndex; + } + + if (UseRpcBTFN && packetType == RPC_PT_BIND_REQ) + { + memcpy(&bindRequest->CtxItems[++ctxIndex].TransferSyntax, BindTimeFeatureNegotiation, sizeof(GUID)); + CtxBTFN = ctxIndex; + } + + if (!_send(sock, _Request, rpcBindSize)) + { + errorout("\nFatal: Sending RPC bind request failed\n"); + return !0; + } + + if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER))) + { + errorout("\nFatal: Did not receive a response from server\n"); + return !0; + } + + if ((status = checkRpcResponseHeader + ( + &ResponseHeader, + RequestHeader, + packetType == RPC_PT_BIND_REQ ? RPC_PT_BIND_ACK : RPC_PT_ALTERCONTEXT_ACK, + &errorout + ))) + { + return status; + } + + bindResponse = (RPC_BIND_RESPONSE*)vlmcsd_malloc(LE16(ResponseHeader.FragLength) - sizeof(RPC_HEADER)); + BYTE* bindResponseBytePtr = (BYTE*)bindResponse; + + if (!_recv(sock, bindResponse, LE16(ResponseHeader.FragLength) - sizeof(RPC_HEADER))) + { + errorout("\nFatal: Incomplete RPC bind acknowledgement received\n"); + free(bindResponseBytePtr); + return !0; + } + else + { + /* + * checking, whether a bind or alter context response is as expected. + * This check is very strict and checks whether a KMS emulator behaves exactly the same way + * as Microsoft's RPC does. + */ + status = 0; + + if (bindResponse->SecondaryAddressLength < LE16(3)) + bindResponse = (RPC_BIND_RESPONSE*)(bindResponseBytePtr - 4); + + if (bindResponse->NumResults != bindRequest->NumCtxItems) + { + errorout("\nFatal: Expected %u CTX items but got %u\n", + (uint32_t)LE32(bindRequest->NumCtxItems), + (uint32_t)LE32(bindResponse->NumResults) + ); + + status = !0; + } + + for (i = 0; i < ctxItems; i++) + { + const char* transferSyntaxName = + i == CtxBTFN ? "BTFN" : i == CtxNDR64 ? "NDR64" : "NDR32"; + + if (bindResponse->Results[i].AckResult == RPC_BIND_NACK) // transfer syntax was declined + { + if (!IsNullGuid((BYTE*)&bindResponse->Results[i].TransferSyntax)) + { + errorout( + "\nWarning: Rejected transfer syntax %s did not return NULL Guid\n", + transferSyntaxName + ); + } + + if (bindResponse->Results[i].SyntaxVersion) + { + errorout( + "\nWarning: Rejected transfer syntax %s did not return syntax version 0 but %u\n", + transferSyntaxName, + LE32(bindResponse->Results[i].SyntaxVersion) + ); + } + + if (bindResponse->Results[i].AckReason == RPC_ABSTRACTSYNTAX_UNSUPPORTED) + { + errorout( + "\nWarning: Transfer syntax %s does not support KMS activation\n", + transferSyntaxName + ); + } + else if (bindResponse->Results[i].AckReason != RPC_SYNTAX_UNSUPPORTED) + { + errorout( + "\nWarning: Rejected transfer syntax %s did not return ack reason RPC_SYNTAX_UNSUPPORTED\n", + transferSyntaxName + ); + } + + continue; + } + + if (i == CtxBTFN) // BTFN + { + if (bindResponse->Results[i].AckResult != RPC_BIND_ACK) + { + errorout("\nWarning: BTFN did not respond with RPC_BIND_ACK or RPC_BIND_NACK\n"); + } + + if (bindResponse->Results[i].AckReason != LE16(3)) + { + errorout("\nWarning: BTFN did not return expected feature mask 0x3 but 0x%X\n", (unsigned int)LE16(bindResponse->Results[i].AckReason)); + } + + if (verbose) printf("... BTFN "); + RpcFlags.HasBTFN = TRUE; + + continue; + } + + // NDR32 or NDR64 Ctx + if (bindResponse->Results[i].AckResult != RPC_BIND_ACCEPT) + { + errorout( + "\nFatal: transfer syntax %s returned an invalid status, neither RPC_BIND_ACCEPT nor RPC_BIND_NACK\n", + transferSyntaxName + ); + + status = !0; + } + + if (!IsEqualGUID(&bindResponse->Results[i].TransferSyntax, &bindRequest->CtxItems[i].TransferSyntax)) + { + errorout( + "\nFatal: Transfer syntax of RPC bind request and response does not match\n" + ); + + status = !0; + } + + if (bindResponse->Results[i].SyntaxVersion != bindRequest->CtxItems[i].SyntaxVersion) + { + errorout("\nFatal: Expected transfer syntax version %u for %s but got %u\n", + (uint32_t)LE32(bindRequest->CtxItems[0].SyntaxVersion), + transferSyntaxName, + (uint32_t)LE32(bindResponse->Results[0].SyntaxVersion) + ); + + status = !0; + } + + // The ack reason field is actually undefined here but Microsoft sets this to 0 + if (bindResponse->Results[i].AckReason != 0) + { + errorout( + "\nWarning: Ack reason should be 0 but is %u\n", + LE16(bindResponse->Results[i].AckReason) + ); + } + + if (!status) + { + if (i == CtxNDR64) + { + RpcFlags.HasNDR64 = TRUE; + if (verbose) printf("... NDR64 "); + } + if (!i) + { + RpcFlags.HasNDR32 = TRUE; + if (verbose) printf("... NDR32 "); + } + + } + } + } + + free(bindResponseBytePtr); + + if (!RpcFlags.HasNDR64 && !RpcFlags.HasNDR32) + { + errorout("\nFatal: Could neither negotiate NDR32 nor NDR64 with the RPC server\n"); + status = !0; + } + + return status; +} + +RpcStatus rpcBindClient(const RpcCtx sock, const int_fast8_t verbose) +{ + firstPacketSent = FALSE; + RpcFlags.mask = 0; + + RpcStatus status = + rpcBindOrAlterClientContext(sock, RPC_PT_BIND_REQ, verbose); + + if (status) return status; + + if (!RpcFlags.HasNDR32) + status = rpcBindOrAlterClientContext(sock, RPC_PT_ALTERCONTEXT_REQ, verbose); + + return status; +} + +#endif // USE_MSRPC +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#if !defined(_CRYPTO_OPENSSL) && !defined(_CRYPTO_POLARSSL) && !defined(_CRYPTO_WINDOWS) +#include "crypto_internal.h" +#include "endian.h" + +#define F0(x, y, z) ( ((x) & (y)) | (~(x) & (z)) ) +#define F1(x, y, z) ( ((x) & (y)) | ((x) & (z)) | ((y) & (z)) ) + +#define SI1(x) ( ROR32(x, 2 ) ^ ROR32(x, 13) ^ ROR32(x, 22) ) +#define SI2(x) ( ROR32(x, 6 ) ^ ROR32(x, 11) ^ ROR32(x, 25) ) +#define SI3(x) ( ROR32(x, 7 ) ^ ROR32(x, 18) ^ ((x) >> 3 ) ) +#define SI4(x) ( ROR32(x, 17) ^ ROR32(x, 19) ^ ((x) >> 10) ) + +static const DWORD k[] = { + 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, + 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, + 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, + 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, + 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, + 0x06CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, + 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, + 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, + 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, + 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, + 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 +}; + + +static void Sha256Init(Sha256Ctx *Ctx) +{ + Ctx->State[0] = 0x6A09E667; + Ctx->State[1] = 0xBB67AE85; + Ctx->State[2] = 0x3C6EF372; + Ctx->State[3] = 0xA54FF53A; + Ctx->State[4] = 0x510E527F; + Ctx->State[5] = 0x9B05688C; + Ctx->State[6] = 0x1F83D9AB; + Ctx->State[7] = 0x5BE0CD19; + Ctx->Len = 0; +} + + +static void Sha256ProcessBlock(Sha256Ctx *Ctx, BYTE *block) +{ + unsigned int i; + DWORD w[64], temp1, temp2; + DWORD a = Ctx->State[0]; + DWORD b = Ctx->State[1]; + DWORD c = Ctx->State[2]; + DWORD d = Ctx->State[3]; + DWORD e = Ctx->State[4]; + DWORD f = Ctx->State[5]; + DWORD g = Ctx->State[6]; + DWORD h = Ctx->State[7]; + + for (i = 0; i < 16; i++) + //w[ i ] = GET_UAA32BE(block, i); + w[i] = BE32(((DWORD*)block)[i]); + + for (i = 16; i < 64; i++) + w[ i ] = SI4(w[ i - 2 ]) + w[ i - 7 ] + SI3(w[ i - 15 ]) + w[ i - 16 ]; + + for (i = 0; i < 64; i++) + { + temp1 = h + SI2(e) + F0(e, f, g) + k[ i ] + w[ i ]; + temp2 = SI1(a) + F1(a, b, c); + + h = g; + g = f; + f = e; + e = d + temp1; + d = c; + c = b; + b = a; + a = temp1 + temp2; + } + + Ctx->State[0] += a; + Ctx->State[1] += b; + Ctx->State[2] += c; + Ctx->State[3] += d; + Ctx->State[4] += e; + Ctx->State[5] += f; + Ctx->State[6] += g; + Ctx->State[7] += h; +} + + +static void Sha256Update(Sha256Ctx *Ctx, BYTE *data, size_t len) +{ + unsigned int b_len = Ctx->Len & 63, + r_len = (b_len ^ 63) + 1; + + Ctx->Len += len; + + if ( len < r_len ) + { + memcpy(Ctx->Buffer + b_len, data, len); + return; + } + + if ( r_len < 64 ) + { + memcpy(Ctx->Buffer + b_len, data, r_len); + len -= r_len; + data += r_len; + Sha256ProcessBlock(Ctx, Ctx->Buffer); + } + + for (; len >= 64; len -= 64, data += 64) + Sha256ProcessBlock(Ctx, data); + + if ( len ) memcpy(Ctx->Buffer, data, len); +} + + +static void Sha256Finish(Sha256Ctx *Ctx, BYTE *hash) +{ + unsigned int i, b_len = Ctx->Len & 63; + + Ctx->Buffer[ b_len ] = 0x80; + if ( b_len ^ 63 ) memset(Ctx->Buffer + b_len + 1, 0, b_len ^ 63); + + if ( b_len >= 56 ) + { + Sha256ProcessBlock(Ctx, Ctx->Buffer); + memset(Ctx->Buffer, 0, 56); + } + + //PUT_UAA64BE(Ctx->Buffer, (unsigned long long)(Ctx->Len * 8), 7); + ((uint64_t*)Ctx->Buffer)[7] = BE64((uint64_t)Ctx->Len << 3); + Sha256ProcessBlock(Ctx, Ctx->Buffer); + + for (i = 0; i < 8; i++) + //PUT_UAA32BE(hash, Ctx->State[i], i); + ((DWORD*)hash)[i] = BE32(Ctx->State[i]); + +} + + +void Sha256(BYTE *data, size_t len, BYTE *hash) +{ + Sha256Ctx Ctx; + + Sha256Init(&Ctx); + Sha256Update(&Ctx, data, len); + Sha256Finish(&Ctx, hash); +} + + +static void _Sha256HmacInit(Sha256HmacCtx *Ctx, BYTE *key, size_t klen) +{ + BYTE IPad[64]; + unsigned int i; + + memset(IPad, 0x36, sizeof(IPad)); + memset(Ctx->OPad, 0x5C, sizeof(Ctx->OPad)); + + if ( klen > 64 ) + { + BYTE *temp = (BYTE*)alloca(32); + Sha256(key, klen, temp); + klen = 32; + key = temp; + } + + for (i = 0; i < klen; i++) + { + IPad[ i ] ^= key[ i ]; + Ctx->OPad[ i ] ^= key[ i ]; + } + + Sha256Init(&Ctx->ShaCtx); + Sha256Update(&Ctx->ShaCtx, IPad, sizeof(IPad)); +} + + +static void _Sha256HmacUpdate(Sha256HmacCtx *Ctx, BYTE *data, size_t len) +{ + Sha256Update(&Ctx->ShaCtx, data, len); +} + + +static void _Sha256HmacFinish(Sha256HmacCtx *Ctx, BYTE *hmac) +{ + BYTE temp[32]; + + Sha256Finish(&Ctx->ShaCtx, temp); + Sha256Init(&Ctx->ShaCtx); + Sha256Update(&Ctx->ShaCtx, Ctx->OPad, sizeof(Ctx->OPad)); + Sha256Update(&Ctx->ShaCtx, temp, sizeof(temp)); + Sha256Finish(&Ctx->ShaCtx, hmac); +} + + + +int_fast8_t Sha256Hmac(BYTE* key, BYTE* restrict data, DWORD len, BYTE* restrict hmac) +{ + Sha256HmacCtx Ctx; + _Sha256HmacInit(&Ctx, key, 16); + _Sha256HmacUpdate(&Ctx, data, len); + _Sha256HmacFinish(&Ctx, hmac); + return TRUE; +} + + +#endif // No external Crypto + diff --git a/vlmcsdmulti.1 b/vlmcsdmulti.1 new file mode 100644 index 0000000..9ea05ec --- /dev/null +++ b/vlmcsdmulti.1 @@ -0,0 +1,53 @@ +.TH VLMCSDMULTI 1 "February 2015" "Hotbird64" "KMS Activation Manual" +.LO 1 + +.SH NAME +vlmcsdmulti \- a multi-call binary containing \fBvlmcs\fR(1) and \fBvlmcsd\fR(8) + +.SH SYNOPSIS +\fBvlmcsdmulti\fR vlmcs [ \fIoptions\fR ] [ \fIhostname\fR|\fIip-address\fR[:\fIport\fR] ] [ \fIoptions\fR ] | vlmcsd [ \fIoptions\fR ] + +.SH DESCRIPTION +\fBvlmcsdmulti\fR is a multi-call binary that contains \fBvlmcs\fR(1) and \fBvlmcsd\fR(8) in a single binary. Since both programs share a lot of code and data, the combined binary is significantly smaller than the sum of both files. +.PP +\fBvlmcsdmulti\fR should not be called directly. Instead you may want to create symbolic links named vlmcs and vlmcsd which point to \fBvlmcsdmulti\fR. You then use these links to call the respective program. You may however call \fBvlmcsdmulti\fR followed by a complete command line of either \fBvlmcs\fR(1) or \fBvlmcsd\fR(8). +.SS Creating symbolic links in unixoid operating systems +cd to the directory containing \fBvlmcsdmulti\fR and type +.PP +ln -s vlmcsdmulti vlmcsd +.br +ln -s vlmcsdmulti vlmcs +.PP +You may use a destination directory, e.g. +.PP +ln -s vlmcsdmulti /usr/local/sbin/vlmcsd +.br +ln -s vlmcsdmulti /usr/local/bin/vlmcs +.PP +Ensure that \fBvlmcsdmulti\fR has execute permissions. You can do that by typing "chmod 755 vlmcsdmulti". See \fBchmod\fR(1) for details. +.SS Creating symbolic links in Windows (Vista and higher only) +cd to the directory containing \fBvlmcsdmulti\fR and type +.PP +mklink vlmcsd.exe vlmcsdmulti.exe +.br +mklink vlmcs.exe vlmcsdmulti.exe +.PP +You may use a destination directory, e.g. +.PP +mklink C:\\tools\\vlmcsd.exe vlmcsdmulti.exe +.br +mklink C:\\tools\\vlmcs.exe vlmcsdmulti.exe +.SS Memory considerations +While you definitely save disk space by using \fBvlmcsdmulti\fR you will need more RAM when you run \fBvlmcsdmulti\fR as a daemon (KMS server) instead of vlmcsd. You should consider running \fBvlmcsdmulti\fR via an internet superserver like \fBinetd\fR(8) or \fBxinetd\fR(8). + +.SH BUGS +\fBvlmcsdmulti\fR has the same bugs as \fBvlmcs\fR(1) and \fBvlmcsd\fR(8). + +.SH AUTHOR +Written by Hotbird64 + +.SH CREDITS +Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nosferati87, qad, vityan666, ... + +.SH SEE ALSO +\fBvlmcs\fR(1)\fB, vlmcsd\fR(8)\fB, vlmcsd\fR(7) diff --git a/vlmcsdmulti.1.dos.txt b/vlmcsdmulti.1.dos.txt new file mode 100644 index 0000000..fd693c1 --- /dev/null +++ b/vlmcsdmulti.1.dos.txt @@ -0,0 +1,76 @@ +VLMCSDMULTI(1) KMS Activation Manual VLMCSDMULTI(1) + + + +NAME + vlmcsdmulti - a multi-call binary containing vlmcs(1) and vlmcsd(8) + + +SYNOPSIS + vlmcsdmulti vlmcs [ options ] [ hostname|ip-address[:port] ] [ options + ] | vlmcsd [ options ] + + +DESCRIPTION + vlmcsdmulti is a multi-call binary that contains vlmcs(1) and vlmcsd(8) + in a single binary. Since both programs share a lot of code and data, + the combined binary is significantly smaller than the sum of both + files. + + vlmcsdmulti should not be called directly. Instead you may want to cre‐ + ate symbolic links named vlmcs and vlmcsd which point to vlmcsdmulti. + You then use these links to call the respective program. You may how‐ + ever call vlmcsdmulti followed by a complete command line of either + vlmcs(1) or vlmcsd(8). + + Creating symbolic links in unixoid operating systems + cd to the directory containing vlmcsdmulti and type + + ln -s vlmcsdmulti vlmcsd + ln -s vlmcsdmulti vlmcs + + You may use a destination directory, e.g. + + ln -s vlmcsdmulti /usr/local/sbin/vlmcsd + ln -s vlmcsdmulti /usr/local/bin/vlmcs + + Ensure that vlmcsdmulti has execute permissions. You can do that by + typing "chmod 755 vlmcsdmulti". See chmod(1) for details. + + Creating symbolic links in Windows (Vista and higher only) + cd to the directory containing vlmcsdmulti and type + + mklink vlmcsd.exe vlmcsdmulti.exe + mklink vlmcs.exe vlmcsdmulti.exe + + You may use a destination directory, e.g. + + mklink C:\tools\vlmcsd.exe vlmcsdmulti.exe + mklink C:\tools\vlmcs.exe vlmcsdmulti.exe + + Memory considerations + While you definitely save disk space by using vlmcsdmulti you will need + more RAM when you run vlmcsdmulti as a daemon (KMS server) instead of + vlmcsd. You should consider running vlmcsdmulti via an internet super‐ + server like inetd(8) or xinetd(8). + + +BUGS + vlmcsdmulti has the same bugs as vlmcs(1) and vlmcsd(8). + + +AUTHOR + Written by Hotbird64 + + +CREDITS + Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐ + ferati87, qad, vityan666, ... + + +SEE ALSO + vlmcs(1), vlmcsd(8), vlmcsd(7) + + + +Hotbird64 February 2015 VLMCSDMULTI(1) diff --git a/vlmcsdmulti.1.html b/vlmcsdmulti.1.html new file mode 100644 index 0000000..169045a --- /dev/null +++ b/vlmcsdmulti.1.html @@ -0,0 +1,158 @@ + + + + + + + + + +VLMCSDMULTI + + + + +

VLMCSDMULTI

+ +NAME
+SYNOPSIS
+DESCRIPTION
+BUGS
+AUTHOR
+CREDITS
+SEE ALSO
+ +
+ + +

NAME + +

+ + +

vlmcsdmulti +− a multi-call binary containing vlmcs(1) and +vlmcsd(8)

+ +

SYNOPSIS + +

+ + + +

vlmcsdmulti +vlmcs [ options ] [ +hostname|ip-address[:port] ] [ +options ] | vlmcsd [ options ]

+ +

DESCRIPTION + +

+ + + +

vlmcsdmulti +is a multi-call binary that contains vlmcs(1) and +vlmcsd(8) in a single binary. Since both programs +share a lot of code and data, the combined binary is +significantly smaller than the sum of both files.

+ + +

vlmcsdmulti +should not be called directly. Instead you may want to +create symbolic links named vlmcs and vlmcsd which point to +vlmcsdmulti. You then use these links to call the +respective program. You may however call vlmcsdmulti +followed by a complete command line of either +vlmcs(1) or vlmcsd(8).

+ +

Creating +symbolic links in unixoid operating systems
+cd to the directory containing vlmcsdmulti and +type

+ +

ln -s +vlmcsdmulti vlmcsd
+ln -s vlmcsdmulti vlmcs

+ +

You may use a +destination directory, e.g.

+ +

ln -s +vlmcsdmulti /usr/local/sbin/vlmcsd
+ln -s vlmcsdmulti /usr/local/bin/vlmcs

+ +

Ensure that +vlmcsdmulti has execute permissions. You can do that +by typing "chmod 755 vlmcsdmulti". See +chmod(1) for details.

+ +

Creating +symbolic links in Windows (Vista and higher only)
+cd to the directory containing vlmcsdmulti and +type

+ +

mklink +vlmcsd.exe vlmcsdmulti.exe
+mklink vlmcs.exe vlmcsdmulti.exe

+ +

You may use a +destination directory, e.g.

+ +

mklink +C:\tools\vlmcsd.exe vlmcsdmulti.exe
+mklink C:\tools\vlmcs.exe vlmcsdmulti.exe

+ +

Memory +considerations
+While you definitely save disk space by using +vlmcsdmulti you will need more RAM when you run +vlmcsdmulti as a daemon (KMS server) instead of +vlmcsd. You should consider running vlmcsdmulti via +an internet superserver like inetd(8) or +xinetd(8).

+ +

BUGS + +

+ + + +

vlmcsdmulti +has the same bugs as vlmcs(1) and +vlmcsd(8).

+ +

AUTHOR + +

+ + +

Written by +Hotbird64

+ +

CREDITS + +

+ + +

Thanks to +CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, +nosferati87, qad, vityan666, ...

+ +

SEE ALSO + +

+ + + +

vlmcs(1), +vlmcsd(8), vlmcsd(7)

+
+ + diff --git a/vlmcsdmulti.1.pdf b/vlmcsdmulti.1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8f4bd1ea19d1911c353c7798ac10cedbc29bfddc GIT binary patch literal 10040 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 krJx9)2BT0-CE{?#V(JghAlb%7 literal 0 HcmV?d00001 diff --git a/vlmcsdmulti.1.unix.txt b/vlmcsdmulti.1.unix.txt new file mode 100644 index 0000000..244ba12 --- /dev/null +++ b/vlmcsdmulti.1.unix.txt @@ -0,0 +1,76 @@ +VLMCSDMULTI(1) KMS Activation Manual VLMCSDMULTI(1) + + + +NAME + vlmcsdmulti - a multi-call binary containing vlmcs(1) and vlmcsd(8) + + +SYNOPSIS + vlmcsdmulti vlmcs [ options ] [ hostname|ip-address[:port] ] [ options + ] | vlmcsd [ options ] + + +DESCRIPTION + vlmcsdmulti is a multi-call binary that contains vlmcs(1) and vlmcsd(8) + in a single binary. Since both programs share a lot of code and data, + the combined binary is significantly smaller than the sum of both + files. + + vlmcsdmulti should not be called directly. Instead you may want to cre‐ + ate symbolic links named vlmcs and vlmcsd which point to vlmcsdmulti. + You then use these links to call the respective program. You may how‐ + ever call vlmcsdmulti followed by a complete command line of either + vlmcs(1) or vlmcsd(8). + + Creating symbolic links in unixoid operating systems + cd to the directory containing vlmcsdmulti and type + + ln -s vlmcsdmulti vlmcsd + ln -s vlmcsdmulti vlmcs + + You may use a destination directory, e.g. + + ln -s vlmcsdmulti /usr/local/sbin/vlmcsd + ln -s vlmcsdmulti /usr/local/bin/vlmcs + + Ensure that vlmcsdmulti has execute permissions. You can do that by + typing "chmod 755 vlmcsdmulti". See chmod(1) for details. + + Creating symbolic links in Windows (Vista and higher only) + cd to the directory containing vlmcsdmulti and type + + mklink vlmcsd.exe vlmcsdmulti.exe + mklink vlmcs.exe vlmcsdmulti.exe + + You may use a destination directory, e.g. + + mklink C:\tools\vlmcsd.exe vlmcsdmulti.exe + mklink C:\tools\vlmcs.exe vlmcsdmulti.exe + + Memory considerations + While you definitely save disk space by using vlmcsdmulti you will need + more RAM when you run vlmcsdmulti as a daemon (KMS server) instead of + vlmcsd. You should consider running vlmcsdmulti via an internet super‐ + server like inetd(8) or xinetd(8). + + +BUGS + vlmcsdmulti has the same bugs as vlmcs(1) and vlmcsd(8). + + +AUTHOR + Written by Hotbird64 + + +CREDITS + Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐ + ferati87, qad, vityan666, ... + + +SEE ALSO + vlmcs(1), vlmcsd(8), vlmcsd(7) + + + +Hotbird64 February 2015 VLMCSDMULTI(1) diff --git a/vlmcsdmulti.c b/vlmcsdmulti.c new file mode 100644 index 0000000..6e47d50 --- /dev/null +++ b/vlmcsdmulti.c @@ -0,0 +1,64 @@ +/* Multi-Call Binary for vlmcs and vlmcsd */ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#if MULTI_CALL_BINARY < 1 +#error "Please define MULTI_CALL_BINARY=1 when compiling this file." +#endif + +#include +#include + +#include "vlmcs.h" +#include "vlmcsd.h" +#include "types.h" +#include "shared_globals.h" +#include "output.h" + +#if (defined(_WIN32) || defined(__CYGWIN__)) +#define compare strcasecmp // Best for case-preserving (but otherwise case-insensitive) filesystems +#else // native Unix +#define compare strcmp // for case-sensitive filesystems +#endif // native Unix + +int main(int argc, CARGV argv) +{ + multi_argv = argv; + multi_argc = argc; + + if (!compare(basename((char*)*argv), "vlmcsd")) + return server_main(argc, argv); + + if (!compare(basename((char*)*argv), "vlmcs")) + return client_main(argc, argv); + + #ifdef _WIN32 + if (!compare(basename((char*)*argv), "vlmcsd.exe")) + return server_main(argc, argv); + + if (!compare(basename((char*)*argv), "vlmcs.exe")) + return client_main(argc, argv); + #endif // _WIN32 + + if (argc > 1) + { + if (!strcmp((char*)argv[1],"vlmcsd")) + return server_main(argc - 1, argv + 1); + + if (!strcmp((char*)argv[1],"vlmcs")) + return client_main(argc - 1, argv + 1); + } + + errorout( + "vlmcsdmulti %s\n\n" + "Usage:\n" + "\t%s vlmcsd []\n" + "\t%s vlmcs []\n\n", + Version, *argv, *argv + ); + + return !0; +} diff --git a/vlmcsdmulti_all.c b/vlmcsdmulti_all.c new file mode 100644 index 0000000..1646e09 --- /dev/null +++ b/vlmcsdmulti_all.c @@ -0,0 +1,8274 @@ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#if defined(USE_MSRPC) && !defined(_WIN32) && !defined(__CYGWIN__) +#error Microsoft RPC is only available on Windows and Cygwin +#endif + +#if defined(NO_SOCKETS) && defined(USE_MSRPC) +#error Cannot use inetd mode with Microsoft RPC +#endif + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include +#include +#include +#include +#include + +#ifndef _WIN32 +#include +#include +#include + +#if !defined(NO_LIMIT) && !__minix__ +#include +#if !__ANDROID__ +#include +#else // __ANDROID__ +#include +#endif // __ANDROID__ +#endif // !defined(NO_LIMIT) && !__minix__ + +#include +#include +#include +#include +#include +#endif // !_WIN32 + +#if __APPLE__ +#include +#endif // __APPLE__ + +#if __linux__ && defined(USE_AUXV) +#include +#endif + +#if __FreeBSD__ +#include +#endif + +#include "vlmcsd.h" +#include "endian.h" +#include "shared_globals.h" +#include "output.h" +#ifndef USE_MSRPC +#include "network.h" +#else // USE_MSRPC +#include "msrpc-server.h" +#endif // USE_MSRPC +#include "ntservice.h" +#include "helpers.h" + + +static const char* const optstring = "N:B:m:t:w:0:3:H:A:R:u:g:L:p:i:P:l:r:U:W:C:SsfeDd46VvIdqkZ"; + +#if !defined(NO_SOCKETS) +#if !defined(USE_MSRPC) +static uint_fast8_t maxsockets = 0; +static int_fast8_t haveIPv6Stack = 0; +static int_fast8_t haveIPv4Stack = 0; +static int_fast8_t v6required = 0; +static int_fast8_t v4required = 0; +#endif // !defined(USE_MSRPC) +#endif // !defined(NO_SOCKETS) + +#ifdef _NTSERVICE +static int_fast8_t installService = 0; +static const char *restrict ServiceUser = NULL; +static const char *restrict ServicePassword = ""; +#endif + +#ifndef NO_PID_FILE +static const char *fn_pid = NULL; +#endif + +#ifndef NO_INI_FILE + +#ifdef INI_FILE +static const char *fn_ini = INI_FILE; +#else // !INI_FILE +static const char *fn_ini = NULL; +#endif // !INI_FILE + +static const char* IniFileErrorMessage = ""; +char* IniFileErrorBuffer = NULL; +#define INIFILE_ERROR_BUFFERSIZE 256 + +static IniFileParameter_t IniFileParameterList[] = +{ +# ifndef NO_RANDOM_EPID + { "RandomizationLevel", INI_PARAM_RANDOMIZATION_LEVEL }, + { "LCID", INI_PARAM_LCID }, +# endif // NO_RANDOM_EPID +# ifdef USE_MSRPC + { "Port", INI_PARAM_PORT }, +# endif // USE_MSRPC +# if !defined(NO_SOCKETS) && !defined(USE_MSRPC) + { "Listen", INI_PARAM_LISTEN }, +# if !defined(NO_LIMIT) && !__minix__ + { "MaxWorkers", INI_PARAM_MAX_WORKERS }, +# endif // !defined(NO_LIMIT) && !__minix__ +# endif // !defined(NO_SOCKETS) && !defined(USE_MSRPC) +# if !defined(NO_TIMEOUT) && !__minix__ && !defined(USE_MSRPC) & !defined(USE_MSRPC) + { "ConnectionTimeout", INI_PARAM_CONNECTION_TIMEOUT }, +# endif // !defined(NO_TIMEOUT) && !__minix__ && !defined(USE_MSRPC) & !defined(USE_MSRPC) +# ifndef USE_MSRPC + { "DisconnectClientsImmediately", INI_PARAM_DISCONNECT_IMMEDIATELY }, + { "UseNDR64", INI_PARAM_RPC_NDR64 }, + { "UseBTFN", INI_PARAM_RPC_BTFN }, +# endif // USE_MSRPC +# ifndef NO_PID_FILE + { "PIDFile", INI_PARAM_PID_FILE }, +# endif // NO_PID_FILE +# ifndef NO_LOG + { "LogFile", INI_PARAM_LOG_FILE }, +# ifndef NO_VERBOSE_LOG + { "LogVerbose", INI_PARAM_LOG_VERBOSE }, +# endif // NO_VERBOSE_LOG +# endif // NO_LOG +# ifndef NO_CUSTOM_INTERVALS + {"ActivationInterval", INI_PARAM_ACTIVATION_INTERVAL }, + {"RenewalInterval", INI_PARAM_RENEWAL_INTERVAL }, +# endif // NO_CUSTOM_INTERVALS +# if !defined(NO_USER_SWITCH) && !defined(_WIN32) + { "user", INI_PARAM_UID }, + { "group", INI_PARAM_GID}, +# endif // !defined(NO_USER_SWITCH) && !defined(_WIN32) +}; + +#endif // NO_INI_FILE + + +#if !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ + +#if !defined(USE_THREADS) && !defined(CYGWIN) && !defined(USE_MSRPC) +static int shmid = -1; +#endif + +#if __ANDROID__ && !defined(USE_THREADS) // Bionic does not wrap these syscalls (willingly because Google fears, developers don't know how to use it) + +#ifdef __NR_shmget +static int shmget(key_t key, size_t size, int shmflg) +{ + return syscall(__NR_shmget, key, size, shmflg); +} +#endif // __NR_shmget + +#ifdef __NR_shmat +static void *shmat(int shmid, const void *shmaddr, int shmflg) +{ + return (void *)syscall(__NR_shmat, shmid, shmaddr, shmflg); +} +#endif // __NR_shmat + +#ifdef __NR_shmdt +static int shmdt(const void *shmaddr) +{ + return syscall(__NR_shmdt, shmaddr); +} +#endif // __NR_shmdt + +#ifdef __NR_shmctl +static int shmctl(int shmid, int cmd, /*struct shmid_ds*/void *buf) +{ + return syscall(__NR_shmctl, shmid, cmd, buf); +} +#endif // __NR_shmctl + +#endif // __ANDROID__ && !defined(USE_THREADS) + +#endif // !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ + +#ifndef NO_USER_SWITCH +#ifndef _WIN32 + +static const char *uname = NULL, *gname = NULL; +static gid_t gid = INVALID_GID; +static uid_t uid = INVALID_UID; + +// Get Numeric id of user/group +static char GetNumericId(gid_t *restrict id, const char *const c) +{ + char* endptr; + gid_t temp; + + temp = (gid_t)strtoll(c, &endptr, 10); + + if (!*endptr) *id = temp; + + return *endptr; +} + + +// Get group id from option argument +static char GetGid() +{ + struct group *g; + + if ((g = getgrnam(optarg))) + gid = g->gr_gid; + else + return GetNumericId(&gid, optarg); + + return 0; +} + + +// Get user id from option argument +static char GetUid() +{ + struct passwd *u; + + ////PORTABILITY: Assumes uid_t and gid_t are of same size (shouldn't be a problem) + if ((u = getpwnam(optarg))) + uid = u->pw_uid; + else + return GetNumericId((gid_t*)&uid, optarg); + + return 0; +} +#endif // _WIN32 +#endif //NO_USER_SWITCH + +#ifdef NO_HELP +static __noreturn void usage() +{ + printerrorf("Incorrect parameters\n\n"); + exit(!0); +} +#else // HELP + + +static __noreturn void usage() +{ + printerrorf("vlmcsd %s\n" + "\nUsage:\n" + " %s [ options ]\n\n" + "Where:\n" + #ifndef NO_CL_PIDS + " -w always use for Windows\n" + " -0 always use for Office2010\n" + " -3 always use for Office2013\n" + " -H always use hardware Id \n" + #endif // NO_CL_PIDS + #if !defined(_WIN32) && !defined(NO_USER_SWITCH) + " -u set uid to \n" + " -g set gid to \n" + #endif // !defined(_WIN32) && !defined(NO_USER_SWITCH) + #ifndef NO_RANDOM_EPID + " -r 0|1|2\t\tset ePID randomization level (default 1)\n" + " -C \t\tuse fixed in random ePIDs\n" + #endif // NO_RANDOM_EPID + #ifndef NO_SOCKETS + #ifndef USE_MSRPC + " -4\t\t\tuse IPv4\n" + " -6\t\t\tuse IPv6\n" + " -L
[:]\tlisten on IP address
with optional \n" + " -P \t\tset TCP port for subsequent -L statements (default 1688)\n" + #else // USE_MSRPC + " -P \t\tuse TCP port (default 1688)\n" + #endif // USE_MSRPC + #if !defined(NO_LIMIT) && !__minix__ + " -m \t\tHandle max. simultaneously (default no limit)\n" + #endif // !defined(NO_LIMIT) && !__minix__ + #ifdef _NTSERVICE + " -s install vlmcsd as an NT service. Ignores -e" + #ifndef _WIN32 + ", -f and -D" + #endif // _WIN32 + "\n" + " -S remove vlmcsd service. Ignores all other options\n" + " -U run NT service as . Must be used with -s\n" + " -W optional for -U. Must be used with -s\n" + #endif // _NTSERVICE + #ifndef NO_LOG + " -e log to stdout\n" + #endif // NO_LOG + #ifndef _WIN32 // + " -D run in foreground\n" + " -f run in foreground" + #ifndef NO_LOG + " and log to stdout" + #endif // NO_LOG + "\n" + #endif // _WIN32 + #endif // NO_SOCKETS + #ifndef USE_MSRPC + #if !defined(NO_TIMEOUT) && !__minix__ + " -t \t\tdisconnect clients after of inactivity (default 30)\n" + #endif // !defined(NO_TIMEOUT) && !__minix__ + " -d\t\t\tdisconnect clients after each request\n" + " -k\t\t\tdon't disconnect clients after each request (default)\n" + " -N0, -N1\t\tdisable/enable NDR64\n" + " -B0, -B1\t\tdisable/enable bind time feature negotiation\n" + #endif // USE_MSRPC + #ifndef NO_PID_FILE + " -p write pid to \n" + #endif // NO_PID_FILE + #ifndef NO_INI_FILE + " -i \t\tuse config file \n" + #endif // NO_INI_FILE + #ifndef NO_CUSTOM_INTERVALS + " -R renew activation every (default 1w)\n" + " -A retry activation every (default 2h)\n" + #endif // NO_CUSTOM_INTERVALS + #ifndef NO_LOG + #ifndef _WIN32 + " -l syslog log to syslog\n" + #endif // _WIN32 + " -l log to \n" + #ifndef NO_VERBOSE_LOG + " -v\t\t\tlog verbose\n" + " -q\t\t\tdon't log verbose (default)\n" + #endif // NO_VERBOSE_LOG + #endif // NO_LOG + " -V display version information and exit" + "\n", + Version, global_argv[0]); + + exit(!0); +} +#endif // HELP + + +#ifndef NO_CUSTOM_INTERVALS + +// Convert time span strings (e.g. "2h", "5w") to minutes +__pure static DWORD timeSpanString2Minutes(const char *const restrict argument) +{ + char *unitId; + + long long val = strtoll(argument, &unitId, 10); + + switch(toupper((int)*unitId)) + { + case 0: + case 'M': + break; + case 'H': + val *= 60; + break; + case 'D': + val *= 60 * 24; + break; + case 'W': + val *= 60 * 24 * 7; + break; + case 'S': + val /= 60; + break; + default: + return 0; + } + + if (val < 1) val = 1; + if (val > UINT_MAX) val = UINT_MAX; + + return (DWORD)val; +} + + +#ifndef NO_INI_FILE +__pure static BOOL getTimeSpanFromIniFile(DWORD* result, const char *const restrict argument) +{ + DWORD val = timeSpanString2Minutes(argument); + if (!val) + { + IniFileErrorMessage = "Incorrect time span."; + return FALSE; + } + + *result = val; + return TRUE; +} +#endif // NO_INI_FILE + + +__pure static DWORD getTimeSpanFromCommandLine(const char *const restrict optarg, const char optchar) +{ + long long val = timeSpanString2Minutes(optarg); + + if (!val) + { + printerrorf("Fatal: No valid time span specified in option -%c.\n", optchar); + exit (!0); + } + + return (DWORD)val; +} + +#endif // NO_CUSTOM_INTERVALS + + +#ifndef NO_INI_FILE +static void ignoreIniFileParameter(uint_fast8_t iniFileParameterId) +{ + uint_fast8_t i; + + for (i = 0; i < _countof(IniFileParameterList); i++) + { + if (IniFileParameterList[i].Id != iniFileParameterId) continue; + IniFileParameterList[i].Id = 0; + break; + } +} +#else // NO_INI_FILE +#define ignoreIniFileParameter(x) +#endif // NO_INI_FILE + + +#ifndef NO_INI_FILE +static BOOL getIniFileArgumentBool(int_fast8_t *result, const char *const argument) +{ + IniFileErrorMessage = "Argument must be true/on/yes/1 or false/off/no/0"; + return getArgumentBool(result, argument); +} + + +static BOOL getIniFileArgumentInt(unsigned int *result, const char *const argument, const unsigned int min, const unsigned int max) +{ + unsigned int tempResult; + + if (!stringToInt(argument, min, max, &tempResult)) + { + snprintf(IniFileErrorBuffer, INIFILE_ERROR_BUFFERSIZE, "Must be integer between %u and %u", min, max); + IniFileErrorMessage = IniFileErrorBuffer; + return FALSE; + } + + *result = tempResult; + return TRUE; +} + + +static char* allocateStringArgument(const char *const argument) +{ + char* result = (char*)vlmcsd_malloc(strlen(argument) + 1); + strcpy(result, argument); + return result; +} + + +static BOOL setIniFileParameter(uint_fast8_t id, const char *const iniarg) +{ + unsigned int result; + BOOL success = TRUE; + + switch(id) + { +# if !defined(NO_USER_SWITCH) && !defined(_WIN32) + + case INI_PARAM_GID: + { + struct group *g; + IniFileErrorMessage = "Invalid group id or name"; + if (!(gname = allocateStringArgument(iniarg))) return FALSE; + + if ((g = getgrnam(iniarg))) + gid = g->gr_gid; + else + success = !GetNumericId(&gid, iniarg); + break; + } + + case INI_PARAM_UID: + { + struct passwd *p; + IniFileErrorMessage = "Invalid user id or name"; + if (!(uname = allocateStringArgument(iniarg))) return FALSE; + + if ((p = getpwnam(iniarg))) + uid = p->pw_uid; + else + success = !GetNumericId(&uid, iniarg); + break; + } + +# endif // !defined(NO_USER_SWITCH) && !defined(_WIN32) + +# ifndef NO_RANDOM_EPID + + case INI_PARAM_LCID: + success = getIniFileArgumentInt(&result, iniarg, 0, 32767); + if (success) Lcid = (uint16_t)result; + break; + + case INI_PARAM_RANDOMIZATION_LEVEL: + success = getIniFileArgumentInt(&result, iniarg, 0, 2); + if (success) RandomizationLevel = (int_fast8_t)result; + break; + +# endif // NO_RANDOM_EPID + +# ifdef USE_MSRPC + + case INI_PARAM_PORT: + defaultport = allocateStringArgument(iniarg); + break; + +# endif // USE_MSRPC + +# if !defined(NO_SOCKETS) && !defined(USE_MSRPC) + + case INI_PARAM_LISTEN: + maxsockets++; + return TRUE; + +# if !defined(NO_LIMIT) && !__minix__ + + case INI_PARAM_MAX_WORKERS: +# ifdef USE_MSRPC + success = getIniFileArgumentInt(&MaxTasks, iniarg, 1, RPC_C_LISTEN_MAX_CALLS_DEFAULT); +# else // !USE_MSRPC + success = getIniFileArgumentInt(&MaxTasks, iniarg, 1, SEM_VALUE_MAX); +# endif // !USE_MSRPC + break; + +# endif // !defined(NO_LIMIT) && !__minix__ +# endif // NO_SOCKETS + +# ifndef NO_PID_FILE + + case INI_PARAM_PID_FILE: + fn_pid = allocateStringArgument(iniarg); + break; + +# endif // NO_PID_FILE + +# ifndef NO_LOG + + case INI_PARAM_LOG_FILE: + fn_log = allocateStringArgument(iniarg); + break; + +# ifndef NO_VERBOSE_LOG + case INI_PARAM_LOG_VERBOSE: + success = getIniFileArgumentBool(&logverbose, iniarg); + break; + +# endif // NO_VERBOSE_LOG +# endif // NO_LOG + +# ifndef NO_CUSTOM_INTERVALS + + case INI_PARAM_ACTIVATION_INTERVAL: + success = getTimeSpanFromIniFile(&VLActivationInterval, iniarg); + break; + + case INI_PARAM_RENEWAL_INTERVAL: + success = getTimeSpanFromIniFile(&VLRenewalInterval, iniarg); + break; + +# endif // NO_CUSTOM_INTERVALS + +# ifndef USE_MSRPC + +# if !defined(NO_TIMEOUT) && !__minix__ + + case INI_PARAM_CONNECTION_TIMEOUT: + success = getIniFileArgumentInt(&result, iniarg, 1, 600); + if (success) ServerTimeout = (DWORD)result; + break; + +# endif // !defined(NO_TIMEOUT) && !__minix__ + + case INI_PARAM_DISCONNECT_IMMEDIATELY: + success = getIniFileArgumentBool(&DisconnectImmediately, iniarg); + break; + + case INI_PARAM_RPC_NDR64: + success = getIniFileArgumentBool(&UseRpcNDR64, iniarg); + break; + + case INI_PARAM_RPC_BTFN: + success = getIniFileArgumentBool(&UseRpcBTFN, iniarg); + break; + +# endif // USE_MSRPC + + default: + return FALSE; + } + + return success; +} + + +static __pure int isControlCharOrSlash(const char c) +{ + if ((unsigned char)c < '!') return !0; + if (c == '/') return !0; + return 0; +} + + +static void iniFileLineNextWord(const char **s) +{ + while ( **s && isspace((int)**s) ) (*s)++; +} + + +static BOOL setHwIdFromIniFileLine(const char **s, const ProdListIndex_t index) +{ + iniFileLineNextWord(s); + + if (**s == '/') + { + if (KmsResponseParameters[index].HwId) return TRUE; + + BYTE* HwId = (BYTE*)vlmcsd_malloc(sizeof(((RESPONSE_V6 *)0)->HwId)); + hex2bin(HwId, *s + 1, sizeof(((RESPONSE_V6 *)0)->HwId)); + KmsResponseParameters[index].HwId = HwId; + } + + return TRUE; +} + + +static BOOL checkGuidInIniFileLine(const char **s, ProdListIndex_t *const index) +{ + GUID AppGuid; + + if (!string2Uuid(*s, &AppGuid)) return FALSE; + + (*s) += GUID_STRING_LENGTH; + getProductNameHE(&AppGuid, AppList, index); + + if (*index > getAppListSize() - 2) + { + IniFileErrorMessage = "Unknown App Guid."; + return FALSE; + } + + iniFileLineNextWord(s); + if ( *(*s)++ != '=' ) return FALSE; + + return TRUE; +} + + +static BOOL setEpidFromIniFileLine(const char **s, const ProdListIndex_t index) +{ + iniFileLineNextWord(s); + const char *savedPosition = *s; + uint_fast16_t i; + + for (i = 0; !isControlCharOrSlash(**s); i++) + { + if (utf8_to_ucs2_char((const unsigned char*)*s, (const unsigned char**)s) == (WCHAR)~0) + { + return FALSE; + } + } + + if (i < 1 || i >= PID_BUFFER_SIZE) return FALSE; + if (KmsResponseParameters[index].Epid) return TRUE; + + size_t size = *s - savedPosition + 1; + + char* epidbuffer = (char*)vlmcsd_malloc(size); + memcpy(epidbuffer, savedPosition, size - 1); + epidbuffer[size - 1] = 0; + + KmsResponseParameters[index].Epid = epidbuffer; + + #ifndef NO_LOG + KmsResponseParameters[index].EpidSource = fn_ini; + #endif //NO_LOG + + return TRUE; +} + + +static BOOL getIniFileArgument(const char **s) +{ + while (!isspace((int)**s) && **s != '=' && **s) (*s)++; + iniFileLineNextWord(s); + + if (*((*s)++) != '=') + { + IniFileErrorMessage = "'=' required after keyword."; + return FALSE; + } + + iniFileLineNextWord(s); + + if (!**s) + { + IniFileErrorMessage = "missing argument after '='."; + return FALSE; + } + + return TRUE; +} + + +static BOOL handleIniFileParameter(const char *s) +{ + uint_fast8_t i; + + for (i = 0; i < _countof(IniFileParameterList); i++) + { + if (strncasecmp(IniFileParameterList[i].Name, s, strlen(IniFileParameterList[i].Name))) continue; + if (!IniFileParameterList[i].Id) return TRUE; + + if (!getIniFileArgument(&s)) return FALSE; + + return setIniFileParameter(IniFileParameterList[i].Id, s); + } + + IniFileErrorMessage = "Unknown keyword."; + return FALSE; +} + + +#if !defined(NO_SOCKETS) && !defined(USE_MSRPC) +static BOOL setupListeningSocketsFromIniFile(const char *s) +{ + if (!maxsockets) return TRUE; + if (strncasecmp("Listen", s, 6)) return TRUE; + if (!getIniFileArgument(&s)) return TRUE; + + snprintf(IniFileErrorBuffer, INIFILE_ERROR_BUFFERSIZE, "Cannot listen on %s.", s); + IniFileErrorMessage = IniFileErrorBuffer; + return addListeningSocket(s); +} +#endif // !defined(NO_SOCKETS) && !defined(USE_MSRPC) + + +static BOOL readIniFile(const uint_fast8_t pass) +{ + char line[256]; + const char *s; + ProdListIndex_t appIndex; + unsigned int lineNumber; + uint_fast8_t lineParseError; + + FILE *restrict f; + BOOL result = TRUE; + + IniFileErrorBuffer = (char*)vlmcsd_malloc(INIFILE_ERROR_BUFFERSIZE); + + if ( !(f = fopen(fn_ini, "r") )) return FALSE; + + for (lineNumber = 1; (s = fgets(line, sizeof(line), f)); lineNumber++) + { + line[strlen(line) - 1] = 0; + + iniFileLineNextWord(&s); + if (*s == ';' || *s == '#' || !*s) continue; + +# ifndef NO_SOCKETS + if (pass == INI_FILE_PASS_1) +# endif // NO_SOCKETS + { + if (handleIniFileParameter(s)) continue; + + lineParseError = !checkGuidInIniFileLine(&s, &appIndex) || + !setEpidFromIniFileLine(&s, appIndex) || + !setHwIdFromIniFileLine(&s, appIndex); + } +# if !defined(NO_SOCKETS) && !defined(USE_MSRPC) + else if (pass == INI_FILE_PASS_2) + { + lineParseError = !setupListeningSocketsFromIniFile(s); + } + else + { + return FALSE; + } +# endif // NO_SOCKETS + + if (lineParseError) + { + printerrorf("Warning: %s line %u: \"%s\". %s\n", fn_ini, lineNumber, line, IniFileErrorMessage); + continue; + } + } + + if (ferror(f)) result = FALSE; + + free(IniFileErrorBuffer); + fclose(f); + +# if !defined(NO_SOCKETS) && !defined(NO_LOG) + + if (pass == INI_FILE_PASS_1 && !InetdMode && result) + { +# ifdef _NTSERVICE + if (!installService) +# endif // _NTSERVICE + logger("Read ini file %s\n", fn_ini); + } + +# endif // !defined(NO_SOCKETS) && !defined(NO_LOG) + + return result; +} +#endif // NO_INI_FILE + + +#if !defined(NO_SOCKETS) +#if !defined(_WIN32) +#if !defined(NO_SIGHUP) +static void exec_self(char** argv) +{ +# if __linux__ && defined(USE_AUXV) + + char *execname_ptr = (char*)getauxval(AT_EXECFN); + if (execname_ptr) execv(execname_ptr, argv); + +# elif (__linux__ || __CYGWIN__) && !defined(NO_PROCFS) + + execv(realpath("/proc/self/exe", NULL), argv); + +# elif (__FreeBSD__) && !defined(NO_PROCFS) + + int mib[4]; + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PATHNAME; + mib[3] = -1; + char path[PATH_MAX + 1]; + size_t cb = sizeof(path); + if (!sysctl(mib, 4, path, &cb, NULL, 0)) execv(path, argv); + +# elif (__DragonFly__) && !defined(NO_PROCFS) + + execv(realpath("/proc/curproc/file", NULL), argv); + +# elif __NetBSD__ && !defined(NO_PROCFS) + + execv(realpath("/proc/curproc/exe", NULL), argv); + +# elif __sun__ + + const char* exename = getexecname(); + if (exename) execv(exename, argv); + +# elif __APPLE__ + + char path[PATH_MAX + 1]; + uint32_t size = sizeof(path); + if (_NSGetExecutablePath(path, &size) == 0) execv(path, argv); + +# else + + execvp(argv[0], argv); + +# endif +} + + +static void HangupHandler(const int signal_unused) +{ + int i; + int_fast8_t daemonize_protection = TRUE; + CARGV argv_in = multi_argv == NULL ? global_argv : multi_argv; + int argc_in = multi_argc == 0 ? global_argc : multi_argc; + const char** argv_out = (const char**)vlmcsd_malloc((argc_in + 2) * sizeof(char**)); + + for (i = 0; i < argc_in; i++) + { + if (!strcmp(argv_in[i], "-Z")) daemonize_protection = FALSE; + argv_out[i] = argv_in[i]; + } + + argv_out[argc_in] = argv_out[argc_in + 1] = NULL; + if (daemonize_protection) argv_out[argc_in] = (char*) "-Z"; + + exec_self((char**)argv_out); + +# ifndef NO_LOG + logger("Fatal: Unable to restart on SIGHUP: %s\n", strerror(errno)); +# endif + +# ifndef NO_PID_FILE + if (fn_pid) unlink(fn_pid); +# endif // NO_PID_FILE + exit(errno); +} +#endif // NO_SIGHUP + + +static void terminationHandler(const int signal_unused) +{ + cleanup(); + exit(0); +} + + +#if defined(CHILD_HANDLER) || __minix__ +static void childHandler(const int signal) +{ + waitpid(-1, NULL, WNOHANG); +} +#endif // defined(CHILD_HANDLER) || __minix__ + + +static int daemonizeAndSetSignalAction() +{ + struct sigaction sa; + sigemptyset(&sa.sa_mask); + +# ifndef NO_LOG + if ( !nodaemon) if (daemon(!0, logstdout)) +# else // NO_LOG + if ( !nodaemon) if (daemon(!0, 0)) +# endif // NO_LOG + { + printerrorf("Fatal: Could not daemonize to background.\n"); + return(errno); + } + + if (!InetdMode) + { +# ifndef USE_THREADS + +# if defined(CHILD_HANDLER) || __minix__ + sa.sa_handler = childHandler; +# else // !(defined(CHILD_HANDLER) || __minix__) + sa.sa_handler = SIG_IGN; +# endif // !(defined(CHILD_HANDLER) || __minix__) + sa.sa_flags = SA_NOCLDWAIT; + + if (sigaction(SIGCHLD, &sa, NULL)) + return(errno); + +# endif // !USE_THREADS + + sa.sa_handler = terminationHandler; + sa.sa_flags = 0; + + sigaction(SIGINT, &sa, NULL); + sigaction(SIGTERM, &sa, NULL); + +# ifndef NO_SIGHUP + sa.sa_handler = HangupHandler; + sa.sa_flags = SA_NODEFER; + sigaction(SIGHUP, &sa, NULL); +# endif // NO_SIGHUP + } + + return 0; +} + + +#else // _WIN32 + +static BOOL terminationHandler(const DWORD fdwCtrlType) +{ + // What a lame substitute for Unix signal handling + switch(fdwCtrlType) + { + case CTRL_C_EVENT: + case CTRL_CLOSE_EVENT: + case CTRL_BREAK_EVENT: + case CTRL_LOGOFF_EVENT: + case CTRL_SHUTDOWN_EVENT: + cleanup(); + exit(0); + default: + return FALSE; + } +} + + +static DWORD daemonizeAndSetSignalAction() +{ + if(!SetConsoleCtrlHandler( (PHANDLER_ROUTINE) terminationHandler, TRUE )) + { + #ifndef NO_LOG + DWORD rc = GetLastError(); + logger("Warning: Could not register Windows signal handler: Error %u\n", rc); + #endif // NO_LOG + } + + return ERROR_SUCCESS; +} +#endif // _WIN32 +#endif // !defined(NO_SOCKETS) + + +// Workaround for Cygwin fork bug (only affects cygwin processes that are Windows services) +// Best is to compile for Cygwin with threads. fork() is slow and unreliable on Cygwin +#if !defined(NO_INI_FILE) || !defined(NO_LOG) || !defined(NO_CL_PIDS) +__pure static char* getCommandLineArg(char *const restrict optarg) +{ + #if !defined (__CYGWIN__) || defined(USE_THREADS) || defined(NO_SOCKETS) + return optarg; + #else + if (!IsNTService) return optarg; + + return allocateStringArgument(optarg); + #endif +} +#endif // !defined(NO_INI_FILE) || !defined(NO_LOG) || !defined(NO_CL_PIDS) + + +static void parseGeneralArguments() { + int o; + + #ifndef NO_CL_PIDS + BYTE* HwId; + #endif // NO_CL_PIDS + + for (opterr = 0; ( o = getopt(global_argc, (char* const*)global_argv, optstring) ) > 0; ) switch (o) + { + #if !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) + case 'Z': + IsRestarted = TRUE; + nodaemon = TRUE; + break; + #endif // !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) + + #ifndef NO_CL_PIDS + case 'w': + KmsResponseParameters[APP_ID_WINDOWS].Epid = getCommandLineArg(optarg); + #ifndef NO_LOG + KmsResponseParameters[APP_ID_WINDOWS].EpidSource = "command line"; + #endif // NO_LOG + break; + + case '0': + KmsResponseParameters[APP_ID_OFFICE2010].Epid = getCommandLineArg(optarg); + #ifndef NO_LOG + KmsResponseParameters[APP_ID_OFFICE2010].EpidSource = "command line"; + #endif // NO_LOG + break; + + case '3': + KmsResponseParameters[APP_ID_OFFICE2013].Epid = getCommandLineArg(optarg); + #ifndef NO_LOG + KmsResponseParameters[APP_ID_OFFICE2013].EpidSource = "command line"; + #endif // NO_LOG + break; + + case 'H': + HwId = (BYTE*)vlmcsd_malloc(sizeof(((RESPONSE_V6 *)0)->HwId)); + + hex2bin(HwId, optarg, sizeof(((RESPONSE_V6 *)0)->HwId)); + + KmsResponseParameters[APP_ID_WINDOWS].HwId = HwId; + KmsResponseParameters[APP_ID_OFFICE2010].HwId = HwId; + KmsResponseParameters[APP_ID_OFFICE2013].HwId = HwId; + break; + #endif // NO_CL_PIDS + + #ifndef NO_SOCKETS + + #ifndef USE_MSRPC + case '4': + case '6': + case 'P': + ignoreIniFileParameter(INI_PARAM_LISTEN); + break; + #else // USE_MSRPC + case 'P': + defaultport = optarg; + ignoreIniFileParameter(INI_PARAM_PORT); + break; + #endif // USE_MSRPC + + #if !defined(NO_LIMIT) && !__minix__ + + case 'm': + #ifdef USE_MSRPC + MaxTasks = getOptionArgumentInt(o, 1, RPC_C_LISTEN_MAX_CALLS_DEFAULT); + #else // !USE_MSRPC + MaxTasks = getOptionArgumentInt(o, 1, SEM_VALUE_MAX); + #endif // !USE_MSRPC + ignoreIniFileParameter(INI_PARAM_MAX_WORKERS); + break; + + #endif // !defined(NO_LIMIT) && !__minix__ + #endif // NO_SOCKETS + + #if !defined(NO_TIMEOUT) && !__minix__ && !defined(USE_MSRPC) + case 't': + ServerTimeout = getOptionArgumentInt(o, 1, 600); + ignoreIniFileParameter(INI_PARAM_CONNECTION_TIMEOUT); + break; + #endif // !defined(NO_TIMEOUT) && !__minix__ && !defined(USE_MSRPC) + + #ifndef NO_PID_FILE + case 'p': + fn_pid = getCommandLineArg(optarg); + ignoreIniFileParameter(INI_PARAM_PID_FILE); + break; + #endif + + #ifndef NO_INI_FILE + case 'i': + fn_ini = getCommandLineArg(optarg); + if (!strcmp(fn_ini, "-")) fn_ini = NULL; + break; + #endif + + #ifndef NO_LOG + case 'l': + fn_log = getCommandLineArg(optarg); + ignoreIniFileParameter(INI_PARAM_LOG_FILE); + break; + + #ifndef NO_VERBOSE_LOG + case 'v': + case 'q': + logverbose = o == 'v'; + ignoreIniFileParameter(INI_PARAM_LOG_VERBOSE); + break; + + #endif // NO_VERBOSE_LOG + #endif // NO_LOG + + #ifndef NO_SOCKETS + #ifndef USE_MSRPC + case 'L': + maxsockets++; + ignoreIniFileParameter(INI_PARAM_LISTEN); + break; + #endif // USE_MSRPC + + case 'f': + nodaemon = 1; + #ifndef NO_LOG + logstdout = 1; + #endif + break; + + #ifdef _NTSERVICE + case 'U': + ServiceUser = optarg; + break; + + case 'W': + ServicePassword = optarg; + break; + + case 's': + #ifndef USE_MSRPC + if (InetdMode) usage(); + #endif // USE_MSRPC + if (!IsNTService) installService = 1; // Install + break; + + case 'S': + if (!IsNTService) installService = 2; // Remove + break; + #endif // _NTSERVICE + + case 'D': + nodaemon = 1; + break; + + #ifndef NO_LOG + case 'e': + logstdout = 1; + break; + #endif // NO_LOG + #endif // NO_SOCKETS + + #ifndef _WIN32 + case 'I': // Backward compatibility with svn681 and earlier + break; + #endif // _WIN32 + + #ifndef NO_RANDOM_EPID + case 'r': + RandomizationLevel = (int_fast8_t)getOptionArgumentInt(o, 0, 2); + ignoreIniFileParameter(INI_PARAM_RANDOMIZATION_LEVEL); + break; + + case 'C': + Lcid = (uint16_t)getOptionArgumentInt(o, 0, 32767); + + ignoreIniFileParameter(INI_PARAM_LCID); + + #ifdef _PEDANTIC + if (!IsValidLcid(Lcid)) + { + printerrorf("Warning: %s is not a valid LCID.\n", optarg); + } + #endif // _PEDANTIC + + break; + #endif // NO_RANDOM_PID + + #if !defined(NO_USER_SWITCH) && !defined(_WIN32) + case 'g': + gname = optarg; + ignoreIniFileParameter(INI_PARAM_GID); + #ifndef NO_SIGHUP + if (!IsRestarted) + #endif // NO_SIGHUP + if (GetGid()) + { + printerrorf("Fatal: setgid for %s failed.\n", optarg); + exit(!0); + } + break; + + case 'u': + uname = optarg; + ignoreIniFileParameter(INI_PARAM_UID); + #ifndef NO_SIGHUP + if (!IsRestarted) + #endif // NO_SIGHUP + if (GetUid()) + { + printerrorf("Fatal: setuid for %s failed.\n", optarg); + exit(!0); + } + break; + #endif // NO_USER_SWITCH && !_WIN32 + + #ifndef NO_CUSTOM_INTERVALS + case 'R': + VLRenewalInterval = getTimeSpanFromCommandLine(optarg, o); + ignoreIniFileParameter(INI_PARAM_RENEWAL_INTERVAL); + break; + + case 'A': + VLActivationInterval = getTimeSpanFromCommandLine(optarg, o); + ignoreIniFileParameter(INI_PARAM_ACTIVATION_INTERVAL); + break; + #endif + + #ifndef USE_MSRPC + case 'd': + case 'k': + DisconnectImmediately = o == 'd'; + ignoreIniFileParameter(INI_PARAM_DISCONNECT_IMMEDIATELY); + break; + + case 'N': + if (!getArgumentBool(&UseRpcNDR64, optarg)) usage(); + ignoreIniFileParameter(INI_PARAM_RPC_NDR64); + break; + + case 'B': + if (!getArgumentBool(&UseRpcBTFN, optarg)) usage(); + ignoreIniFileParameter(INI_PARAM_RPC_BTFN); + break; + #endif // !USE_MSRPC + + case 'V': + #ifdef _NTSERVICE + if (IsNTService) break; + #endif + printf("vlmcsd %s\n", Version); + exit(0); + + default: + usage(); + } + + // Do not allow non-option arguments + if (optind != global_argc) + usage(); + + #ifdef _NTSERVICE + // -U and -W must be used with -s + if ((ServiceUser || *ServicePassword) && installService != 1) usage(); + #endif // _NTSERVICE +} + + +#ifndef NO_PID_FILE +static void writePidFile() +{ +# ifndef NO_SIGHUP + if (IsRestarted) return; +# endif // NO_SIGHUP + + if (fn_pid && !InetdMode) + { + FILE *_f = fopen(fn_pid, "w"); + + if ( _f ) + { + fprintf(_f, "%u", (uint32_t)getpid()); + fclose(_f); + } + + #ifndef NO_LOG + else + { + logger("Warning: Cannot write pid file '%s'. %s.\n", fn_pid, strerror(errno)); + } + #endif // NO_LOG + } +} +#else +#define writePidFile(x) +#endif // NO_PID_FILE + +#if !defined(NO_SOCKETS) && !defined(USE_MSRPC) + +void cleanup() +{ + + if (!InetdMode) + { + #ifndef NO_PID_FILE + if (fn_pid) unlink(fn_pid); + #endif // NO_PID_FILE + closeAllListeningSockets(); + + #if !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !defined(_WIN32) && !__minix__ + sem_unlink("/vlmcsd"); + #if !defined(USE_THREADS) && !defined(CYGWIN) + if (shmid >= 0) + { + if (Semaphore != (sem_t*)-1) shmdt(Semaphore); + shmctl(shmid, IPC_RMID, NULL); + } + #endif // !defined(USE_THREADS) && !defined(CYGWIN) + #endif // !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !defined(_WIN32) && !__minix__ + + #ifndef NO_LOG + logger("vlmcsd %s was shutdown\n", Version); + #endif // NO_LOG + } + +} + +#elif defined(USE_MSRPC) + +void cleanup() +{ +# ifndef NO_PID_FILE + if (fn_pid) unlink(fn_pid); +# endif // NO_PID_FILE + +# ifndef NO_LOG + logger("vlmcsd %s was shutdown\n", Version); +# endif // NO_LOG +} + +#else // Neither Sockets nor RPC + +__pure void cleanup() {} + +#endif // Neither Sockets nor RPC + + +#if !defined(USE_MSRPC) && !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !__minix__ +// Get a semaphore for limiting the maximum concurrent tasks +static void allocateSemaphore(void) +{ + #ifdef USE_THREADS + #define sharemode 0 + #else + #define sharemode 1 + #endif + + #ifndef _WIN32 + sem_unlink("/vlmcsd"); + #endif + + if(MaxTasks < SEM_VALUE_MAX && !InetdMode) + { + #ifndef _WIN32 + + #if !defined(USE_THREADS) && !defined(CYGWIN) + + if ((Semaphore = sem_open("/vlmcsd", O_CREAT /*| O_EXCL*/, 0700, MaxTasks)) == SEM_FAILED) // fails on many systems + { + // We didn't get a named Semaphore (/dev/shm on Linux) so let's try our own shared page + + if ( + ( shmid = shmget(IPC_PRIVATE, sizeof(sem_t), IPC_CREAT | 0600) ) < 0 || + ( Semaphore = (sem_t*)shmat(shmid, NULL, 0) ) == (sem_t*)-1 || + sem_init(Semaphore, 1, MaxTasks) < 0 + ) + { + int errno_save = errno; + if (Semaphore != (sem_t*)-1) shmdt(Semaphore); + if (shmid >= 0) shmctl(shmid, IPC_RMID, NULL); + printerrorf("Warning: Could not create semaphore: %s\n", vlmcsd_strerror(errno_save)); + MaxTasks = SEM_VALUE_MAX; + } + } + + #else // THREADS or CYGWIN + + Semaphore = (sem_t*)vlmcsd_malloc(sizeof(sem_t)); + + if (sem_init(Semaphore, sharemode, MaxTasks) < 0) // sem_init is not implemented on Darwin (returns ENOSYS) + { + free(Semaphore); + + if ((Semaphore = sem_open("/vlmcsd", O_CREAT /*| O_EXCL*/, 0700, MaxTasks)) == SEM_FAILED) + { + printerrorf("Warning: Could not create semaphore: %s\n", vlmcsd_strerror(errno)); + MaxTasks = SEM_VALUE_MAX; + } + } + + #endif // THREADS or CYGWIN + + #else // _WIN32 + + if (!(Semaphore = CreateSemaphoreA(NULL, MaxTasks, MaxTasks, NULL))) + { + printerrorf("Warning: Could not create semaphore: %s\n", vlmcsd_strerror(GetLastError())); + MaxTasks = SEM_VALUE_MAX; + } + + #endif // _WIN32 + } +} +#endif // !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !__minix__ + + +#if !defined(NO_SOCKETS) && !defined(USE_MSRPC) +int setupListeningSockets() +{ + int o; + uint_fast8_t allocsockets = maxsockets ? maxsockets : 2; + + SocketList = (SOCKET*)vlmcsd_malloc((size_t)allocsockets * sizeof(SOCKET)); + + haveIPv4Stack = checkProtocolStack(AF_INET); + haveIPv6Stack = checkProtocolStack(AF_INET6); + + // Reset getopt since we've alread used it + optReset(); + + for (opterr = 0; ( o = getopt(global_argc, (char* const*)global_argv, optstring) ) > 0; ) switch (o) + { + case '4': + + if (!haveIPv4Stack) + { + printerrorf("Fatal: Your system does not support %s.\n", cIPv4); + return !0; + } + v4required = 1; + break; + + case '6': + + if (!haveIPv6Stack) + { + printerrorf("Fatal: Your system does not support %s.\n", cIPv6); + return !0; + } + v6required = 1; + break; + + case 'L': + + addListeningSocket(optarg); + break; + + case 'P': + + defaultport = optarg; + break; + + default: + + break; + } + + +# ifndef NO_INI_FILE + if (maxsockets && !numsockets) + { + if (fn_ini && !readIniFile(INI_FILE_PASS_2)) + { + #ifdef INI_FILE + if (strcmp(fn_ini, INI_FILE)) + #endif // INI_FILE + printerrorf("Warning: Can't read %s: %s\n", fn_ini, strerror(errno)); + } + } +# endif + + // if -L hasn't been specified on the command line, use default sockets (all IP addresses) + // maxsocket results from first pass parsing the arguments + if (!maxsockets) + { + if (haveIPv6Stack && (v6required || !v4required)) addListeningSocket("::"); + if (haveIPv4Stack && (v4required || !v6required)) addListeningSocket("0.0.0.0"); + } + + if (!numsockets) + { + printerrorf("Fatal: Could not listen on any socket.\n"); + return(!0); + } + + return 0; +} +#endif // !defined(NO_SOCKETS) && !defined(USE_MSRPC) + + +int server_main(int argc, CARGV argv) +{ + #if !defined(_NTSERVICE) && !defined(NO_SOCKETS) + int error; + #endif // !defined(_NTSERVICE) && !defined(NO_SOCKETS) + + // Initialize ePID / HwId parameters + memset(KmsResponseParameters, 0, sizeof(KmsResponseParameters)); + + global_argc = argc; + global_argv = argv; + + #ifdef _NTSERVICE // #endif is in newmain() + DWORD lasterror = ERROR_SUCCESS; + + if (!StartServiceCtrlDispatcher(NTServiceDispatchTable) && (lasterror = GetLastError()) == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) + { + IsNTService = FALSE; + return newmain(); + } + + return lasterror; +} + + +int newmain() +{ + int error; + + // Initialize thread synchronization objects for Windows and Cygwin + #ifdef USE_THREADS + + #ifndef NO_LOG + // Initialize the Critical Section for proper logging + InitializeCriticalSection(&logmutex); + #endif // NO_LOG + + #endif // USE_THREADS + + #ifdef _WIN32 + + #ifndef USE_MSRPC + // Windows Sockets must be initialized + WSADATA wsadata; + + if ((error = WSAStartup(0x0202, &wsadata))) + { + printerrorf("Fatal: Could not initialize Windows sockets (Error: %d).\n", error); + return error; + } + #endif // USE_MSRPC + + // Windows can never daemonize + nodaemon = 1; + + #else // __CYGWIN__ + + // Do not daemonize if we are a Windows service + if (IsNTService) nodaemon = 1; + + #endif // _WIN32 / __CYGWIN__ + #endif // _NTSERVICE ( #ifdef is main(int argc, CARGV argv) ) + + parseGeneralArguments(); // Does not return if an error occurs + + #if !defined(_WIN32) && !defined(NO_SOCKETS) && !defined(USE_MSRPC) + struct stat statbuf; + fstat(STDIN_FILENO, &statbuf); + if (S_ISSOCK(statbuf.st_mode)) + { + InetdMode = 1; + nodaemon = 1; + maxsockets = 0; + #ifndef NO_LOG + logstdout = 0; + #endif // NO_LOG + } + #endif // !defined(_WIN32) && !defined(NO_SOCKETS) && !defined(USE_MSRPC) + + #ifndef NO_INI_FILE + if (fn_ini && !readIniFile(INI_FILE_PASS_1)) + { + #ifdef INI_FILE + if (strcmp(fn_ini, INI_FILE)) + #endif // INI_FILE + printerrorf("Warning: Can't read %s: %s\n", fn_ini, strerror(errno)); + } + #endif // NO_INI_FILE + + #if !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !__minix__ && !defined(USE_MSRPC) + allocateSemaphore(); + #endif // !defined(NO_LIMIT) && !defined(NO_SOCKETS) && __minix__ + + #ifdef _NTSERVICE + if (installService) + return NtServiceInstallation(installService, ServiceUser, ServicePassword); + #endif // _NTSERVICE + + #if !defined(NO_SOCKETS) && !defined(USE_MSRPC) + if (!InetdMode) + { + if ((error = setupListeningSockets())) return error; + } + #endif // NO_SOCKETS + + // After sockets have been set up, we may switch to a lower privileged user + #if !defined(_WIN32) && !defined(NO_USER_SWITCH) + + #ifndef NO_SIGHUP + if (!IsRestarted) + { + #endif // NO_SIGHUP + if (gid != INVALID_GID && setgid(gid)) + { + printerrorf("Fatal: setgid for %s failed.\n", gname); + return !0; + } + + if (uid != INVALID_UID && setuid(uid)) + { + printerrorf("Fatal: setuid for %s failed.\n", uname); + return !0; + } + #ifndef NO_SIGHUP + } + #endif // NO_SIGHUP + + #endif // !defined(_WIN32) && !defined(NO_USER_SWITCH) + + randomNumberInit(); + + // Randomization Level 1 means generate ePIDs at startup and use them during + // the lifetime of the process. So we generate them now + #ifndef NO_RANDOM_EPID + if (RandomizationLevel == 1) randomPidInit(); + #endif + + #if !defined(NO_SOCKETS) + #ifdef _WIN32 + if (!IsNTService) + #endif // _WIN32 + if ((error = daemonizeAndSetSignalAction())) return error; + #endif // !defined(NO_SOCKETS) + + writePidFile(); + + #if !defined(NO_LOG) && !defined(NO_SOCKETS) && !defined(USE_MSRPC) + if (!InetdMode) + logger("vlmcsd %s started successfully\n", Version); + #endif // !defined(NO_LOG) && !defined(NO_SOCKETS) && !defined(USE_MSRPC) + + #if defined(_NTSERVICE) && !defined(USE_MSRPC) + if (IsNTService) ReportServiceStatus(SERVICE_RUNNING, NO_ERROR, 200); + #endif // defined(_NTSERVICE) && !defined(USE_MSRPC) + + int rc; + rc = runServer(); + + // Clean up things and exit + #ifdef _NTSERVICE + if (!ServiceShutdown) + #endif + cleanup(); + #ifdef _NTSERVICE + else + ReportServiceStatus(SERVICE_STOPPED, NO_ERROR, 0); + #endif + + return rc; +} +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include "vlmcs.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef _WIN32 +#include +#include +#else // _WIN32 +#endif // _WIN32 +#include "endian.h" +#include "shared_globals.h" +#include "output.h" +#ifndef USE_MSRPC +#include "network.h" +#include "rpc.h" +#else // USE_MSRPC +#include "msrpc-client.h" +#endif // USE_MSRPC +#include "kms.h" +#include "helpers.h" +#include "dns_srv.h" + + +#define VLMCS_OPTION_GRAB_INI 1 +#define VLMCS_OPTION_NO_GRAB_INI 2 + +#define kmsVersionMinor 0 // Currently constant. May change in future KMS versions + +// Function Prototypes +static void CreateRequestBase(REQUEST *Request); + + +// KMS Parameters +static int_fast8_t verbose = FALSE; +static int_fast8_t VMInfo = FALSE; +static int_fast8_t dnsnames = TRUE; +static int FixedRequests = 0; +static BYTE LicenseStatus = 0x02; +static const char *CMID = NULL; +static const char *CMID_prev = NULL; +static const char *WorkstationName = NULL; +static int BindingExpiration = 43200; //30 days +static const char *RemoteAddr; +static int_fast8_t ReconnectForEachRequest = FALSE; +static int AddressFamily = AF_UNSPEC; +static int_fast8_t incompatibleOptions = 0; +static const char* fn_ini_client = NULL; + +#ifndef NO_DNS +static int_fast8_t NoSrvRecordPriority = FALSE; +#endif // NO_DNS + + +// Structure for handling "License Packs" (e.g. Office2013v5 or WindowsVista) +typedef struct +{ + const char *names; //This is a list of strings. Terminate with additional Zero!!! + int N_Policy; + int kmsVersionMajor; + const GUID *AppID; + GUID ActID; + GUID KMSID; +} LicensePack; + + +typedef char iniFileEpidLines[3][256]; + +// Well known "license packs" +static const LicensePack LicensePackList[] = +{ + // List of names min lics version appID skuId KMSCountedID + /* 000 */ { "Vista\000W6\000" + "WindowsVista\000" + "Windows\000", 25, 4, PWINGUID, { 0x4f3d1606, 0x3fea, 0x4c01, { 0xbe, 0x3c, 0x8d, 0x67, 0x1c, 0x40, 0x1e, 0x3b, } }, { 0x212a64dc, 0x43b1, 0x4d3d, { 0xa3, 0x0c, 0x2f, 0xc6, 0x9d, 0x20, 0x95, 0xc6 } } }, + /* 001 */ { "W7\000Windows7\000", 25, 4, PWINGUID, { 0xb92e9980, 0xb9d5, 0x4821, { 0x9c, 0x94, 0x14, 0x0f, 0x63, 0x2f, 0x63, 0x12, } }, { 0x7fde5219, 0xfbfa, 0x484a, { 0x82, 0xc9, 0x34, 0xd1, 0xad, 0x53, 0xe8, 0x56 } } }, + /* 002 */ { "W8\000Windows8\000", 25, 5, PWINGUID, { 0xa98bcd6d, 0x5343, 0x4603, { 0x8a, 0xfe, 0x59, 0x08, 0xe4, 0x61, 0x11, 0x12, } }, { 0x3c40b358, 0x5948, 0x45af, { 0x92, 0x3b, 0x53, 0xd2, 0x1f, 0xcc, 0x7e, 0x79 } } }, + /* 003 */ { "W8C\000Windows8C\000", 25, 5, PWINGUID, { 0xc04ed6bf, 0x55c8, 0x4b47, { 0x9f, 0x8e, 0x5a, 0x1f, 0x31, 0xce, 0xee, 0x60, } }, { 0xbbb97b3b, 0x8ca4, 0x4a28, { 0x97, 0x17, 0x89, 0xfa, 0xbd, 0x42, 0xc4, 0xac } } }, + /* 004 */ { "W81\000Windows81\000", 25, 6, PWINGUID, { 0xc06b6981, 0xd7fd, 0x4a35, { 0xb7, 0xb4, 0x05, 0x47, 0x42, 0xb7, 0xaf, 0x67, } }, { 0xcb8fc780, 0x2c05, 0x495a, { 0x97, 0x10, 0x85, 0xaf, 0xff, 0xc9, 0x04, 0xd7 } } }, + /* 005 */ { "W81C\000Windows81C\000", 25, 6, PWINGUID, { 0xfe1c3238, 0x432a, 0x43a1, { 0x8e, 0x25, 0x97, 0xe7, 0xd1, 0xef, 0x10, 0xf3, } }, { 0x6d646890, 0x3606, 0x461a, { 0x86, 0xab, 0x59, 0x8b, 0xb8, 0x4a, 0xce, 0x82 } } }, + /* 006 */ { "W10\000Windows10\000", 25, 6, PWINGUID, { 0x73111121, 0x5638, 0x40f6, { 0xbc, 0x11, 0xf1, 0xd7, 0xb0, 0xd6, 0x43, 0x00, } }, { 0x58e2134f, 0x8e11, 0x4d17, { 0x9c, 0xb2, 0x91, 0x06, 0x9c, 0x15, 0x11, 0x48 } } }, + /* 007 */ { "W10C\000Windows10C\000", 25, 6, PWINGUID, { 0x58e97c99, 0xf377, 0x4ef1, { 0x81, 0xd5, 0x4a, 0xd5, 0x52, 0x2b, 0x5f, 0xd8, } }, { 0xe1c51358, 0xfe3e, 0x4203, { 0xa4, 0xa2, 0x3b, 0x6b, 0x20, 0xc9, 0x73, 0x4e } } }, + /* 008 */ { "2008" "\0" "2008A\000", 5, 4, PWINGUID, { 0xddfa9f7c, 0xf09e, 0x40b9, { 0x8c, 0x1a, 0xbe, 0x87, 0x7a, 0x9a, 0x7f, 0x4b, } }, { 0x33e156e4, 0xb76f, 0x4a52, { 0x9f, 0x91, 0xf6, 0x41, 0xdd, 0x95, 0xac, 0x48 } } }, + /* 009 */ { "2008B\000", 5, 4, PWINGUID, { 0xc1af4d90, 0xd1bc, 0x44ca, { 0x85, 0xd4, 0x00, 0x3b, 0xa3, 0x3d, 0xb3, 0xb9, } }, { 0x8fe53387, 0x3087, 0x4447, { 0x89, 0x85, 0xf7, 0x51, 0x32, 0x21, 0x5a, 0xc9 } } }, + /* 010 */ { "2008C\000", 5, 4, PWINGUID, { 0x68b6e220, 0xcf09, 0x466b, { 0x92, 0xd3, 0x45, 0xcd, 0x96, 0x4b, 0x95, 0x09, } }, { 0x8a21fdf3, 0xcbc5, 0x44eb, { 0x83, 0xf3, 0xfe, 0x28, 0x4e, 0x66, 0x80, 0xa7 } } }, + /* 011 */ { "2008R2" "\0" "2008R2A\000", 5, 4, PWINGUID, { 0xa78b8bd9, 0x8017, 0x4df5, { 0xb8, 0x6a, 0x09, 0xf7, 0x56, 0xaf, 0xfa, 0x7c, } }, { 0x0fc6ccaf, 0xff0e, 0x4fae, { 0x9d, 0x08, 0x43, 0x70, 0x78, 0x5b, 0xf7, 0xed } } }, + /* 012 */ { "2008R2B\000", 5, 4, PWINGUID, { 0x620e2b3d, 0x09e7, 0x42fd, { 0x80, 0x2a, 0x17, 0xa1, 0x36, 0x52, 0xfe, 0x7a, } }, { 0xca87f5b6, 0xcd46, 0x40c0, { 0xb0, 0x6d, 0x8e, 0xcd, 0x57, 0xa4, 0x37, 0x3f } } }, + /* 013 */ { "2008R2C\000", 5, 4, PWINGUID, { 0x7482e61b, 0xc589, 0x4b7f, { 0x8e, 0xcc, 0x46, 0xd4, 0x55, 0xac, 0x3b, 0x87, } }, { 0xb2ca2689, 0xa9a8, 0x42d7, { 0x93, 0x8d, 0xcf, 0x8e, 0x9f, 0x20, 0x19, 0x58 } } }, + /* 014 */ { "2012\000", 5, 5, PWINGUID, { 0xf0f5ec41, 0x0d55, 0x4732, { 0xaf, 0x02, 0x44, 0x0a, 0x44, 0xa3, 0xcf, 0x0f, } }, { 0x8665cb71, 0x468c, 0x4aa3, { 0xa3, 0x37, 0xcb, 0x9b, 0xc9, 0xd5, 0xea, 0xac } } }, + /* 015 */ { "2012R2\000" "12R2\000", 5, 6, PWINGUID, { 0x00091344, 0x1ea4, 0x4f37, { 0xb7, 0x89, 0x01, 0x75, 0x0b, 0xa6, 0x98, 0x8c, } }, { 0x8456EFD3, 0x0C04, 0x4089, { 0x87, 0x40, 0x5b, 0x72, 0x38, 0x53, 0x5a, 0x65 } } }, + /* 016 */ { "Office2010\000O14\000", 5, 4, POFFICE2010GUID, { 0x6f327760, 0x8c5c, 0x417c, { 0x9b, 0x61, 0x83, 0x6a, 0x98, 0x28, 0x7e, 0x0c, } }, { 0xe85af946, 0x2e25, 0x47b7, { 0x83, 0xe1, 0xbe, 0xbc, 0xeb, 0xea, 0xc6, 0x11 } } }, + /* 017 */ { "Office2013\000O15\000", 5, 6, POFFICE2013GUID, { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } }, { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } }, + /* 018 */ { "Office2013V5\000", 5, 5, POFFICE2013GUID, { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } }, { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } }, + /* 019 */ { "Office2016\000" "O16\000", 5, 6, POFFICE2013GUID, { 0xd450596f, 0x894d, 0x49e0, { 0x96, 0x6a, 0xfd, 0x39, 0xed, 0x4c, 0x4c, 0x64, } }, { 0x85b5f61b, 0x320b, 0x4be3, { 0x81, 0x4a, 0xb7, 0x6b, 0x2b, 0xfa, 0xfc, 0x82 } } }, + /* 020 */ { NULL, 0, 0, NULL, { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } }, { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } } } +}; + + +typedef struct +{ + const char* first[16]; + const char* second[16]; + const char* tld[22]; +} DnsNames; + + +// Some names for the DNS name random generator +static DnsNames ClientDnsNames = +{ + { "www", "ftp", "kms", "hack-me", "smtp", "ns1", "mx1", "ns1", "pop3", "imap", "mail", "dns", "headquarter", "we-love", "_vlmcs._tcp", "ceo-laptop" }, + { ".microsoft", ".apple", ".amazon", ".samsung", ".adobe", ".google", ".yahoo", ".facebook", ".ubuntu", ".oracle", ".borland", ".htc", ".acer", ".windows", ".linux", ".sony" }, + { ".com", ".net", ".org", ".cn", ".co.uk", ".de", ".com.tw", ".us", ".fr", ".it", ".me", ".info", ".biz", ".co.jp", ".ua", ".at", ".es", ".pro", ".by", ".ru", ".pl", ".kr" } +}; + + +// This is the one, we are actually using. We use Vista, if user selects nothing +LicensePack ActiveLicensePack; + + +// Request Count Control Variables +static int RequestsToGo = 1; +static BOOL firstRequestSent = FALSE; + + +static void string2UuidOrExit(const char *const restrict input, GUID *const restrict guid) +{ + if (strlen(input) != GUID_STRING_LENGTH || !string2Uuid(input, guid)) + { + errorout("Fatal: Command line contains an invalid GUID.\n"); + exit(!0); + } +} + + +#ifndef NO_HELP + +__noreturn static void clientUsage(const char* const programName) +{ + errorout( + "vlmcs %s \n\n" +# ifndef NO_DNS + "Usage: %s [options] [ [:] | . | - ] [options]\n\n" +# else // DNS + "Usage: %s [options] [[:]] [options]\n\n" +# endif // DNS + + "Options:\n\n" + + " -v Be verbose\n" + " -l \n" + " -4 Force V4 protocol\n" + " -5 Force V5 protocol\n" + " -6 Force V6 protocol\n" +# ifndef USE_MSRPC + " -i Use IP protocol (4 or 6)\n" +# endif // USE_MSRPC + " -e Show some valid examples\n" + " -x Show valid Apps\n" + " -d no DNS names, use Netbios names (no effect if -w is used)\n\n" + + "Advanced options:\n\n" + + " -a Use custom Application GUID\n" + " -s Use custom Activation Configuration GUID\n" + " -k Use custom KMS GUID\n" + " -c Use custom Client GUID. Default: Use random\n" + " -o Use custom Prevoius Client GUID. Default: ZeroGUID\n" + " -w Use custom workstation name. Default: Use random\n" + " -r Fake required clients\n" + " -n Fixed # of requests (Default: Enough to charge)\n" + " -m Pretend to be a virtual machine\n" + " -G Get ePID/HwId data and write to . Can't be used with -l, -4, -5, -6, -a, -s, -k, -r and -n\n" +# ifndef USE_MSRPC + " -T Use a new TCP connection for each request.\n" + " -N <0|1> disable or enable NDR64. Default: 1\n" + " -B <0|1> disable or enable RPC bind time feature negotiation. Default: 1\n" +# endif // USE_MSRPC + " -t Use specfic license status (0 <= T <= 6)\n" + " -g Use a specfic binding expiration time in minutes. Default 43200\n" +# ifndef NO_DNS + " -P Ignore priority and weight in DNS SRV records\n" +# endif // NO_DNS +# ifndef USE_MSRPC + " -p Don't use multiplexed RPC bind\n" +# endif // USE_MSRPC + "\n" + + ":\t\tTCP port name of the KMS to use. Default 1688.\n" + ":\t\thost name of the KMS to use. Default 127.0.0.1\n" +# ifndef NO_DNS + ".:\tfind KMS server in via DNS\n" +# endif // NO_DNS + ":\t\t(Type %s -x to see a list of valid apps)\n\n", + Version, programName, programName + ); + + exit(!0); +} + +__pure static int getLineWidth(void) +{ + #ifdef TERMINAL_FIXED_WIDTH // For Toolchains that to not have winsize + return TERMINAL_FIXED_WIDTH; + #else // Can determine width of terminal + #ifndef _WIN32 + + struct winsize w; + + if(ioctl(STDOUT_FILENO, TIOCGWINSZ, &w)) + { + return 80; // Return this if stdout is not a tty + } + + return w.ws_col; + + #else // _WIN32 + + CONSOLE_SCREEN_BUFFER_INFO csbiInfo; + HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); + + if (!GetConsoleScreenBufferInfo(hStdout, &csbiInfo)) + { + return 80; // Return this if stdout is not a Console + } + + return csbiInfo.srWindow.Right - csbiInfo.srWindow.Left; + + #endif // WIN32 + + #endif // Can determine width of terminal + +} + +__noreturn static void showProducts(PRINTFUNC p) +{ + int cols = getLineWidth(); + int itemsPerLine; + uint8_t i; + + p( + "The following " + #if !defined(NO_EXTENDED_PRODUCT_LIST) && !defined(NO_BASIC_PRODUCT_LIST) + "aliases " + #else + "names " + #endif + "can be used with -l:\n\n" + ); + + const LicensePack* lp; + + itemsPerLine = cols / 20; + if (!itemsPerLine) itemsPerLine = 1; + + for (i = 1, lp = LicensePackList; lp->names; lp++) + { + const char* name; + + for (name = lp->names; *name; name += strlen(name) + 1, i++) + { + p("%-20s", name); + + if (!(i % itemsPerLine)) p("\n"); + } + } + + p("\n\n"); + + #if !defined(NO_EXTENDED_PRODUCT_LIST) && !defined(NO_BASIC_PRODUCT_LIST) + + const KmsIdList* currentProduct; + uint_fast8_t longestString = 0; + uint8_t k, items = getExtendedProductListSize(); + + p("You may also use these product names or numbers:\n\n"); + + for (currentProduct = ExtendedProductList; currentProduct->name; currentProduct++) + { + uint_fast8_t len = strlen(currentProduct->name); + + if (len > longestString) + longestString = len; + } + + itemsPerLine = cols / (longestString + 10); + if (!itemsPerLine) itemsPerLine = 1; + uint8_t lines = items / itemsPerLine; + if (items % itemsPerLine) lines++; + + for (i = 0; i < lines; i++) + { + for (k = 0; k < itemsPerLine; k++) + { + uint8_t j; + uint8_t index = k * lines + i; + + if (index >= items) break; + + p("%3u = %s", index + 1, ExtendedProductList[index].name); + + for (j = 0; j < longestString + 4 - strlen(ExtendedProductList[index].name); j++) + { + p(" "); + } + } + + p("\n"); + } + + p("\n"); + + #endif // !defined(NO_EXTENDED_PRODUCT_LIST) && !defined(NO_BASIC_PRODUCT_LIST) + + exit(0); +} + +__noreturn static void examples(const char* const programName) +{ + printf( + "\nRequest activation for Office2013 using V4 protocol from 192.168.1.5:1688\n" + "\t%s -l O15 -4 192.168.1.5\n" + "\t%s -l O15 -4 192.168.1.5:1688\n\n" + + "Request activation for Windows Server 2012 using V4 protocol from localhost:1688\n" + "\t%s -4 -l Windows -k 8665cb71-468c-4aa3-a337-cb9bc9d5eaac\n" + "\t%s -4 -l 2012\n" + "\t%s -4 -l 2012 [::1]:1688\n" + "\t%s -4 -l 12 127.0.0.2:1688\n\n" + + "Send 100,000 requests to localhost:1688\n" + "\t%s -n 100000 -l Office2010\n\n" + + "Request Activation for Windows 8 from 10.0.0.1:4711 and pretend to be Steve Ballmer\n" + "\t%s -l Windows8 -w steveb1.redmond.microsoft.com 10.0.0.1:4711\n\n", + programName, programName, programName, programName, programName, programName, programName, programName + ); + + exit(0); +} + + +#else // NO_HELP + + +__noreturn static void clientUsage(const char* const programName) +{ + errorout("Incorrect parameter specified.\n"); + exit(!0); +} + + +#endif // NO_HELP + + +static BOOL findLicensePackByName(const char* const name, LicensePack* const lp) +{ + // Try to find a package in the short list first + + LicensePack *licensePack; + for (licensePack = (LicensePack*)&LicensePackList; licensePack->names; licensePack ++) + { + const char *currentName; + for (currentName = licensePack->names; *currentName; currentName += strlen(currentName) + 1) + { + if (!strcasecmp(name, currentName)) + { + *lp = *licensePack; + return TRUE; + } + } + } + + #if defined(NO_BASIC_PRODUCT_LIST) || defined(NO_EXTENDED_PRODUCT_LIST) + + return FALSE; + + #else // Both Lists are available + + // search extended product list + + uint8_t items = getExtendedProductListSize(); + unsigned int index; + + if (stringToInt(name, 1, items, &index)) + { + index--; + } + else + { + for (index = 0; index < items; index++) + { + if (!strcasecmp(ExtendedProductList[index].name, name)) break; + } + + if (index >= items) return FALSE; + } + + lp->AppID = &AppList[ExtendedProductList[index].AppIndex].guid; + lp->KMSID = ProductList[ExtendedProductList[index].KmsIndex].guid; + lp->ActID = ExtendedProductList[index].guid; + lp->N_Policy = ProductList[ExtendedProductList[index].KmsIndex].KMS_PARAM_REQUIREDCOUNT; + lp->kmsVersionMajor = ProductList[ExtendedProductList[index].KmsIndex].KMS_PARAM_MAJOR; + + return TRUE; + + #endif // Both Lists are available +} + +static const char* const client_optstring = "+N:B:i:l:a:s:k:c:w:r:n:t:g:G:o:pPTv456mexd"; + + +//First pass. We handle only "-l". Since -a -k -s -4 -5 and -6 are exceptions to -l, we process -l first +static void parseCommandLinePass1(const int argc, CARGV argv) +{ + int o; + optReset(); + + for (opterr = 0; ( o = getopt(argc, (char* const*)argv, client_optstring) ) > 0; ) switch (o) + { + case 'l': // Set "License Pack" and protocol version (e.g. Windows8, Office2013v5, ...) + + if (!findLicensePackByName(optarg, &ActiveLicensePack)) + { + errorout("Invalid client application. \"%s\" is not valid for -l.\n\n", optarg); + #ifndef NO_HELP + showProducts(&errorout); + #endif // !NO_HELP + } + + break; + + default: + break; + } +} + + +// Second Pass. Handle all options except "-l" +static void parseCommandLinePass2(const char *const programName, const int argc, CARGV argv) +{ + int o; + optReset(); + + for (opterr = 0; ( o = getopt(argc, (char* const*)argv, client_optstring) ) > 0; ) switch (o) + { + #ifndef NO_HELP + + case 'e': // Show examples + + examples(programName); + break; + + case 'x': // Show Apps + + showProducts(&printf); + break; + + #endif // NO_HELP + +# ifndef NO_DNS + + case 'P': + + NoSrvRecordPriority = TRUE; + break; + +# endif // NO_DNS + + case 'G': + + incompatibleOptions |= VLMCS_OPTION_GRAB_INI; + fn_ini_client = optarg; + break; + +# ifndef USE_MSRPC + + case 'N': + if (!getArgumentBool(&UseRpcNDR64, optarg)) clientUsage(programName); + break; + + case 'B': + if (!getArgumentBool(&UseRpcBTFN, optarg)) clientUsage(programName); + break; + + case 'i': + + switch(getOptionArgumentInt(o, 4, 6)) + { + case 4: + AddressFamily = AF_INET; + break; + case 6: + AddressFamily = AF_INET6; + break; + default: + errorout("IPv5 does not exist.\n"); + exit(!0); + break; + } + + break; + + case 'p': // Multiplexed RPC + + UseMultiplexedRpc = FALSE; + break; + +# endif // USE_MSRPC + + case 'n': // Fixed number of Requests (regardless, whether they are required) + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + FixedRequests = getOptionArgumentInt(o, 1, INT_MAX); + break; + + case 'r': // Fake minimum required client count + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + ActiveLicensePack.N_Policy = getOptionArgumentInt(o, 1, INT_MAX); + break; + + case 'c': // use a specific client GUID + + // If using a constant Client ID, send only one request unless /N= explicitly specified + if (!FixedRequests) FixedRequests = 1; + + CMID = optarg; + break; + + case 'o': // use a specific previous client GUID + + CMID_prev = optarg; + break; + + case 'a': // Set specific App Id + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + ActiveLicensePack.AppID = (GUID*)vlmcsd_malloc(sizeof(GUID)); + + string2UuidOrExit(optarg, (GUID*)ActiveLicensePack.AppID); + break; + + case 'g': // Set custom "grace" time in minutes (default 30 days) + + BindingExpiration = getOptionArgumentInt(o, 0, INT_MAX); + break; + + case 's': // Set specfic SKU ID + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + string2UuidOrExit(optarg, &ActiveLicensePack.ActID); + break; + + case 'k': // Set specific KMS ID + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + string2UuidOrExit(optarg, &ActiveLicensePack.KMSID); + break; + + case '4': // Force V4 protocol + case '5': // Force V5 protocol + case '6': // Force V5 protocol + + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + ActiveLicensePack.kmsVersionMajor = o - 0x30; + break; + + case 'd': // Don't use DNS names + + dnsnames = FALSE; + break; + + case 'v': // Be verbose + + verbose = TRUE; + break; + + case 'm': // Pretend to be a virtual machine + + VMInfo = TRUE; + break; + + case 'w': // WorkstationName (max. 63 chars) + + WorkstationName = optarg; + + if (strlen(WorkstationName) > 63) + { + errorout("\007WARNING! Truncating Workstation name to 63 characters (%s).\n", WorkstationName); + } + + break; + + case 't': + + LicenseStatus = getOptionArgumentInt(o, 0, 6) & 0xff; + break; + +# ifndef USE_MSRPC + + case 'T': + + ReconnectForEachRequest = TRUE; + break; + +# endif // USE_MSRPC + + case 'l': + incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; + break; + + default: + clientUsage(programName); + } + if ((incompatibleOptions & (VLMCS_OPTION_NO_GRAB_INI | VLMCS_OPTION_GRAB_INI)) == (VLMCS_OPTION_NO_GRAB_INI | VLMCS_OPTION_GRAB_INI)) + clientUsage(programName); +} + + +/* + * Compares 2 GUIDs where one is host-endian and the other is little-endian (network byte order) + */ +int_fast8_t IsEqualGuidLEHE(const GUID* const guid1, const GUID* const guid2) +{ + GUID tempGuid; + LEGUID(&tempGuid, guid2); + return IsEqualGUID(guid1, &tempGuid); +} + + +#ifndef USE_MSRPC +static void checkRpcLevel(const REQUEST* request, RESPONSE* response) +{ + if (!RpcFlags.HasNDR32) + errorout("\nWARNING: Server's RPC protocol does not support NDR32.\n"); + + if (UseRpcBTFN && UseRpcNDR64 && RpcFlags.HasNDR64 && !RpcFlags.HasBTFN) + errorout("\nWARNING: Server's RPC protocol has NDR64 but no BTFN.\n"); + + if (!IsEqualGuidLEHE(&request->KMSID, &ProductList[15].guid) && UseRpcBTFN && !RpcFlags.HasBTFN) + errorout("\nWARNING: A server with pre-Vista RPC activated a product other than Office 2010.\n"); +} +#endif // USE_MSRPC + + +static void displayResponse(const RESPONSE_RESULT result, const REQUEST* request, RESPONSE* response, BYTE *hwid) +{ + fflush(stdout); + + if (!result.RpcOK) errorout("\n\007ERROR: Non-Zero RPC result code.\n"); + if (!result.DecryptSuccess) errorout("\n\007ERROR: Decryption of V5/V6 response failed.\n"); + if (!result.IVsOK) errorout("\n\007ERROR: AES CBC initialization vectors (IVs) of request and response do not match.\n"); + if (!result.PidLengthOK) errorout("\n\007ERROR: The length of the PID is not valid.\n"); + if (!result.HashOK) errorout("\n\007ERROR: Computed hash does not match hash in response.\n"); + if (!result.ClientMachineIDOK) errorout("\n\007ERROR: Client machine GUIDs of request and response do not match.\n"); + if (!result.TimeStampOK) errorout("\n\007ERROR: Time stamps of request and response do not match.\n"); + if (!result.VersionOK) errorout("\n\007ERROR: Protocol versions of request and response do not match.\n"); + if (!result.HmacSha256OK) errorout("\n\007ERROR: Keyed-Hash Message Authentication Code (HMAC) is incorrect.\n"); + if (!result.IVnotSuspicious) errorout("\nWARNING: Response uses an IV following KMSv5 rules in KMSv6 protocol.\n"); + + if (result.effectiveResponseSize != result.correctResponseSize) + { + errorout("\n\007WARNING: Size of RPC payload (KMS Message) should be %u but is %u.", result.correctResponseSize, result.effectiveResponseSize); + } + +# ifndef USE_MSRPC + checkRpcLevel(request, response); +# endif // USE_MSRPC + + if (!result.DecryptSuccess) return; // Makes no sense to display anything + + char ePID[3 * PID_BUFFER_SIZE]; + if (!ucs2_to_utf8(response->KmsPID, ePID, PID_BUFFER_SIZE, 3 * PID_BUFFER_SIZE)) + { + memset(ePID + 3 * PID_BUFFER_SIZE - 3, 0, 3); + } + + // Read KMSPID from Response + if (!verbose) + { + printf(" -> %s", ePID); + + if (LE16(response->MajorVer) > 5) + { +# ifndef _WIN32 + printf(" (%016llX)", (unsigned long long)BE64(*(uint64_t*)hwid)); +# else // _WIN32 + printf(" (%016I64X)", (unsigned long long)BE64(*(uint64_t*)hwid)); +# endif // _WIN32 + } + + printf("\n"); + } + else + { + printf( + "\n\nResponse from KMS server\n========================\n\n" + "Size of KMS Response : %u (0x%x)\n", result.effectiveResponseSize, result.effectiveResponseSize + ); + + logResponseVerbose(ePID, hwid, response, &printf); + printf("\n"); + } +} + + +static void connectRpc(RpcCtx *s) +{ +# ifdef NO_DNS + + *s = connectToAddress(RemoteAddr, AddressFamily, FALSE); + if (*s == INVALID_RPCCTX) + { + errorout("Fatal: Could not connect to %s\n", RemoteAddr); + exit(!0); + } + + if (verbose) + printf("\nPerforming RPC bind ...\n"); + + if (rpcBindClient(*s, verbose)) + { + errorout("Fatal: Could not bind RPC\n"); + exit(!0); + } + + if (verbose) printf("... successful\n"); + +# else // DNS + + static kms_server_dns_ptr* serverlist = NULL; + static int numServers = 0; + //static int_fast8_t ServerListAlreadyPrinted = FALSE; + int i; + + if (!strcmp(RemoteAddr, "-") || *RemoteAddr == '.') // Get KMS server via DNS SRV record + { + if (!serverlist) + numServers = getKmsServerList(&serverlist, RemoteAddr); + + if (numServers < 1) + { + errorout("Fatal: No KMS servers found\n"); + exit(!0); + } + + if (!NoSrvRecordPriority) sortSrvRecords(serverlist, numServers); + + if (verbose /*&& !ServerListAlreadyPrinted*/) + { + for (i = 0; i < numServers; i++) + { + printf( + "Found %-40s (priority: %hu, weight: %hu, randomized weight: %i)\n", + serverlist[i]->serverName, + serverlist[i]->priority, serverlist[i]->weight, + NoSrvRecordPriority ? 0 : serverlist[i]->random_weight + ); + } + + printf("\n"); + //ServerListAlreadyPrinted = TRUE; + } + } + else // Just use the server supplied on the command line + { + if (!serverlist) + { + serverlist = (kms_server_dns_ptr*)vlmcsd_malloc(sizeof(kms_server_dns_ptr)); + *serverlist = (kms_server_dns_ptr)vlmcsd_malloc(sizeof(kms_server_dns_t)); + + numServers = 1; + strncpy((*serverlist)->serverName, RemoteAddr, sizeof((*serverlist)->serverName)); + } + } + + for (i = 0; i < numServers; i++) + { + *s = connectToAddress(serverlist[i]->serverName, AddressFamily, (*RemoteAddr == '.' || *RemoteAddr == '-')); + + if (*s == INVALID_RPCCTX) continue; + + if (verbose) + printf("\nPerforming RPC bind ...\n"); + + if (rpcBindClient(*s, verbose)) + { + errorout("Warning: Could not bind RPC\n"); + continue; + } + + if (verbose) printf("... successful\n"); + + return; + } + + errorout("Fatal: Could not connect to any KMS server\n"); + exit(!0); + +# endif // DNS +} + + +static int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQUEST *baseRequest, RESPONSE_RESULT *result, BYTE *const hwid) +{ + size_t requestSize, responseSize; + BYTE *request, *response; + int status; + + result->mask = 0; + + if (LE16(baseRequest->MajorVer) == 4) + request = CreateRequestV4(&requestSize, baseRequest); + else + request = CreateRequestV6(&requestSize, baseRequest); + + if (!(status = rpcSendRequest(sock, request, requestSize, &response, &responseSize))) + { + if (LE16(((RESPONSE*)(response))->MajorVer) == 4) + { + RESPONSE_V4 response_v4; + *result = DecryptResponseV4(&response_v4, responseSize, response, request); + memcpy(baseResponse, &response_v4.ResponseBase, sizeof(RESPONSE)); + } + else + { + RESPONSE_V6 response_v6; + *result = DecryptResponseV6(&response_v6, responseSize, response, request, hwid); + memcpy(baseResponse, &response_v6.ResponseBase, sizeof(RESPONSE)); + } + + result->RpcOK = TRUE; + } + + if (response) free(response); + free(request); + return status; +} + + +static int sendRequest(RpcCtx *const s, REQUEST *const request, RESPONSE *const response, hwid_t hwid, RESPONSE_RESULT *const result) +{ + CreateRequestBase(request); + + if (*s == INVALID_RPCCTX ) + connectRpc(s); + else + { + // Check for lame KMS emulators that close the socket after each request + int_fast8_t disconnected = isDisconnected(*s); + + if (disconnected) + errorout("\nWarning: Server closed RPC connection (probably non-multitasked KMS emulator)\n"); + + if (ReconnectForEachRequest || disconnected) + { + closeRpc(*s); + connectRpc(s); + } + } + + printf("Sending activation request (KMS V%u) ", ActiveLicensePack.kmsVersionMajor); + fflush(stdout); + + return SendActivationRequest(*s, response, request, result, hwid); +} + + +static void displayRequestError(RpcCtx *const s, const int status, const int currentRequest, const int totalRequests) +{ + errorout("\nError 0x%08X while sending request %u of %u\n", status, currentRequest, RequestsToGo + totalRequests); + + switch(status) + { + case 0xC004F042: // not licensed + errorout("The server refused to activate the requested product\n"); + break; + + case 0x8007000D: // e.g. v6 protocol on a v5 server + errorout("The server didn't understand the request\n"); + break; + + case 1: + errorout("An RPC protocol error has occured\n"); + closeRpc(*s); + connectRpc(s); + break; + + default: + break; + } +} + + +static void newIniBackupFile(const char* const restrict fname) +{ + FILE *restrict f = fopen(fname, "wb"); + + if (!f) + { + errorout("Fatal: Cannot create %s: %s\n", fname, strerror(errno)); + exit(!0); + } + + if (fclose(f)) + { + errorout("Fatal: Cannot write to %s: %s\n", fname, strerror(errno)); + unlink(fname); + exit(!0); + } +} + + +static void updateIniFile(iniFileEpidLines* const restrict lines) +{ + int_fast8_t lineWritten[_countof(*lines)]; + struct stat statbuf; + uint_fast8_t i; + int_fast8_t iniFileExistedBefore = TRUE; + unsigned int lineNumber; + + memset(lineWritten, FALSE, sizeof(lineWritten)); + + char* restrict fn_bak = (char*)vlmcsd_malloc(strlen(fn_ini_client) + 2); + + strcpy(fn_bak, fn_ini_client); + strcat(fn_bak, "~"); + + if (stat(fn_ini_client, &statbuf)) + { + if (errno != ENOENT) + { + errorout("Fatal: %s: %s\n", fn_ini_client, strerror(errno)); + exit(!0); + } + else + { + iniFileExistedBefore = FALSE; + newIniBackupFile(fn_bak); + } + } + else + { + unlink(fn_bak); // Required for Windows. Most Unix systems don't need it. + if (rename(fn_ini_client, fn_bak)) + { + errorout("Fatal: Cannot create %s: %s\n", fn_bak, strerror(errno)); + exit(!0); + } + } + + printf("\n%s file %s\n", iniFileExistedBefore ? "Updating" : "Creating", fn_ini_client); + + FILE *restrict in, *restrict out; + + in = fopen(fn_bak, "rb"); + + if (!in) + { + errorout("Fatal: Cannot open %s: %s\n", fn_bak, strerror(errno)); + exit(!0); + } + + out = fopen(fn_ini_client, "wb"); + + if (!out) + { + errorout("Fatal: Cannot create %s: %s\n", fn_ini_client, strerror(errno)); + exit(!0); + } + + char sourceLine[256]; + + for (lineNumber = 1; fgets(sourceLine, sizeof(sourceLine), in); lineNumber++) + { + for (i = 0; i < _countof(*lines); i++) + { + if (*(*lines)[i] && !strncasecmp(sourceLine, (*lines)[i], GUID_STRING_LENGTH)) + { + if (lineWritten[i]) break; + + fprintf(out, "%s", (*lines)[i]); + printf("line %2i: %s", lineNumber, (*lines)[i]); + lineWritten[i] = TRUE; + break; + } + } + + if (i >= _countof(*lines)) + { + fprintf(out, "%s", sourceLine); + } + } + + if (ferror(in)) + { + errorout("Fatal: Cannot read from %s: %s\n", fn_bak, strerror(errno)); + exit(!0); + } + + fclose(in); + + for (i = 0; i < _countof(*lines); i++) + { + if (!lineWritten[i] && *(*lines)[i]) + { + fprintf(out, "%s", (*lines)[i]); + printf("line %2i: %s", lineNumber + i, (*lines)[i]); + } + } + + if (fclose(out)) + { + errorout("Fatal: Cannot write to %s: %s\n", fn_ini_client, strerror(errno)); + exit(!0); + } + + if (!iniFileExistedBefore) unlink(fn_bak); + + free(fn_bak); +} + +static void grabServerData() +{ + RpcCtx s = INVALID_RPCCTX; + WORD MajorVer = 6; + iniFileEpidLines lines; + int_fast8_t Licenses[_countof(lines)] = { 0, 15, 14 }; + uint_fast8_t i; + RESPONSE response; + RESPONSE_RESULT result; + REQUEST request; + hwid_t hwid; + int status; + size_t len; + + for (i = 0; i < _countof(lines); i++) *lines[i] = 0; + + for (i = 0; i < _countof(Licenses) && MajorVer > 3; i++) + { + ActiveLicensePack = LicensePackList[Licenses[i]]; + ActiveLicensePack.kmsVersionMajor = MajorVer; + status = sendRequest(&s, &request, &response, hwid, &result); + printf("%-11s", ActiveLicensePack.names); + + if (status) + { + displayRequestError(&s, status, i + 7 - MajorVer, 9 - MajorVer); + + if (status == 1) break; + + if ((status & 0xF0000000) == 0x80000000) + { + MajorVer--; + i--; + } + + continue; + } + + printf("%i of %i", (int)(i + 7 - MajorVer), (int)(9 - MajorVer)); + displayResponse(result, &request, &response, hwid); + + char guidBuffer[GUID_STRING_LENGTH + 1]; + char ePID[3 * PID_BUFFER_SIZE]; + + uuid2StringLE(&request.AppID, guidBuffer); + + if (!ucs2_to_utf8(response.KmsPID, ePID, PID_BUFFER_SIZE, 3 * PID_BUFFER_SIZE)) + { + memset(ePID + 3 * PID_BUFFER_SIZE - 3, 0, 3); + } + + snprintf(lines[i], sizeof(lines[0]), "%s = %s", guidBuffer, ePID); + + if (response.MajorVer > 5) + { + len = strlen(lines[i]); + snprintf (lines[i] + len, sizeof(lines[0]) - len, "/ %02X %02X %02X %02X %02X %02X %02X %02X", hwid[0], hwid[1], hwid[2], hwid[3], hwid[4], hwid[5], hwid[6], hwid[7]); + } + + len = strlen(lines[i]); + snprintf(lines[i] + len, sizeof(lines[0]) - len, "\n"); + + } + + if (strcmp(fn_ini_client, "-")) + { + updateIniFile(&lines); + } + else + { + printf("\n"); + for (i = 0; i < _countof(lines); i++) printf("%s", lines[i]); + } +} + + +int client_main(const int argc, CARGV argv) +{ + #if defined(_WIN32) && !defined(USE_MSRPC) + + // Windows Sockets must be initialized + + WSADATA wsadata; + int error; + + if ((error = WSAStartup(0x0202, &wsadata))) + { + printerrorf("Fatal: Could not initialize Windows sockets (Error: %d).\n", error); + return error; + } + + #endif // _WIN32 + + #ifdef _NTSERVICE + + // We are not a service + IsNTService = FALSE; + + // Set console output page to UTF-8 + // SetConsoleOutputCP(65001); + + #endif // _NTSERVICE + + randomNumberInit(); + ActiveLicensePack = *LicensePackList; //first license is Windows Vista + + parseCommandLinePass1(argc, argv); + + int_fast8_t useDefaultHost = FALSE; + + if (optind < argc) + RemoteAddr = argv[optind]; + else + useDefaultHost = TRUE; + + int hostportarg = optind; + + if (optind < argc - 1) + { + parseCommandLinePass1(argc - hostportarg, argv + hostportarg); + + if (optind < argc - hostportarg) + clientUsage(argv[0]); + } + + parseCommandLinePass2(argv[0], argc, argv); + + if (optind < argc - 1) + parseCommandLinePass2(argv[0], argc - hostportarg, argv + hostportarg); + + if (useDefaultHost) + RemoteAddr = AddressFamily == AF_INET6 ? "::1" : "127.0.0.1"; + + if (fn_ini_client != NULL) + grabServerData(); + else + { + int requests; + RpcCtx s = INVALID_RPCCTX; + + for (requests = 0, RequestsToGo = ActiveLicensePack.N_Policy - 1; RequestsToGo; requests++) + { + RESPONSE response; + REQUEST request; + RESPONSE_RESULT result; + hwid_t hwid; + + int status = sendRequest(&s, &request, &response, hwid, &result); + + if (FixedRequests) RequestsToGo = FixedRequests - requests - 1; + + if (status) + { + displayRequestError(&s, status, requests + 1, RequestsToGo + requests + 1); + if (!FixedRequests) RequestsToGo = 0; + } + else + { + if (!FixedRequests) + { + if (firstRequestSent && ActiveLicensePack.N_Policy - (int)response.Count >= RequestsToGo) + { + errorout("\nThe KMS server does not increment it's active clients. Aborting...\n"); + RequestsToGo = 0; + } + else + { + RequestsToGo = ActiveLicensePack.N_Policy - response.Count; + if (RequestsToGo < 0) RequestsToGo = 0; + } + } + + fflush(stderr); + printf("%i of %i ", requests + 1, RequestsToGo + requests + 1); + displayResponse(result, &request, &response, hwid); + firstRequestSent = TRUE; + } + } + } + + return 0; +} + + +// Create Base KMS Client Request +static void CreateRequestBase(REQUEST *Request) +{ + + Request->MinorVer = LE16((WORD)kmsVersionMinor); + Request->MajorVer = LE16((WORD)ActiveLicensePack.kmsVersionMajor); + Request->VMInfo = LE32(VMInfo); + Request->LicenseStatus = LE32(LicenseStatus); + Request->BindingExpiration = LE32(BindingExpiration); + LEGUID(&Request->AppID, ActiveLicensePack.AppID); + LEGUID(&Request->ActID, &ActiveLicensePack.ActID); + LEGUID(&Request->KMSID, &ActiveLicensePack.KMSID); + + getUnixTimeAsFileTime(&Request->ClientTime); + Request->N_Policy = LE32(ActiveLicensePack.N_Policy); + + { + GUID tempGUID; + + if (CMID) + { + string2UuidOrExit(CMID, &tempGUID); + LEGUID(&Request->CMID, &tempGUID); + } + else + { + get16RandomBytes(&Request->CMID); + + // Set reserved UUID bits + Request->CMID.Data4[0] &= 0x3F; + Request->CMID.Data4[0] |= 0x80; + + // Set UUID type 4 (random UUID) + Request->CMID.Data3 &= LE16(0xfff); + Request->CMID.Data3 |= LE16(0x4000); + } + + if (CMID_prev) + { + string2UuidOrExit(CMID_prev, &tempGUID); + LEGUID(&Request->CMID_prev, &tempGUID); + } + else + { + memset(&Request->CMID_prev, 0, sizeof(Request->CMID_prev)); + } + } + + static const char alphanum[] = "0123456789" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" /*"abcdefghijklmnopqrstuvwxyz" */; + + if (WorkstationName) + { + utf8_to_ucs2(Request->WorkstationName, WorkstationName, WORKSTATION_NAME_BUFFER, WORKSTATION_NAME_BUFFER * 3); + } + else if (dnsnames) + { + int len, len2; + unsigned int index = rand() % _countof(ClientDnsNames.first); + len = utf8_to_ucs2(Request->WorkstationName, ClientDnsNames.first[index], WORKSTATION_NAME_BUFFER, WORKSTATION_NAME_BUFFER * 3); + + index = rand() % _countof(ClientDnsNames.second); + len2 = utf8_to_ucs2(Request->WorkstationName + len, ClientDnsNames.second[index], WORKSTATION_NAME_BUFFER, WORKSTATION_NAME_BUFFER * 3); + + index = rand() % _countof(ClientDnsNames.tld); + utf8_to_ucs2(Request->WorkstationName + len + len2, ClientDnsNames.tld[index], WORKSTATION_NAME_BUFFER, WORKSTATION_NAME_BUFFER * 3); + } + else + { + unsigned int size = (rand() % 14) + 1; + const unsigned char *dummy; + unsigned int i; + + for (i = 0; i < size; i++) + { + Request->WorkstationName[i] = utf8_to_ucs2_char((unsigned char*)alphanum + (rand() % (sizeof(alphanum) - 1)), &dummy); + } + + Request->WorkstationName[size] = 0; + } + + //Show Details + if (verbose) + { + printf("\nRequest Parameters\n==================\n\n"); + logRequestVerbose(Request, &printf); + printf("\n"); + } +} + + +/* Multi-Call Binary for vlmcs and vlmcsd */ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#if MULTI_CALL_BINARY < 1 +#error "Please define MULTI_CALL_BINARY=1 when compiling this file." +#endif + +#include +#include + +#include "vlmcs.h" +#include "vlmcsd.h" +#include "types.h" +#include "shared_globals.h" +#include "output.h" + +#if (defined(_WIN32) || defined(__CYGWIN__)) +#define compare strcasecmp // Best for case-preserving (but otherwise case-insensitive) filesystems +#else // native Unix +#define compare strcmp // for case-sensitive filesystems +#endif // native Unix + +int main(int argc, CARGV argv) +{ + multi_argv = argv; + multi_argc = argc; + + if (!compare(basename((char*)*argv), "vlmcsd")) + return server_main(argc, argv); + + if (!compare(basename((char*)*argv), "vlmcs")) + return client_main(argc, argv); + + #ifdef _WIN32 + if (!compare(basename((char*)*argv), "vlmcsd.exe")) + return server_main(argc, argv); + + if (!compare(basename((char*)*argv), "vlmcs.exe")) + return client_main(argc, argv); + #endif // _WIN32 + + if (argc > 1) + { + if (!strcmp((char*)argv[1],"vlmcsd")) + return server_main(argc - 1, argv + 1); + + if (!strcmp((char*)argv[1],"vlmcs")) + return client_main(argc - 1, argv + 1); + } + + errorout( + "vlmcsdmulti %s\n\n" + "Usage:\n" + "\t%s vlmcsd []\n" + "\t%s vlmcs []\n\n", + Version, *argv, *argv + ); + + return !0; +} +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "crypto.h" +#include "endian.h" +#include + +const BYTE AesKeyV4[] = { + 0x05, 0x3D, 0x83, 0x07, 0xF9, 0xE5, 0xF0, 0x88, 0xEB, 0x5E, 0xA6, 0x68, 0x6C, 0xF0, 0x37, 0xC7, 0xE4, 0xEF, 0xD2, 0xD6}; + +const BYTE AesKeyV5[] = { + 0xCD, 0x7E, 0x79, 0x6F, 0x2A, 0xB2, 0x5D, 0xCB, 0x55, 0xFF, 0xC8, 0xEF, 0x83, 0x64, 0xC4, 0x70 }; + +const BYTE AesKeyV6[] = { + 0xA9, 0x4A, 0x41, 0x95, 0xE2, 0x01, 0x43, 0x2D, 0x9B, 0xCB, 0x46, 0x04, 0x05, 0xD8, 0x4A, 0x21 }; + +static const BYTE SBox[] = { + 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, + 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, + 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 0xB7, 0xFD, 0x93, 0x26, + 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, + 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, + 0xEB, 0x27, 0xB2, 0x75, 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, + 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, 0x53, 0xD1, 0x00, 0xED, + 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, + 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, + 0x50, 0x3C, 0x9F, 0xA8, 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, + 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 0xCD, 0x0C, 0x13, 0xEC, + 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, + 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, + 0xDE, 0x5E, 0x0B, 0xDB, 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, + 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, 0xE7, 0xC8, 0x37, 0x6D, + 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, + 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, + 0x4B, 0xBD, 0x8B, 0x8A, 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, + 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, 0xE1, 0xF8, 0x98, 0x11, + 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, + 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, + 0xB0, 0x54, 0xBB, 0x16 +}; + + +void XorBlock(const BYTE *const in, const BYTE *out) // Ensure that this is always 32 bit aligned +{ + /*UAA64( out, 0 ) ^= UAA64( in, 0 ); + UAA64( out, 1 ) ^= UAA64( in, 1 );*/ + + uint_fast8_t i; + + for (i = 0; i < AES_BLOCK_WORDS; i++) + { + ((DWORD*)out)[i] ^= ((DWORD*)in)[i]; + } +} + +#define AddRoundKey(d, rk) XorBlock((const BYTE *)rk, (const BYTE *)d) + +#define Mul2(word) (((word & 0x7f7f7f7f) << 1) ^ (((word & 0x80808080) >> 7) * 0x1b)) +#define Mul3(word) (Mul2(word) ^ word) +#define Mul4(word) (Mul2(Mul2(word))) +#define Mul8(word) (Mul2(Mul2(Mul2(word)))) +#define Mul9(word) (Mul8(word) ^ word) +#define MulB(word) (Mul8(word) ^ Mul3(word)) +#define MulD(word) (Mul8(word) ^ Mul4(word) ^ word) +#define MulE(word) (Mul8(word) ^ Mul4(word) ^ Mul2(word)) + +//32 bit Galois Multiplication (generates bigger code than Macros) +/*static DWORD Mul(DWORD x, DWORD y) +{ + DWORD result = x, yTemp = y, log2; + + if (!y) return 0; + + for (log2 = 0; yTemp >>= 1; log2++ ) + { + result = Mul2(result); + } + + return result ^ Mul(x, y - (1 << log2)); +}*/ + + +void MixColumnsR(BYTE *restrict state) +{ + uint_fast8_t i = 0; + for (; i < AES_BLOCK_WORDS; i++) + { + #if defined(_CRYPTO_OPENSSL) && defined(_OPENSSL_SOFTWARE) && defined(_USE_AES_FROM_OPENSSL) //Always byte swap regardless of endianess + DWORD word = BS32(((DWORD *) state)[i]); + ((DWORD *) state)[i] = BS32(MulE(word) ^ ROR32(MulB(word), 8) ^ ROR32(MulD(word), 16) ^ ROR32(Mul9(word), 24)); + #else + DWORD word = LE32(((DWORD *) state)[i]); + ((DWORD *) state)[i] = LE32(MulE(word) ^ ROR32(MulB(word), 8) ^ ROR32(MulD(word), 16) ^ ROR32(Mul9(word), 24)); + #endif + } +} + + +static DWORD SubDword(DWORD v) +{ + BYTE *b = (BYTE *)&v; + uint_fast8_t i = 0; + + for (; i < sizeof(DWORD); i++) b[i] = SBox[b[i]]; + + return v; +} + + +void AesInitKey(AesCtx *Ctx, const BYTE *Key, int_fast8_t IsV6, int RijndaelKeyBytes) +{ + int RijndaelKeyDwords = RijndaelKeyBytes / sizeof(DWORD); + Ctx->rounds = (uint_fast8_t)(RijndaelKeyDwords + 6); + + static const DWORD RCon[] = { + 0x00000000, 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, + 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000 }; + + uint_fast8_t i; + DWORD temp; + + memcpy(Ctx->Key, Key, RijndaelKeyBytes); + + for ( i = RijndaelKeyDwords; i < ( Ctx->rounds + 1 ) << 2; i++ ) + { + temp = Ctx->Key[ i - 1 ]; + + if ( ( i % RijndaelKeyDwords ) == 0 ) + temp = BE32( SubDword( ROR32( BE32(temp), 24) ) ^ RCon[ i / RijndaelKeyDwords ] ); + + Ctx->Key[ i ] = Ctx->Key[ i - RijndaelKeyDwords ] ^ temp; + } + + if ( IsV6 ) + { + BYTE *_p = (BYTE *)Ctx->Key; + + _p[ 4 * 16 ] ^= 0x73; + _p[ 6 * 16 ] ^= 0x09; + _p[ 8 * 16 ] ^= 0xE4; + } +} + + +#if !defined(_CRYPTO_OPENSSL) || !defined(_USE_AES_FROM_OPENSSL) || defined(_OPENSSL_SOFTWARE) +static void SubBytes(BYTE *block) +{ + uint_fast8_t i; + + for (i = 0; i < AES_BLOCK_BYTES; i++) + block[i] = SBox[ block[i] ]; +} + + +static void ShiftRows(BYTE *state) +{ + BYTE bIn[AES_BLOCK_BYTES]; + uint_fast8_t i; + + memcpy(bIn, state, AES_BLOCK_BYTES); + for (i = 0; i < AES_BLOCK_BYTES; i++) + { + state[i] = bIn[(i + ((i & 3) << 2)) & 0xf]; + } +}; + + +static void MixColumns(BYTE *state) +{ + uint_fast8_t i = 0; + for (; i < AES_BLOCK_WORDS; i++) + { + DWORD word = LE32(((DWORD *) state)[i]); + ((DWORD *) state)[i] = LE32(Mul2(word) ^ ROR32(Mul3(word), 8) ^ ROR32(word, 16) ^ ROR32(word, 24)); + } +} + + +void AesEncryptBlock(const AesCtx *const Ctx, BYTE *block) +{ + uint_fast8_t i; + + for ( i = 0 ;; i += 4 ) + { + AddRoundKey(block, &Ctx->Key[ i ]); + SubBytes(block); + ShiftRows(block); + + if ( i >= ( Ctx->rounds - 1 ) << 2 ) break; + + MixColumns(block); + } + + AddRoundKey(block, &Ctx->Key[ Ctx->rounds << 2 ]); +} + + +void AesCmacV4(BYTE *Message, size_t MessageSize, BYTE *MacOut) +{ + size_t i; + BYTE mac[AES_BLOCK_BYTES]; + AesCtx Ctx; + + AesInitKey(&Ctx, AesKeyV4, FALSE, V4_KEY_BYTES); + + memset(mac, 0, sizeof(mac)); + memset(Message + MessageSize, 0, AES_BLOCK_BYTES); + Message[MessageSize] = 0x80; + + for (i = 0; i <= MessageSize; i += AES_BLOCK_BYTES) + { + XorBlock(Message + i, mac); + AesEncryptBlock(&Ctx, mac); + } + + memcpy(MacOut, mac, AES_BLOCK_BYTES); +} +#endif + +#if !defined(_CRYPTO_OPENSSL) || !defined(_USE_AES_FROM_OPENSSL) + +static const BYTE SBoxR[] = { + 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, + 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, + 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, 0x54, 0x7B, 0x94, 0x32, + 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, + 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, + 0x6D, 0x8B, 0xD1, 0x25, 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, + 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, 0x6C, 0x70, 0x48, 0x50, + 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, + 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, + 0xB8, 0xB3, 0x45, 0x06, 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, + 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, 0x3A, 0x91, 0x11, 0x41, + 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, + 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, + 0x1C, 0x75, 0xDF, 0x6E, 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, + 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, 0xFC, 0x56, 0x3E, 0x4B, + 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, + 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, + 0x27, 0x80, 0xEC, 0x5F, 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, + 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, 0xA0, 0xE0, 0x3B, 0x4D, + 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, + 0x55, 0x21, 0x0C, 0x7D +}; + + +static void ShiftRowsR(BYTE *state) +{ + BYTE b[AES_BLOCK_BYTES]; + uint_fast8_t i; + + memcpy(b, state, AES_BLOCK_BYTES); + + for (i = 0; i < AES_BLOCK_BYTES; i++) + state[i] = b[(i - ((i & 0x3) << 2)) & 0xf]; +} + + +static void SubBytesR(BYTE *block) +{ + uint_fast8_t i; + + for (i = 0; i < AES_BLOCK_BYTES; i++) + block[i] = SBoxR[ block[i] ]; +} + + +void AesEncryptCbc(const AesCtx *const Ctx, BYTE *restrict iv, BYTE *restrict data, size_t *restrict len) +{ + // Pad up to blocksize inclusive + size_t i; + uint_fast8_t pad = (~*len & (AES_BLOCK_BYTES - 1)) + 1; + + #if defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ == 8) // gcc 4.8 memset bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56977 + for (i = 0; i < pad; i++) data[*len + i] = pad; + #else + memset(data + *len, pad, pad); + #endif + *len += pad; + + if ( iv ) XorBlock(iv, data); + AesEncryptBlock(Ctx, data); + + for (i = *len - AES_BLOCK_BYTES; i; i -= AES_BLOCK_BYTES) + { + XorBlock(data, data + AES_BLOCK_BYTES); + data += AES_BLOCK_BYTES; + AesEncryptBlock(Ctx, data); + } +} + + +void AesDecryptBlock(const AesCtx *const Ctx, BYTE *block) +{ + uint_fast8_t i; + + AddRoundKey(block, &Ctx->Key[ Ctx->rounds << 2 ]); + + for ( i = ( Ctx->rounds - 1 ) << 2 ;; i -= 4 ) + { + ShiftRowsR(block); + SubBytesR(block); + AddRoundKey(block, &Ctx->Key[ i ]); + + if ( i == 0 ) break; + + MixColumnsR(block); + } +} + + +void AesDecryptCbc(const AesCtx *const Ctx, BYTE *iv, BYTE *data, size_t len) +{ + BYTE *cc; + + for (cc = data + len - AES_BLOCK_BYTES; cc > data; cc -= AES_BLOCK_BYTES) + { + AesDecryptBlock(Ctx, cc); + XorBlock(cc - AES_BLOCK_BYTES, cc); + } + + AesDecryptBlock(Ctx, cc); + if ( iv ) XorBlock(iv, cc); +} +#endif // _CRYPTO_OPENSSL || OPENSSL_VERSION_NUMBER < 0x10000000L +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include +#include +#include +#include +#include +#if !defined(_WIN32) +#include +#endif + +#include "output.h" +#include "crypto.h" +#include "endian.h" +#include "kms.h" +#include "shared_globals.h" +#include "helpers.h" + +#define FRIENDLY_NAME_WINDOWS "Windows" +#define FRIENDLY_NAME_OFFICE2010 "Office 2010" +#define FRIENDLY_NAME_OFFICE2013 "Office" + +#ifndef NO_BASIC_PRODUCT_LIST +// Do not change the order of this list. Append items as necessary +const KmsIdList ProductList[] = { + /* 000 */ { { 0x212a64dc, 0x43b1, 0x4d3d, { 0xa3, 0x0c, 0x2f, 0xc6, 0x9d, 0x20, 0x95, 0xc6 } } /*"212a64dc-43b1-4d3d-a30c-2fc69d2095c6"*/, "Vista", EPID_WINDOWS, 4, 25 }, + /* 001 */ { { 0x7fde5219, 0xfbfa, 0x484a, { 0x82, 0xc9, 0x34, 0xd1, 0xad, 0x53, 0xe8, 0x56 } } /*"7fde5219-fbfa-484a-82c9-34d1ad53e856"*/, "Windows 7", EPID_WINDOWS, 4, 25 }, + /* 002 */ { { 0x3c40b358, 0x5948, 0x45af, { 0x92, 0x3b, 0x53, 0xd2, 0x1f, 0xcc, 0x7e, 0x79 } } /*"3c40b358-5948-45af-923b-53d21fcc7e79"*/, "Windows 8 VL", EPID_WINDOWS, 5, 25 }, + /* 003 */ { { 0x5f94a0bb, 0xd5a0, 0x4081, { 0xa6, 0x85, 0x58, 0x19, 0x41, 0x8b, 0x2f, 0xe0 } } /*"5f94a0bb-d5a0-4081-a685-5819418b2fe0"*/, "Windows Preview", EPID_WINDOWS, 6, 25 }, + /* 004 */ { { 0xbbb97b3b, 0x8ca4, 0x4a28, { 0x97, 0x17, 0x89, 0xfa, 0xbd, 0x42, 0xc4, 0xac } } /*"bbb97b3b-8ca4-4a28-9717-89fabd42c4ac"*/, "Windows 8 Retail", EPID_WINDOWS, 5, 25 }, + /* 005 */ { { 0xcb8fc780, 0x2c05, 0x495a, { 0x97, 0x10, 0x85, 0xaf, 0xff, 0xc9, 0x04, 0xd7 } } /*"cb8fc780-2c05-495a-9710-85afffc904d7"*/, "Windows 8.1 VL", EPID_WINDOWS, 6, 25 }, + /* 006 */ { { 0x6d646890, 0x3606, 0x461a, { 0x86, 0xab, 0x59, 0x8b, 0xb8, 0x4a, 0xce, 0x82 } } /*"6d646890-3606-461a-86ab-598bb84ace82"*/, "Windows 8.1 Retail", EPID_WINDOWS, 6, 25 }, + /* 007 */ { { 0x33e156e4, 0xb76f, 0x4a52, { 0x9f, 0x91, 0xf6, 0x41, 0xdd, 0x95, 0xac, 0x48 } } /*"33e156e4-b76f-4a52-9f91-f641dd95ac48"*/, "Windows 2008 A", EPID_WINDOWS, 4, 5 }, + /* 008 */ { { 0x8fe53387, 0x3087, 0x4447, { 0x89, 0x85, 0xf7, 0x51, 0x32, 0x21, 0x5a, 0xc9 } } /*"8fe53387-3087-4447-8985-f75132215ac9"*/, "Windows 2008 B", EPID_WINDOWS, 4, 5 }, + /* 009 */ { { 0x8a21fdf3, 0xcbc5, 0x44eb, { 0x83, 0xf3, 0xfe, 0x28, 0x4e, 0x66, 0x80, 0xa7 } } /*"8a21fdf3-cbc5-44eb-83f3-fe284e6680a7"*/, "Windows 2008 C", EPID_WINDOWS, 4, 5 }, + /* 010 */ { { 0x0fc6ccaf, 0xff0e, 0x4fae, { 0x9d, 0x08, 0x43, 0x70, 0x78, 0x5b, 0xf7, 0xed } } /*"0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed"*/, "Windows 2008 R2 A", EPID_WINDOWS, 4, 5 }, + /* 011 */ { { 0xca87f5b6, 0xcd46, 0x40c0, { 0xb0, 0x6d, 0x8e, 0xcd, 0x57, 0xa4, 0x37, 0x3f } } /*"ca87f5b6-cd46-40c0-b06d-8ecd57a4373f"*/, "Windows 2008 R2 B", EPID_WINDOWS, 4, 5 }, + /* 012 */ { { 0xb2ca2689, 0xa9a8, 0x42d7, { 0x93, 0x8d, 0xcf, 0x8e, 0x9f, 0x20, 0x19, 0x58 } } /*"b2ca2689-a9a8-42d7-938d-cf8e9f201958"*/, "Windows 2008 R2 C", EPID_WINDOWS, 4, 5 }, + /* 013 */ { { 0x8665cb71, 0x468c, 0x4aa3, { 0xa3, 0x37, 0xcb, 0x9b, 0xc9, 0xd5, 0xea, 0xac } } /*"8665cb71-468c-4aa3-a337-cb9bc9d5eaac"*/, "Windows 2012", EPID_WINDOWS, 5, 5 }, + /* 014 */ { { 0x8456EFD3, 0x0C04, 0x4089, { 0x87, 0x40, 0x5b, 0x72, 0x38, 0x53, 0x5a, 0x65 } } /*"8456EFD3-0C04-4089-8740-5B7238535A65"*/, "Windows 2012 R2", EPID_WINDOWS, 6, 5 }, + /* 015 */ { { 0xe85af946, 0x2e25, 0x47b7, { 0x83, 0xe1, 0xbe, 0xbc, 0xeb, 0xea, 0xc6, 0x11 } } /*"e85af946-2e25-47b7-83e1-bebcebeac611"*/, "Office 2010", EPID_OFFICE2010, 4, 5 }, + /* 016 */ { { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } /*"e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0"*/, "Office 2013", EPID_OFFICE2013, 6, 5 }, + /* 017 */ { { 0x6d5f5270, 0x31ac, 0x433e, { 0xb9, 0x0a, 0x39, 0x89, 0x29, 0x23, 0xc6, 0x57 } } /*"6d5f5270-31ac-433e-b90a-39892923c657"*/, "Windows Server Preview", EPID_WINDOWS, 6, 5 }, + /* 018 */ { { 0x85b5f61b, 0x320b, 0x4be3, { 0x81, 0x4a, 0xb7, 0x6b, 0x2b, 0xfa, 0xfc, 0x82 } } /*"85b5f61b-320b-4be3-814a-b76b2bfafc82"*/, "Office 2016", EPID_OFFICE2013, 6, 5 }, + /* 019 */ { { 0x58e2134f, 0x8e11, 0x4d17, { 0x9c, 0xb2, 0x91, 0x06, 0x9c, 0x15, 0x11, 0x48 } } /*"58e2134f-8e11-4d17-9cb2-91069c151148"*/, "Windows 10 VL", EPID_WINDOWS, 6, 25 }, + /* 020 */ { { 0xe1c51358, 0xfe3e, 0x4203, { 0xa4, 0xa2, 0x3b, 0x6b, 0x20, 0xc9, 0x73, 0x4e } } /*"e1c51358-fe3e-4203-a4a2-3b6b20c9734e"*/, "Windows 10 Retail", EPID_WINDOWS, 6, 25 }, + /* 021 */ { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 } +}; +#endif + +// Application ID is used by KMS server to count KeyManagementServiceCurrentCount +// Do not change the order of this list. Append items as necessary +const KmsIdList AppList[] = { + /* 000 */ { { 0x55c92734, 0xd682, 0x4d71, { 0x98, 0x3e, 0xd6, 0xec, 0x3f, 0x16, 0x05, 0x9f } } /*"55C92734-D682-4D71-983E-D6EC3F16059F"*/, FRIENDLY_NAME_WINDOWS, EPID_WINDOWS, 0, 0}, + /* 001 */ { { 0x59A52881, 0xa989, 0x479d, { 0xaf, 0x46, 0xf2, 0x75, 0xc6, 0x37, 0x06, 0x63 } } /*"59A52881-A989-479D-AF46-F275C6370663"*/, FRIENDLY_NAME_OFFICE2010, EPID_OFFICE2010, 0, 0}, + /* 002 */ { { 0x0FF1CE15, 0xA989, 0x479D, { 0xaf, 0x46, 0xf2, 0x75, 0xc6, 0x37, 0x06, 0x63 } } /*"0FF1CE15-A989-479D-AF46-F275C6370663"*/, FRIENDLY_NAME_OFFICE2013, EPID_OFFICE2013, 0, 0}, + /* 003 */ { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 } +}; + +#ifndef NO_EXTENDED_PRODUCT_LIST +const KmsIdList ExtendedProductList [] = { + + // Windows Server + + { { 0xad2542d4, 0x9154, 0x4c6d, { 0x8a, 0x44, 0x30, 0xf1, 0x1e, 0xe9, 0x69, 0x89, } } /*ad2542d4-9154-4c6d-8a44-30f11ee96989*/, "Windows Server 2008 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, + { { 0x2401e3d0, 0xc50a, 0x4b58, { 0x87, 0xb2, 0x7e, 0x79, 0x4b, 0x7d, 0x26, 0x07, } } /*2401e3d0-c50a-4b58-87b2-7e794b7d2607*/, "Windows Server 2008 Standard V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, + { { 0x68b6e220, 0xcf09, 0x466b, { 0x92, 0xd3, 0x45, 0xcd, 0x96, 0x4b, 0x95, 0x09, } } /*68b6e220-cf09-466b-92d3-45cd964b9509*/, "Windows Server 2008 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + { { 0xfd09ef77, 0x5647, 0x4eff, { 0x80, 0x9c, 0xaf, 0x2b, 0x64, 0x65, 0x9a, 0x45, } } /*fd09ef77-5647-4eff-809c-af2b64659a45*/, "Windows Server 2008 Datacenter V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + { { 0xc1af4d90, 0xd1bc, 0x44ca, { 0x85, 0xd4, 0x00, 0x3b, 0xa3, 0x3d, 0xb3, 0xb9, } } /*c1af4d90-d1bc-44ca-85d4-003ba33db3b9*/, "Windows Server 2008 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B }, + { { 0x8198490a, 0xadd0, 0x47b2, { 0xb3, 0xba, 0x31, 0x6b, 0x12, 0xd6, 0x47, 0xb4, } } /*8198490a-add0-47b2-b3ba-316b12d647b4*/, "Windows Server 2008 Enterprise V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B }, + { { 0xddfa9f7c, 0xf09e, 0x40b9, { 0x8c, 0x1a, 0xbe, 0x87, 0x7a, 0x9a, 0x7f, 0x4b, } } /*ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b*/, "Windows Server 2008 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, + { { 0x7afb1156, 0x2c1d, 0x40fc, { 0xb2, 0x60, 0xaa, 0xb7, 0x44, 0x2b, 0x62, 0xfe, } } /*7afb1156-2c1d-40fc-b260-aab7442b62fe*/, "Windows Server 2008 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + { { 0x68531fb9, 0x5511, 0x4989, { 0x97, 0xbe, 0xd1, 0x1a, 0x0f, 0x55, 0x63, 0x3f, } } /*68531fb9-5511-4989-97be-d11a0f55633f*/, "Windows Server 2008 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A }, + { { 0x7482e61b, 0xc589, 0x4b7f, { 0x8e, 0xcc, 0x46, 0xd4, 0x55, 0xac, 0x3b, 0x87, } } /*7482e61b-c589-4b7f-8ecc-46d455ac3b87*/, "Windows Server 2008 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C }, + { { 0x620e2b3d, 0x09e7, 0x42fd, { 0x80, 0x2a, 0x17, 0xa1, 0x36, 0x52, 0xfe, 0x7a, } } /*620e2b3d-09e7-42fd-802a-17a13652fe7a*/, "Windows Server 2008 R2 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2B }, + { { 0xa78b8bd9, 0x8017, 0x4df5, { 0xb8, 0x6a, 0x09, 0xf7, 0x56, 0xaf, 0xfa, 0x7c, } } /*a78b8bd9-8017-4df5-b86a-09f756affa7c*/, "Windows Server 2008 R2 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A }, + { { 0xcda18cf3, 0xc196, 0x46ad, { 0xb2, 0x89, 0x60, 0xc0, 0x72, 0x86, 0x99, 0x94, } } /*cda18cf3-c196-46ad-b289-60c072869994*/, "Windows Server 2008 R2 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C }, + { { 0xd3643d60, 0x0c42, 0x412d, { 0xa7, 0xd6, 0x52, 0xe6, 0x63, 0x53, 0x27, 0xf6, } } /*d3643d60-0c42-412d-a7d6-52e6635327f6*/, "Windows Server 2012 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0xf0f5ec41, 0x0d55, 0x4732, { 0xaf, 0x02, 0x44, 0x0a, 0x44, 0xa3, 0xcf, 0x0f, } } /*f0f5ec41-0d55-4732-af02-440a44a3cf0f*/, "Windows Server 2012 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0x95fd1c83, 0x7df5, 0x494a, { 0xbe, 0x8b, 0x13, 0x00, 0xe1, 0xc9, 0xd1, 0xcd, } } /*95fd1c83-7df5-494a-be8b-1300e1c9d1cd*/, "Windows Server 2012 MultiPoint Premium", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0x7d5486c7, 0xe120, 0x4771, { 0xb7, 0xf1, 0x7b, 0x56, 0xc6, 0xd3, 0x17, 0x0c, } } /*7d5486c7-e120-4771-b7f1-7b56c6d3170c*/, "Windows Server 2012 MultiPoint Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0x00091344, 0x1ea4, 0x4f37, { 0xb7, 0x89, 0x01, 0x75, 0x0b, 0xa6, 0x98, 0x8c, } } /*00091344-1ea4-4f37-b789-01750ba6988c*/, "Windows Server 2012 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0xb3ca044e, 0xa358, 0x4d68, { 0x98, 0x83, 0xaa, 0xa2, 0x94, 0x1a, 0xca, 0x99, } } /*b3ca044e-a358-4d68-9883-aaa2941aca99*/, "Windows Server 2012 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0xb743a2be, 0x68d4, 0x4dd3, { 0xaf, 0x32, 0x92, 0x42, 0x5b, 0x7b, 0xb6, 0x23, } } /*b743a2be-68d4-4dd3-af32-92425b7bb623*/, "Windows Server 2012 R2 Cloud Storage", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0x21db6ba4, 0x9a7b, 0x4a14, { 0x9e, 0x29, 0x64, 0xa6, 0x0c, 0x59, 0x30, 0x1d, } } /*21db6ba4-9a7b-4a14-9e29-64a60c59301d*/, "Windows Server 2012 R2 Essentials", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0xba947c44, 0xd19d, 0x4786, { 0xb6, 0xae, 0x22, 0x77, 0x0b, 0xc9, 0x4c, 0x54, } } /*ba947c44-d19d-4786-b6ae-22770bc94c54*/, "Windows Server 2016 Datacenter Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_SRV_BETA }, + + + // Windows 10 Preview +# ifdef INCLUDE_BETAS + { { 0x6496e59d, 0x89dc, 0x49eb, { 0xa3, 0x53, 0x09, 0xce, 0xb9, 0x40, 0x48, 0x45, } } /*6496e59d-89dc-49eb-a353-09ceb9404845*/, "Windows 10 Core Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0xa4383e6b, 0xdada, 0x423d, { 0xa4, 0x3d, 0xf2, 0x56, 0x78, 0x42, 0x96, 0x76, } } /*a4383e6b-dada-423d-a43d-f25678429676*/, "Windows 10 Professional Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0xcf59a07b, 0x1a2a, 0x4be0, { 0xbf, 0xe0, 0x42, 0x3b, 0x58, 0x23, 0xe6, 0x63, } } /*cf59a07b-1a2a-4be0-bfe0-423b5823e663*/, "Windows 10 Professional WMC Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0xcde952c7, 0x2f96, 0x4d9d, { 0x8f, 0x2b, 0x2d, 0x34, 0x9f, 0x64, 0xfc, 0x51, } } /*cde952c7-2f96-4d9d-8f2b-2d349f64fc51*/, "Windows 10 Enterprise Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, +# endif + + + // Windows 10 + + { { 0x73111121, 0x5638, 0x40f6, { 0xbc, 0x11, 0xf1, 0xd7, 0xb0, 0xd6, 0x43, 0x00, } } /*73111121-5638-40f6-bc11-f1d7b0d64300*/, "Windows 10 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0xe272e3e2, 0x732f, 0x4c65, { 0xa8, 0xf0, 0x48, 0x47, 0x47, 0xd0, 0xd9, 0x47, } } /*e272e3e2-732f-4c65-a8f0-484747d0d947*/, "Windows 10 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x7b51a46c, 0x0c04, 0x4e8f, { 0x9a, 0xf4, 0x84, 0x96, 0xcc, 0xa9, 0x0d, 0x5e, } } /*7b51a46c-0c04-4e8f-9af4-8496cca90d5e*/, "Windows 10 Enterprise LTSB", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x87b838b7, 0x41b6, 0x4590, { 0x83, 0x18, 0x57, 0x97, 0x95, 0x1d, 0x85, 0x29, } } /*87b838b7-41b6-4590-8318-5797951d8529*/, "Windows 10 Enterprise LTSB N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0xe0c42288, 0x980c, 0x4788, { 0xa0, 0x14, 0xc0, 0x80, 0xd2, 0xe1, 0x92, 0x6e, } } /*e0c42288-980c-4788-a014-c080d2e1926e*/, "Windows 10 Education", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x3c102355, 0xd027, 0x42c6, { 0xad, 0x23, 0x2e, 0x7e, 0xf8, 0xa0, 0x25, 0x85, } } /*3c102355-d027-42c6-ad23-2e7ef8a02585*/, "Windows 10 Education N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x2de67392, 0xb7a7, 0x462a, { 0xb1, 0xca, 0x10, 0x8d, 0xd1, 0x89, 0xf5, 0x88, } } /*2de67392-b7a7-462a-b1ca-108dd189f588*/, "Windows 10 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0xa80b5abf, 0x75ad, 0x428b, { 0xb0, 0x5d, 0xa4, 0x7d, 0x2d, 0xff, 0xee, 0xbf, } } /*a80b5abf-76ad-428b-b05d-a47d2dffeebf*/, "Windows 10 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x58e97c99, 0xf377, 0x4ef1, { 0x81, 0xd5, 0x4a, 0xd5, 0x52, 0x2b, 0x5f, 0xd8, } } /*58e97c99-f377-4ef1-81d5-4ad5522b5fd8*/, "Windows 10 Home", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + { { 0x7b9e1751, 0xa8da, 0x4f75, { 0x95, 0x60, 0x5f, 0xad, 0xfe, 0x3d, 0x8e, 0x38, } } /*7b9e1751-a8da-4f75-9560-5fadfe3d8e38*/, "Windows 10 Home N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + { { 0xcd918a57, 0xa41b, 0x4c82, { 0x8d, 0xce, 0x1a, 0x53, 0x8e, 0x22, 0x1a, 0x83, } } /*cd918a57-a41b-4c82-8dce-1a538e221a83*/, "Windows 10 Home Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + { { 0xa9107544, 0xf4a0, 0x4053, { 0xa9, 0x6a, 0x14, 0x79, 0xab, 0xde, 0xf9, 0x12, } } /*a9107544-f4a0-4053-a96a-1479abdef912*/, "Windows 10 Home Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + + + // Windows 8.x + +# ifdef INCLUDE_BETAS + { { 0x2B9C337F, 0x7A1D, 0x4271, { 0x90, 0xA3, 0xC6, 0x85, 0x5A, 0x2B, 0x8A, 0x1C, } } /*2B9C337F-7A1D-4271-90A3-C6855A2B8A1C*/, "Windows 8.x Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0x631EAD72, 0xA8AB, 0x4DF8, { 0xBB, 0xDF, 0x37, 0x20, 0x29, 0x98, 0x9B, 0xDD, } } /*631EAD72-A8AB-4DF8-BBDF-372029989BDD*/, "Windows 8.x Preview ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, +# endif + { { 0x81671aaf, 0x79d1, 0x4eb1, { 0xb0, 0x04, 0x8c, 0xbb, 0xe1, 0x73, 0xaf, 0xea, } } /*81671aaf-79d1-4eb1-b004-8cbbe173afea*/, "Windows 8.1 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0x113e705c, 0xfa49, 0x48a4, { 0xbe, 0xea, 0x7d, 0xd8, 0x79, 0xb4, 0x6b, 0x14, } } /*113e705c-fa49-48a4-beea-7dd879b46b14*/, "Windows 8.1 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0x096ce63d, 0x4fac, 0x48a9, { 0x82, 0xa9, 0x61, 0xae, 0x9e, 0x80, 0x0e, 0x5f, } } /*096ce63d-4fac-48a9-82a9-61ae9e800e5f*/, "Windows 8.1 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xc06b6981, 0xd7fd, 0x4a35, { 0xb7, 0xb4, 0x05, 0x47, 0x42, 0xb7, 0xaf, 0x67, } } /*c06b6981-d7fd-4a35-b7b4-054742b7af67*/, "Windows 8.1 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0x7476d79f, 0x8e48, 0x49b4, { 0xab, 0x63, 0x4d, 0x0b, 0x81, 0x3a, 0x16, 0xe4, } } /*7476d79f-8e48-49b4-ab63-4d0b813a16e4*/, "Windows 8.1 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xfe1c3238, 0x432a, 0x43a1, { 0x8e, 0x25, 0x97, 0xe7, 0xd1, 0xef, 0x10, 0xf3, } } /*fe1c3238-432a-43a1-8e25-97e7d1ef10f3*/, "Windows 8.1 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0x78558a64, 0xdc19, 0x43fe, { 0xa0, 0xd0, 0x80, 0x75, 0xb2, 0xa3, 0x70, 0xa3, } } /*78558a64-dc19-43fe-a0d0-8075b2a370a3*/, "Windows 8.1 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xffee456a, 0xcd87, 0x4390, { 0x8e, 0x07, 0x16, 0x14, 0x6c, 0x67, 0x2f, 0xd0, } } /*ffee456a-cd87-4390-8e07-16146c672fd0*/, "Windows 8.1 Core ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xc72c6a1d, 0xf252, 0x4e7e, { 0xbd, 0xd1, 0x3f, 0xca, 0x34, 0x2a, 0xcb, 0x35, } } /*c72c6a1d-f252-4e7e-bdd1-3fca342acb35*/, "Windows 8.1 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xdb78b74f, 0xef1c, 0x4892, { 0xab, 0xfe, 0x1e, 0x66, 0xb8, 0x23, 0x1d, 0xf6, } } /*db78b74f-ef1c-4892-abfe-1e66b8231df6*/, "Windows 8.1 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xe9942b32, 0x2e55, 0x4197, { 0xb0, 0xbd, 0x5f, 0xf5, 0x8c, 0xba, 0x88, 0x60, } } /*e9942b32-2e55-4197-b0bd-5ff58cba8860*/, "Windows 8.1 Core Connected", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xc6ddecd6, 0x2354, 0x4c19, { 0x90, 0x9b, 0x30, 0x6a, 0x30, 0x58, 0x48, 0x4e, } } /*c6ddecd6-2354-4c19-909b-306a3058484e*/, "Windows 8.1 Core Connected N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xb8f5e3a3, 0xed33, 0x4608, { 0x81, 0xe1, 0x37, 0xd6, 0xc9, 0xdc, 0xfd, 0x9c, } } /*b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c*/, "Windows 8.1 Core Connected Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xba998212, 0x460a, 0x44db, { 0xbf, 0xb5, 0x71, 0xbf, 0x09, 0xd1, 0xc6, 0x8b, } } /*ba998212-460a-44db-bfb5-71bf09d1c68b*/, "Windows 8.1 Core Connected Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xe58d87b5, 0x8126, 0x4580, { 0x80, 0xfb, 0x86, 0x1b, 0x22, 0xf7, 0x92, 0x96, } } /*e58d87b5-8126-4580-80fb-861b22f79296*/, "Windows 8.1 Professional Student", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xcab491c7, 0xa918, 0x4f60, { 0xb5, 0x02, 0xda, 0xb7, 0x5e, 0x33, 0x4f, 0x40, } } /*cab491c7-a918-4f60-b502-dab75e334f40*/, "Windows 8.1 Professional Student N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xa00018a3, 0xf20f, 0x4632, { 0xbf, 0x7c, 0x8d, 0xaa, 0x53, 0x51, 0xc9, 0x14, } } /*a00018a3-f20f-4632-bf7c-8daa5351c914*/, "Windows 8 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0xa98bcd6d, 0x5343, 0x4603, { 0x8a, 0xfe, 0x59, 0x08, 0xe4, 0x61, 0x11, 0x12, } } /*a98bcd6d-5343-4603-8afe-5908e4611112*/, "Windows 8 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0xebf245c1, 0x29a8, 0x4daf, { 0x9c, 0xb1, 0x38, 0xdf, 0xc6, 0x08, 0xa8, 0xc8, } } /*ebf245c1-29a8-4daf-9cb1-38dfc608a8c8*/, "Windows 8 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0x458e1bec, 0x837a, 0x45f6, { 0xb9, 0xd5, 0x92, 0x5e, 0xd5, 0xd2, 0x99, 0xde, } } /*458e1bec-837a-45f6-b9d5-925ed5d299de*/, "Windows 8 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0xe14997e7, 0x800a, 0x4cf7, { 0xad, 0x10, 0xde, 0x4b, 0x45, 0xb5, 0x78, 0xdb, } } /*e14997e7-800a-4cf7-ad10-de4b45b578db*/, "Windows 8 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0xc04ed6bf, 0x55c8, 0x4b47, { 0x9f, 0x8e, 0x5a, 0x1f, 0x31, 0xce, 0xee, 0x60, } } /*c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60*/, "Windows 8 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0x197390a0, 0x65f6, 0x4a95, { 0xbd, 0xc4, 0x55, 0xd5, 0x8a, 0x3b, 0x02, 0x53, } } /*197390a0-65f6-4a95-bdc4-55d58a3b0253*/, "Windows 8 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0x9d5584a2, 0x2d85, 0x419a, { 0x98, 0x2c, 0xa0, 0x08, 0x88, 0xbb, 0x9d, 0xdf, } } /*9d5584a2-2d85-419a-982c-a00888bb9ddf*/, "Windows 8 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0x8860fcd4, 0xa77b, 0x4a20, { 0x90, 0x45, 0xa1, 0x50, 0xff, 0x11, 0xd6, 0x09, } } /*8860fcd4-a77b-4a20-9045-a150ff11d609*/, "Windows 8 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + + + // Windows 7 + + { { 0xae2ee509, 0x1b34, 0x41c0, { 0xac, 0xb7, 0x6d, 0x46, 0x50, 0x16, 0x89, 0x15, } } /*ae2ee509-1b34-41c0-acb7-6d4650168915*/, "Windows 7 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x1cb6d605, 0x11b3, 0x4e14, { 0xbb, 0x30, 0xda, 0x91, 0xc8, 0xe3, 0x98, 0x3a, } } /*1cb6d605-11b3-4e14-bb30-da91c8e3983a*/, "Windows 7 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0xb92e9980, 0xb9d5, 0x4821, { 0x9c, 0x94, 0x14, 0x0f, 0x63, 0x2f, 0x63, 0x12, } } /*b92e9980-b9d5-4821-9c94-140f632f6312*/, "Windows 7 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x54a09a0d, 0xd57b, 0x4c10, { 0x8b, 0x69, 0xa8, 0x42, 0xd6, 0x59, 0x0a, 0xd5, } } /*54a09a0d-d57b-4c10-8b69-a842d6590ad5*/, "Windows 7 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + + + // Windows Vista + + { { 0xcfd8ff08, 0xc0d7, 0x452b, { 0x9f, 0x60, 0xef, 0x5c, 0x70, 0xc3, 0x20, 0x94, } } /*cfd8ff08-c0d7-452b-9f60-ef5c70c32094*/, "Windows Vista Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + { { 0xd4f54950, 0x26f2, 0x4fb4, { 0xba, 0x21, 0xff, 0xab, 0x16, 0xaf, 0xca, 0xde, } } /*d4f54950-26f2-4fb4-ba21-ffab16afcade*/, "Windows Vista Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + { { 0x4f3d1606, 0x3fea, 0x4c01, { 0xbe, 0x3c, 0x8d, 0x67, 0x1c, 0x40, 0x1e, 0x3b, } } /*4f3d1606-3fea-4c01-be3c-8d671c401e3b*/, "Windows Vista Business", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + { { 0x2c682dc2, 0x8b68, 0x4f63, { 0xa1, 0x65, 0xae, 0x29, 0x1d, 0x4c, 0xf1, 0x38, } } /*2c682dc2-8b68-4f63-a165-ae291d4cf138*/, "Windows Vista Business N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + + + // Windows Embedded + + { { 0xaa6dd3aa, 0xc2b4, 0x40e2, { 0xa5, 0x44, 0xa6, 0xbb, 0xb3, 0xf5, 0xc3, 0x95, } } /*aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395*/, "Windows ThinPC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0xdb537896, 0x376f, 0x48ae, { 0xa4, 0x92, 0x53, 0xd0, 0x54, 0x77, 0x73, 0xd0, } } /*db537896-376f-48ae-a492-53d0547773d0*/, "Windows Embedded POSReady 7", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x0ab82d54, 0x47f4, 0x4acb, { 0x81, 0x8c, 0xcc, 0x5b, 0xf0, 0xec, 0xb6, 0x49, } } /*0ab82d54-47f4-4acb-818c-cc5bf0ecb649*/, "Windows Embedded Industry 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xcd4e2d9f, 0x5059, 0x4a50, { 0xa9, 0x2d, 0x05, 0xd5, 0xbb, 0x12, 0x67, 0xc7, } } /*cd4e2d9f-5059-4a50-a92d-05d5bb1267c7*/, "Windows Embedded Industry E 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xf7e88590, 0xdfc7, 0x4c78, { 0xbc, 0xcb, 0x6f, 0x38, 0x65, 0xb9, 0x9d, 0x1a, } } /*f7e88590-dfc7-4c78-bccb-6f3865b99d1a*/, "Windows Embedded Industry A 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + + // Office 2010 + + { { 0x8ce7e872, 0x188c, 0x4b98, { 0x9d, 0x90, 0xf8, 0xf9, 0x0b, 0x7a, 0xad, 0x02, } } /*8ce7e872-188c-4b98-9d90-f8f90b7aad02*/, "Office Access 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xcee5d470, 0x6e3b, 0x4fcc, { 0x8c, 0x2b, 0xd1, 0x74, 0x28, 0x56, 0x8a, 0x9f, } } /*cee5d470-6e3b-4fcc-8c2b-d17428568a9f*/, "Office Excel 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x8947d0b8, 0xc33b, 0x43e1, { 0x8c, 0x56, 0x9b, 0x67, 0x4c, 0x05, 0x28, 0x32, } } /*8947d0b8-c33b-43e1-8c56-9b674c052832*/, "Office Groove 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xca6b6639, 0x4ad6, 0x40ae, { 0xa5, 0x75, 0x14, 0xde, 0xe0, 0x7f, 0x64, 0x30, } } /*ca6b6639-4ad6-40ae-a575-14dee07f6430*/, "Office InfoPath 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x09ed9640, 0xf020, 0x400a, { 0xac, 0xd8, 0xd7, 0xd8, 0x67, 0xdf, 0xd9, 0xc2, } } /*09ed9640-f020-400a-acd8-d7d867dfd9c2*/, "Office Mondo 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xef3d4e49, 0xa53d, 0x4d81, { 0xa2, 0xb1, 0x2c, 0xa6, 0xc2, 0x55, 0x6b, 0x2c, } } /*ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c*/, "Office Mondo 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xab586f5c, 0x5256, 0x4632, { 0x96, 0x2f, 0xfe, 0xfd, 0x8b, 0x49, 0xe6, 0xf4, } } /*ab586f5c-5256-4632-962f-fefd8b49e6f4*/, "Office OneNote 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xecb7c192, 0x73ab, 0x4ded, { 0xac, 0xf4, 0x23, 0x99, 0xb0, 0x95, 0xd0, 0xcc, } } /*ecb7c192-73ab-4ded-acf4-2399b095d0cc*/, "Office OutLook 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x45593b1d, 0xdfb1, 0x4e91, { 0xbb, 0xfb, 0x2d, 0x5d, 0x0c, 0xe2, 0x22, 0x7a, } } /*45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a*/, "Office PowerPoint 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xdf133ff7, 0xbf14, 0x4f95, { 0xaf, 0xe3, 0x7b, 0x48, 0xe7, 0xe3, 0x31, 0xef, } } /*df133ff7-bf14-4f95-afe3-7b48e7e331ef*/, "Office Project Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x5dc7bf61, 0x5ec9, 0x4996, { 0x9c, 0xcb, 0xdf, 0x80, 0x6a, 0x2d, 0x0e, 0xfe, } } /*5dc7bf61-5ec9-4996-9ccb-df806a2d0efe*/, "Office Project Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xb50c4f75, 0x599b, 0x43e8, { 0x8d, 0xcd, 0x10, 0x81, 0xa7, 0x96, 0x72, 0x41, } } /*b50c4f75-599b-43e8-8dcd-1081a7967241*/, "Office Publisher 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x92236105, 0xbb67, 0x494f, { 0x94, 0xc7, 0x7f, 0x7a, 0x60, 0x79, 0x29, 0xbd, } } /*92236105-bb67-494f-94c7-7f7a607929bd*/, "Office Visio Premium 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xe558389c, 0x83c3, 0x4b29, { 0xad, 0xfe, 0x5e, 0x4d, 0x7f, 0x46, 0xc3, 0x58, } } /*e558389c-83c3-4b29-adfe-5e4d7f46c358*/, "Office Visio Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x9ed833ff, 0x4f92, 0x4f36, { 0xb3, 0x70, 0x86, 0x83, 0xa4, 0xf1, 0x32, 0x75, } } /*9ed833ff-4f92-4f36-b370-8683a4f13275*/, "Office Visio Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x2d0882e7, 0xa4e7, 0x423b, { 0x8c, 0xcc, 0x70, 0xd9, 0x1e, 0x01, 0x58, 0xb1, } } /*2d0882e7-a4e7-423b-8ccc-70d91e0158b1*/, "Office Word 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x6f327760, 0x8c5c, 0x417c, { 0x9b, 0x61, 0x83, 0x6a, 0x98, 0x28, 0x7e, 0x0c, } } /*6f327760-8c5c-417c-9b61-836a98287e0c*/, "Office Professional Plus 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x9da2a678, 0xfb6b, 0x4e67, { 0xab, 0x84, 0x60, 0xdd, 0x6a, 0x9c, 0x81, 0x9a, } } /*9da2a678-fb6b-4e67-ab84-60dd6a9c819a*/, "Office Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xea509e87, 0x07a1, 0x4a45, { 0x9e, 0xdc, 0xeb, 0xa5, 0xa3, 0x9f, 0x36, 0xaf, } } /*ea509e87-07a1-4a45-9edc-eba5a39f36af*/, "Office Small Business Basics 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + + // Office 2013 + + { { 0x6ee7622c, 0x18d8, 0x4005, { 0x9f, 0xb7, 0x92, 0xdb, 0x64, 0x4a, 0x27, 0x9b, } } /*6ee7622c-18d8-4005-9fb7-92db644a279b*/, "Office Access 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xf7461d52, 0x7c2b, 0x43b2, { 0x87, 0x44, 0xea, 0x95, 0x8e, 0x0b, 0xd0, 0x9a, } } /*f7461d52-7c2b-43b2-8744-ea958e0bd09a*/, "Office Excel 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xa30b8040, 0xd68a, 0x423f, { 0xb0, 0xb5, 0x9c, 0xe2, 0x92, 0xea, 0x5a, 0x8f, } } /*a30b8040-d68a-423f-b0b5-9ce292ea5a8f*/, "Office InfoPath 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x1b9f11e3, 0xc85c, 0x4e1b, { 0xbb, 0x29, 0x87, 0x9a, 0xd2, 0xc9, 0x09, 0xe3, } } /*1b9f11e3-c85c-4e1b-bb29-879ad2c909e3*/, "Office Lync 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xdc981c6b, 0xfc8e, 0x420f, { 0xaa, 0x43, 0xf8, 0xf3, 0x3e, 0x5c, 0x09, 0x23, } } /*dc981c6b-fc8e-420f-aa43-f8f33e5c0923*/, "Office Mondo 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xefe1f3e6, 0xaea2, 0x4144, { 0xa2, 0x08, 0x32, 0xaa, 0x87, 0x2b, 0x65, 0x45, } } /*efe1f3e6-aea2-4144-a208-32aa872b6545*/, "Office OneNote 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x771c3afa, 0x50c5, 0x443f, { 0xb1, 0x51, 0xff, 0x25, 0x46, 0xd8, 0x63, 0xa0, } } /*771c3afa-50c5-443f-b151-ff2546d863a0*/, "Office OutLook 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x8c762649, 0x97d1, 0x4953, { 0xad, 0x27, 0xb7, 0xe2, 0xc2, 0x5b, 0x97, 0x2e, } } /*8c762649-97d1-4953-ad27-b7e2c25b972e*/, "Office PowerPoint 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x4a5d124a, 0xe620, 0x44ba, { 0xb6, 0xff, 0x65, 0x89, 0x61, 0xb3, 0x3b, 0x9a, } } /*4a5d124a-e620-44ba-b6ff-658961b33b9a*/, "Office Project Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x427a28d1, 0xd17c, 0x4abf, { 0xb7, 0x17, 0x32, 0xc7, 0x80, 0xba, 0x6f, 0x07, } } /*427a28d1-d17c-4abf-b717-32c780ba6f07*/, "Office Project Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x00c79ff1, 0x6850, 0x443d, { 0xbf, 0x61, 0x71, 0xcd, 0xe0, 0xde, 0x30, 0x5f, } } /*00c79ff1-6850-443d-bf61-71cde0de305f*/, "Office Publisher 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xac4efaf0, 0xf81f, 0x4f61, { 0xbd, 0xf7, 0xea, 0x32, 0xb0, 0x2a, 0xb1, 0x17, } } /*ac4efaf0-f81f-4f61-bdf7-ea32b02ab117*/, "Office Visio Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xe13ac10e, 0x75d0, 0x4aff, { 0xa0, 0xcd, 0x76, 0x49, 0x82, 0xcf, 0x54, 0x1c, } } /*e13ac10e-75d0-4aff-a0cd-764982cf541c*/, "Office Visio Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xd9f5b1c6, 0x5386, 0x495a, { 0x88, 0xf9, 0x9a, 0xd6, 0xb4, 0x1a, 0xc9, 0xb3, } } /*d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3*/, "Office Word 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } } /*b322da9c-a2e2-4058-9e4e-f59a6970bd69*/, "Office Professional Plus 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xb13afb38, 0xcd79, 0x4ae5, { 0x9f, 0x7f, 0xee, 0xd0, 0x58, 0xd7, 0x50, 0xca, } } /*b13afb38-cd79-4ae5-9f7f-eed058d750ca*/, "Office Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + + // Office 2016 + + { { 0xd450596f, 0x894d, 0x49e0, { 0x96, 0x6a, 0xfd, 0x39, 0xed, 0x4c, 0x4c, 0x64, } } /*d450596f-894d-49e0-966a-fd39ed4c4c64*/, "Office Professional Plus 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x4f414197, 0x0fc2, 0x4c01, { 0xb6, 0x8a, 0x86, 0xcb, 0xb9, 0xac, 0x25, 0x4c, } } /*4f414197-0fc2-4c01-b68a-86cbb9ac254c*/, "Office Project Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x6bf301c1, 0xb94a, 0x43e9, { 0xba, 0x31, 0xd4, 0x94, 0x59, 0x8c, 0x47, 0xfb, } } /*6bf301c1-b94a-43e9-ba31-d494598c47fb*/, "Office Visio Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x041a06cb, 0xc5b8, 0x4772, { 0x80, 0x9f, 0x41, 0x6d, 0x03, 0xd1, 0x66, 0x54, } } /*041a06cb-c5b8-4772-809f-416d03d16654*/, "Office Publisher 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x67c0fc0c, 0xdeba, 0x401b, { 0xbf, 0x8b, 0x9c, 0x8a, 0xd8, 0x39, 0x58, 0x04, } } /*67c0fc0c-deba-401b-bf8b-9c8ad8395804*/, "Office Access 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x83e04ee1, 0xfa8d, 0x436d, { 0x89, 0x94, 0xd3, 0x1a, 0x86, 0x2c, 0xab, 0x77, } } /*83e04ee1-fa8d-436d-8994-d31a862cab77*/, "Office Skype for Business 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x9caabccb, 0x61b1, 0x4b4b, { 0x8b, 0xec, 0xd1, 0x0a, 0x3c, 0x3a, 0xc2, 0xce, } } /*9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce*/, "Office Mondo 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xaa2a7821, 0x1827, 0x4c2c, { 0x8f, 0x1d, 0x45, 0x13, 0xa3, 0x4d, 0xda, 0x97, } } /*aa2a7821-1827-4c2c-8f1d-4513a34dda97*/, "Office Visio Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xbb11badf, 0xd8aa, 0x470e, { 0x93, 0x11, 0x20, 0xea, 0xf8, 0x0f, 0xe5, 0xcc, } } /*bb11badf-d8aa-470e-9311-20eaf80fe5cc*/, "Office Word 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xc3e65d36, 0x141f, 0x4d2f, { 0xa3, 0x03, 0xa8, 0x42, 0xee, 0x75, 0x6a, 0x29, } } /*c3e65d36-141f-4d2f-a303-a842ee756a29*/, "Office Excel 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xd70b1bba, 0xb893, 0x4544, { 0x96, 0xe2, 0xb7, 0xa3, 0x18, 0x09, 0x1c, 0x33, } } /*d70b1bba-b893-4544-96e2-b7a318091c33*/, "Office Powerpoint 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xd8cace59, 0x33d2, 0x4ac7, { 0x9b, 0x1b, 0x9b, 0x72, 0x33, 0x9c, 0x51, 0xc8, } } /*d8cace59-33d2-4ac7-9b1b-9b72339c51c8*/, "Office OneNote 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xda7ddabc, 0x3fbe, 0x4447, { 0x9e, 0x01, 0x6a, 0xb7, 0x44, 0x0b, 0x4c, 0xd4, } } /*da7ddabc-3fbe-4447-9e01-6ab7440b4cd4*/, "Office Project Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xdedfa23d, 0x6ed1, 0x45a6, { 0x85, 0xdc, 0x63, 0xca, 0xe0, 0x54, 0x6d, 0xe6, } } /*dedfa23d-6ed1-45a6-85dc-63cae0546de6*/, "Office Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xe914ea6e, 0xa5fa, 0x4439, { 0xa3, 0x94, 0xa9, 0xbb, 0x32, 0x93, 0xca, 0x09, } } /*e914ea6e-a5fa-4439-a394-a9bb3293ca09*/, "Office Mondo R 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xec9d9265, 0x9d1e, 0x4ed0, { 0x83, 0x8a, 0xcd, 0xc2, 0x0f, 0x25, 0x51, 0xa1, } } /*ec9d9265-9d1e-4ed0-838a-cdc20f2551a1*/, "Office Outlook 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + + // End marker (necessity should be removed when time permits) + + { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 } +}; + + +// necessary because other .c files cannot access _countof() +__pure ProdListIndex_t getExtendedProductListSize(void) +{ + return _countof(ExtendedProductList) - 1; +} + +__pure ProdListIndex_t getAppListSize(void) +{ + return _countof(AppList); +} + +#endif + +#ifndef NO_RANDOM_EPID +// HostType and OSBuild +static const struct KMSHostOS { uint16_t Type; uint16_t Build; } HostOS[] = +{ + { 55041, 6002 }, // Windows Server 2008 SP2 + { 55041, 7601 }, // Windows Server 2008 R2 SP1 + { 5426, 9200 }, // Windows Server 2012 + { 6401, 9600 }, // Windows Server 2012 R2 + { 3612, 10240}, // Windows Server 2016 +}; + +// GroupID and PIDRange +static const struct PKEYCONFIG { uint16_t GroupID; uint32_t RangeMin; uint32_t RangeMax; } pkeyconfig[] = { + { 206, 152000000, 191999999 }, // Windows Server 2012 KMS Host pkeyconfig + { 206, 271000000, 310999999 }, // Windows Server 2012 R2 KMS Host pkeyconfig + { 96, 199000000, 217999999 }, // Office2010 KMS Host pkeyconfig + { 206, 234000000, 255999999 }, // Office2013 KMS Host pkeyconfig +}; + +// Valid language identifiers to be used in the ePID +static const uint16_t LcidList[] = { + 1078, 1052, 1025, 2049, 3073, 4097, 5121, 6145, 7169, 8193, 9217, 10241, 11265, 12289, 13313, 14337, 15361, 16385, + 1067, 1068, 2092, 1069, 1059, 1093, 5146, 1026, 1027, 1028, 2052, 3076, 4100, 5124, 1050, 4122, 1029, 1030, 1125, 1043, 2067, + 1033, 2057, 3081, 4105, 5129, 6153, 7177, 8201, 9225, 10249, 11273, 12297, 13321, 1061, 1080, 1065, 1035, 1036, 2060, + 3084, 4108, 5132, 6156, 1079, 1110, 1031, 2055, 3079, 4103, 5127, 1032, 1095, 1037, 1081, 1038, 1039, 1057, 1040, 2064, 1041, 1099, + 1087, 1111, 1042, 1088, 1062, 1063, 1071, 1086, 2110, 1100, 1082, 1153, 1102, 1104, 1044, 2068, 1045, 1046, 2070, + 1094, 1131, 2155, 3179, 1048, 1049, 9275, 4155, 5179, 3131, 1083, 2107, 8251, 6203, 7227, 1103, 2074, 6170, 3098, + 7194, 1051, 1060, 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, 12298, 13322, 14346, 15370, 16394, + 17418, 18442, 19466, 20490, 1089, 1053, 2077, 1114, 1097, 1092, 1098, 1054, 1074, 1058, 1056, 1091, 2115, 1066, 1106, 1076, 1077 +}; + + +#ifdef _PEDANTIC +uint16_t IsValidLcid(const uint16_t Lcid) +{ + uint16_t i; + + for (i = 0; i < _countof(LcidList); i++) + { + if (Lcid == LcidList[i]) return Lcid; + } + + return 0; +} +#endif // _PEDANTIC +#endif // NO_RANDOM_EPID + + +// Unix time is seconds from 1970-01-01. Should be 64 bits to avoid Year 2035 overflow bug. +// FILETIME is 100 nanoseconds from 1601-01-01. Must be 64 bits. +void getUnixTimeAsFileTime(FILETIME *const ts) +{ + int64_t unixtime = (int64_t)time(NULL); + int64_t *filetime = (int64_t*)ts; + + *filetime = LE64( (unixtime + 11644473600LL) * 10000000LL ); +} + +__pure int64_t fileTimeToUnixTime(const FILETIME *const ts) +{ + return LE64( *((const int64_t *const)ts) ) / 10000000LL - 11644473600LL; +} + + +/* + * Get's a product name with a GUID in host-endian order. + * List can be any list defined above. + */ +const char* getProductNameHE(const GUID *const guid, const KmsIdList *const List, ProdListIndex_t *const i) +{ + for (*i = 0; List[*i].name != NULL; (*i)++) + { + if (IsEqualGUID(guid, &List[*i].guid)) + return List[*i].name; + } + + return "Unknown"; +} + + +/* + * same as getProductnameHE except GUID is in little-endian (network) order + */ +const char* getProductNameLE(const GUID *const guid, const KmsIdList *const List, ProdListIndex_t *const i) +{ + #if __BYTE_ORDER != __LITTLE_ENDIAN + GUID HeGUID; + LEGUID(&HeGUID, guid); + return getProductNameHE(&HeGUID, List, i); + #else + return getProductNameHE(guid, List, i); + #endif +} + + +#ifndef NO_RANDOM_EPID +// formats an int with a fixed number of digits with leading zeros (helper for ePID generation) +static char* itoc(char *const c, const int i, uint_fast8_t digits) +{ + char formatString[8]; + if (digits > 9) digits = 0; + strcpy(formatString,"%"); + + if (digits) + { + formatString[1] = '0'; + formatString[2] = digits | 0x30; + formatString[3] = 0; + } + + strcat(formatString, "u"); + sprintf(c, formatString, i); + return c; +} + +static int getRandomServerType() +{ +# ifndef USE_MSRPC + if (!UseRpcBTFN) +# endif // USE_MSRPC + { + // This isn't possible at all, e.g. KMS host on XP + return rand() % (int)_countof(HostOS); + } +# ifndef USE_MSRPC + else + { + // return 9200/9600/10240 if NDR64 is in use, otherwise 6002/7601 + if (UseRpcNDR64) return (rand() % 3) + 2; + return (rand() % 2); + } +# endif // USE_MSRPC +} + + +/* + * Generates a random ePID + */ +static void generateRandomPid(const int index, char *const szPid, int serverType, int16_t lang) +{ + int clientApp; + char numberBuffer[12]; + + if (serverType < 0 || serverType >= (int)_countof(HostOS)) + { + serverType = getRandomServerType(); + } + + strcpy(szPid, itoc(numberBuffer, HostOS[serverType].Type, 5)); + strcat(szPid, "-"); + + if (index == 2) + clientApp = 3; + else if (index == 1) + clientApp = 2; + else + clientApp = serverType == 3 /*change if HostOS changes*/ ? 1 : 0; + + strcat(szPid, itoc(numberBuffer, pkeyconfig[clientApp].GroupID, 5)); + strcat(szPid, "-"); + + int keyId = (rand32() % (pkeyconfig[clientApp].RangeMax - pkeyconfig[clientApp].RangeMin)) + pkeyconfig[clientApp].RangeMin; + strcat(szPid, itoc(numberBuffer, keyId / 1000000, 3)); + strcat(szPid, "-"); + strcat(szPid, itoc(numberBuffer, keyId % 1000000, 6)); + strcat(szPid, "-03-"); + + if (lang < 0) lang = LcidList[rand() % _countof(LcidList)]; + strcat(szPid, itoc(numberBuffer, lang, 0)); + strcat(szPid, "-"); + + strcat(szPid, itoc(numberBuffer, HostOS[serverType].Build, 0)); + strcat(szPid, ".0000-"); + +# define minTime ((time_t)1436958000) // Release Date Windows 10 RTM Escrow + + time_t maxTime, kmsTime; + time(&maxTime); + + if (maxTime < minTime) // Just in case the system time is < 07/15/2015 1:00 pm + maxTime = (time_t)BUILD_TIME; + + kmsTime = (rand32() % (maxTime - minTime)) + minTime; +# undef minTime + + struct tm *pidTime; + pidTime = gmtime(&kmsTime); + + strcat(szPid, itoc(numberBuffer, pidTime->tm_yday, 3)); + strcat(szPid, itoc(numberBuffer, pidTime->tm_year + 1900, 4)); +} + + +/* + * Generates random ePIDs and stores them if not already read from ini file. + * For use with randomization level 1 + */ +void randomPidInit() +{ + ProdListIndex_t i; + + int serverType = getRandomServerType(); + int16_t lang = Lcid ? Lcid : LcidList[rand() % _countof(LcidList)]; + + for (i = 0; i < _countof(AppList) - 1; i++) + { + if (KmsResponseParameters[i].Epid) continue; + + char Epid[PID_BUFFER_SIZE]; + + generateRandomPid(i, Epid, serverType, lang); + KmsResponseParameters[i].Epid = (const char*)vlmcsd_malloc(strlen(Epid) + 1); + + strcpy((char*)KmsResponseParameters[i].Epid, Epid); + + #ifndef NO_LOG + KmsResponseParameters[i].EpidSource = "randomized at program start"; + #endif // NO_LOG + } +} + +#endif // NO_RANDOM_EPID + + +#ifndef NO_LOG +/* + * Logs a Request + */ +static void logRequest(const REQUEST *const baseRequest) +{ + const char *productName; + char clientname[64]; + ProdListIndex_t index; + + #ifndef NO_EXTENDED_PRODUCT_LIST + productName = getProductNameLE(&baseRequest->ActID, ExtendedProductList, &index); + if (++index >= (int)_countof(ExtendedProductList)) + #endif // NO_EXTENDED_PRODUCT_LIST + { + #ifndef NO_BASIC_PRODUCT_LIST + productName = getProductNameLE(&baseRequest->KMSID, ProductList, &index); + if (++index >= (int)_countof(ProductList)) + #endif // NO_BASIC_PRODUCT_LIST + { + productName = getProductNameLE(&baseRequest->AppID, AppList, &index); + } + } + + #ifndef NO_VERBOSE_LOG + if (logverbose) + { + logger("<<< Incoming KMS request\n"); + logRequestVerbose(baseRequest, &logger); + } + else + { + #endif // NO_VERBOSE_LOG + ucs2_to_utf8(baseRequest->WorkstationName, clientname, 64, 64); + logger("KMS v%i.%i request from %s for %s\n", LE16(baseRequest->MajorVer), LE16(baseRequest->MinorVer), clientname, productName); + #ifndef NO_VERBOSE_LOG + } + #endif // NO_VERBOSE_LOG +} +#endif // NO_LOG + + +/* + * Converts a utf-8 ePID string to UCS-2 and writes it to a RESPONSE struct + */ +static void getEpidFromString(RESPONSE *const Response, const char *const pid) +{ + size_t length = utf8_to_ucs2(Response->KmsPID, pid, PID_BUFFER_SIZE, PID_BUFFER_SIZE * 3); + Response->PIDSize = LE32(((unsigned int )length + 1) << 1); +} + + +/* + * get ePID from appropriate source + */ +static void getEpid(RESPONSE *const baseResponse, const char** EpidSource, const ProdListIndex_t index, BYTE *const HwId) +{ + const char* pid; + if (KmsResponseParameters[index].Epid == NULL) + { + #ifndef NO_RANDOM_EPID + if (RandomizationLevel == 2) + { + char szPid[PID_BUFFER_SIZE]; + generateRandomPid(index, szPid, -1, Lcid ? Lcid : -1); + pid = szPid; + + #ifndef NO_LOG + *EpidSource = "randomized on every request"; + #endif // NO_LOG + } + else + #endif // NO_RANDOM_EPID + { + pid = AppList[index].pid; + #ifndef NO_LOG + *EpidSource = "vlmcsd default"; + #endif // NO_LOG + } + } + else + { + pid = KmsResponseParameters[index].Epid; + + if (HwId && KmsResponseParameters[index].HwId != NULL) + memcpy(HwId, KmsResponseParameters[index].HwId, sizeof(((RESPONSE_V6 *)0)->HwId)); + + #ifndef NO_LOG + *EpidSource = KmsResponseParameters[index].EpidSource; + #endif // NO_LOG + } + getEpidFromString(baseResponse, pid); +} + + +#if !defined(NO_LOG) && defined(_PEDANTIC) +static BOOL CheckVersion4Uuid(const GUID *const guid, const char *const szGuidName) +{ + if (LE16(guid->Data3) >> 12 != 4 || guid->Data4[0] >> 6 != 2) + { + logger("Warning: %s does not conform to version 4 UUID according to RFC 4122\n", szGuidName); + return FALSE; + } + return TRUE; +} + + +static void CheckRequest(const REQUEST *const Request) +{ + CheckVersion4Uuid(&Request->CMID, "Client machine ID"); + CheckVersion4Uuid(&Request->AppID, "Application ID"); + CheckVersion4Uuid(&Request->KMSID, "Server SKU ID"); + CheckVersion4Uuid(&Request->ActID, "Client SKU ID"); + + if (LE32(Request->IsClientVM) > 1) + logger("Warning: Virtual Machine field in request must be 0 or 1 but is %u\n", LE32(Request->IsClientVM)); + + if (LE32(Request->LicenseStatus) > 6 ) + logger("Warning: License status must be between 0 and 6 but is %u\n", LE32(Request->LicenseStatus)); +} +#endif // !defined(NO_LOG) && defined(_PEDANTIC) + + +#ifndef NO_LOG +/* + * Logs the Response + */ +static void logResponse(const RESPONSE *const baseResponse, const BYTE *const hwId, const char *const EpidSource) +{ + char utf8pid[PID_BUFFER_SIZE * 3]; + ucs2_to_utf8(baseResponse->KmsPID, utf8pid, PID_BUFFER_SIZE, PID_BUFFER_SIZE * 3); + + #ifndef NO_VERBOSE_LOG + if (!logverbose) + { + #endif // NO_VERBOSE_LOG + logger("Sending ePID (%s): %s\n", EpidSource, utf8pid); + #ifndef NO_VERBOSE_LOG + } + else + { + logger(">>> Sending response, ePID source = %s\n", EpidSource); + logResponseVerbose(utf8pid, hwId, baseResponse, &logger); + } + #endif // NO_VERBOSE_LOG + +} +#endif + + +/* + * Creates the unencrypted base response + */ +static BOOL __stdcall CreateResponseBaseCallback(const REQUEST *const baseRequest, RESPONSE *const baseResponse, BYTE *const hwId, const char* const ipstr) +{ + const char* EpidSource; + #ifndef NO_LOG + logRequest(baseRequest); + #ifdef _PEDANTIC + CheckRequest(baseRequest); + #endif // _PEDANTIC + #endif // NO_LOG + + ProdListIndex_t index; + + getProductNameLE(&baseRequest->AppID, AppList, &index); + + if (index >= _countof(AppList) - 1) index = 0; //default to Windows + + getEpid(baseResponse, &EpidSource, index, hwId); + + baseResponse->Version = baseRequest->Version; + + memcpy(&baseResponse->CMID, &baseRequest->CMID, sizeof(GUID)); + memcpy(&baseResponse->ClientTime, &baseRequest->ClientTime, sizeof(FILETIME)); + + baseResponse->Count = LE32(LE32(baseRequest->N_Policy) << 1); + baseResponse->VLActivationInterval = LE32(VLActivationInterval); + baseResponse->VLRenewalInterval = LE32(VLRenewalInterval); + + #ifndef NO_LOG + logResponse(baseResponse, hwId, EpidSource); + #endif // NO_LOG + + return !0; +} + +RequestCallback_t CreateResponseBase = &CreateResponseBaseCallback; + +////TODO: Move to helpers.c +void get16RandomBytes(void* ptr) +{ + int i; + for (i = 0; i < 4; i++) ((DWORD*)ptr)[i] = rand32(); +} + + +/* + * Creates v4 response + */ +size_t CreateResponseV4(REQUEST_V4 *const request_v4, BYTE *const responseBuffer, const char* const ipstr) +{ + RESPONSE_V4* Response = (RESPONSE_V4*)responseBuffer; + + if ( !CreateResponseBase(&request_v4->RequestBase, &Response->ResponseBase, NULL, ipstr) ) return 0; + + DWORD pidSize = LE32(Response->ResponseBase.PIDSize); + BYTE* postEpidPtr = responseBuffer + V4_PRE_EPID_SIZE + pidSize; + memmove(postEpidPtr, &Response->ResponseBase.CMID, V4_POST_EPID_SIZE); + + size_t encryptSize = V4_PRE_EPID_SIZE + V4_POST_EPID_SIZE + pidSize; + AesCmacV4(responseBuffer, encryptSize, responseBuffer + encryptSize); + + return encryptSize + sizeof(Response->MAC); +} + +/* +// Workaround for buggy GCC 4.2/4.3 +#if defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ < 4) +__attribute__((noinline)) +#endif +__pure static uint64_t TimestampInterval(void *ts) +{ + return ( GET_UA64LE(ts) / TIME_C1 ) * TIME_C2 + TIME_C3; +}*/ + + +/* + * Creates the HMAC for v6 + */ +static int_fast8_t CreateV6Hmac(BYTE *const encrypt_start, const size_t encryptSize, int_fast8_t tolerance) +{ + BYTE hash[32]; +# define halfHashSize (sizeof(hash) >> 1) + uint64_t timeSlot; + BYTE *responseEnd = encrypt_start + encryptSize; + + // This is the time from the response + FILETIME* ft = (FILETIME*)(responseEnd - V6_POST_EPID_SIZE + sizeof(((RESPONSE*)0)->CMID)); + + // Generate a time slot that changes every 4.11 hours. + // Request and repsonse time must match +/- 1 slot. + // When generating a response tolerance must be 0. + // If verifying the hash, try tolerance -1, 0 and +1. One of them must match. + + timeSlot = LE64( (GET_UA64LE(ft) / TIME_C1 * TIME_C2 + TIME_C3) + (tolerance * TIME_C1) ); + + // The time slot is hashed with SHA256 so it is not so obvious that it is time + Sha256((BYTE*) &timeSlot, sizeof(timeSlot), hash); + + // The last 16 bytes of the hashed time slot are the actual HMAC key + if (!Sha256Hmac + ( + hash + halfHashSize, // Use last 16 bytes of SHA256 as HMAC key + encrypt_start, // hash only the encrypted part of the v6 response + encryptSize - sizeof(((RESPONSE_V6*)0)->HMAC), // encryptSize minus the HMAC itself + hash // use same buffer for resulting hash where the key came from + )) + { + return FALSE; + } + + memcpy(responseEnd - sizeof(((RESPONSE_V6*)0)->HMAC), hash + halfHashSize, halfHashSize); + return TRUE; +# undef halfHashSize +} + + +/* + * Creates v5 or v6 response + */ +size_t CreateResponseV6(REQUEST_V6 *restrict request_v6, BYTE *const responseBuffer, const char* const ipstr) +{ + // The response will be created in a fixed sized struct to + // avoid unaligned access macros and packed structs on RISC systems + // which largely increase code size. + // + // The fixed sized struct with 64 WCHARs for the ePID will be converted + // to a variable sized struct later and requires unaligned access macros. + + RESPONSE_V6* Response = (RESPONSE_V6*)responseBuffer; + RESPONSE* baseResponse = &Response->ResponseBase; + + #ifdef _DEBUG + RESPONSE_V6_DEBUG* xxx = (RESPONSE_V6_DEBUG*)responseBuffer; + #endif + + static const BYTE DefaultHwid[8] = { HWID }; + int_fast8_t v6 = LE16(request_v6->MajorVer) > 5; + AesCtx aesCtx; + + AesInitKey(&aesCtx, v6 ? AesKeyV6 : AesKeyV5, v6, AES_KEY_BYTES); + AesDecryptCbc(&aesCtx, NULL, request_v6->IV, V6_DECRYPT_SIZE); + + // get random salt and SHA256 it + get16RandomBytes(Response->RandomXoredIVs); + Sha256(Response->RandomXoredIVs, sizeof(Response->RandomXoredIVs), Response->Hash); + + if (v6) // V6 specific stuff + { + // In v6 a random IV is generated + Response->Version = request_v6->Version; + get16RandomBytes(Response->IV); + + // pre-fill with default HwId (not required for v5) + memcpy(Response->HwId, DefaultHwid, sizeof(Response->HwId)); + + // Just copy decrypted request IV (using Null IV) here. Note this is identical + // to XORing non-decrypted request and reponse IVs + memcpy(Response->XoredIVs, request_v6->IV, sizeof(Response->XoredIVs)); + } + else // V5 specific stuff + { + // In v5 IVs of request and response must be identical (MS client checks this) + // The following memcpy copies Version and IVs at once + memcpy(Response, request_v6, V6_UNENCRYPTED_SIZE); + } + + // Xor Random bytes with decrypted request IV + XorBlock(request_v6->IV, Response->RandomXoredIVs); + + // Get the base response + if ( !CreateResponseBase(&request_v6->RequestBase, baseResponse, Response->HwId, ipstr) ) return 0; + + // Convert the fixed sized struct into variable sized + DWORD pidSize = LE32(baseResponse->PIDSize); + BYTE* postEpidPtr = responseBuffer + V6_PRE_EPID_SIZE + pidSize; + size_t post_epid_size = v6 ? V6_POST_EPID_SIZE : V5_POST_EPID_SIZE; + + memmove(postEpidPtr, &baseResponse->CMID, post_epid_size); + + // number of bytes to encrypt + size_t encryptSize = + V6_PRE_EPID_SIZE + - sizeof(Response->Version) + + pidSize + + post_epid_size; + + //AesDecryptBlock(&aesCtx, Response->IV); + if (v6 && !CreateV6Hmac(Response->IV, encryptSize, 0)) return 0; + + // Padding auto handled by encryption func + AesEncryptCbc(&aesCtx, NULL, Response->IV, &encryptSize); + + return encryptSize + sizeof(Response->Version); +} + + +// Create Hashed KMS Client Request Data for KMS Protocol Version 4 +BYTE *CreateRequestV4(size_t *size, const REQUEST* requestBase) +{ + *size = sizeof(REQUEST_V4); + + // Build a proper KMS client request data + BYTE *request = (BYTE *)vlmcsd_malloc(sizeof(REQUEST_V4)); + + // Temporary Pointer for access to REQUEST_V4 structure + REQUEST_V4 *request_v4 = (REQUEST_V4 *)request; + + // Set KMS Client Request Base + memcpy(&request_v4->RequestBase, requestBase, sizeof(REQUEST)); + + // Generate Hash Signature + AesCmacV4(request, sizeof(REQUEST), request_v4->MAC); + + // Return Request Data + return request; +} + + +// Create Encrypted KMS Client Request Data for KMS Protocol Version 6 +BYTE* CreateRequestV6(size_t *size, const REQUEST* requestBase) +{ + *size = sizeof(REQUEST_V6); + + // Temporary Pointer for access to REQUEST_V5 structure + REQUEST_V6 *request = (REQUEST_V6 *)vlmcsd_malloc(sizeof(REQUEST_V6)); + + // KMS Protocol Version + request->Version = requestBase->Version; + + // Initialize the IV + get16RandomBytes(request->IV); + + // Set KMS Client Request Base + memcpy(&request->RequestBase, requestBase, sizeof(REQUEST)); + + // Encrypt KMS Client Request + size_t encryptSize = sizeof(request->RequestBase); + AesCtx Ctx; + int_fast8_t v6 = LE16(request->MajorVer) > 5; + AesInitKey(&Ctx, v6 ? AesKeyV6 : AesKeyV5, v6, 16); + AesEncryptCbc(&Ctx, request->IV, (BYTE*)(&request->RequestBase), &encryptSize); + + // Return Proper Request Data + return (BYTE*)request; +} + + +/* + * Checks whether Length of ePID is valid + */ +static uint8_t checkPidLength(const RESPONSE *const responseBase) +{ + unsigned int i; + + if (LE32(responseBase->PIDSize) > (PID_BUFFER_SIZE << 1)) return FALSE; + if (responseBase->KmsPID[(LE32(responseBase->PIDSize) >> 1) - 1]) return FALSE; + + for (i = 0; i < (LE32(responseBase->PIDSize) >> 1) - 2; i++) + { + if (!responseBase->KmsPID[i]) return FALSE; + } + + return TRUE; +} + + +/* + * "Decrypts" a KMS v4 response. Actually just copies to a fixed size buffer + */ +RESPONSE_RESULT DecryptResponseV4(RESPONSE_V4* response_v4, const int responseSize, BYTE* const rawResponse, const BYTE* const rawRequest) +{ + int copySize = + V4_PRE_EPID_SIZE + + (LE32(((RESPONSE_V4*)rawResponse)->ResponseBase.PIDSize) <= PID_BUFFER_SIZE << 1 ? + LE32(((RESPONSE_V4*)rawResponse)->ResponseBase.PIDSize) : + PID_BUFFER_SIZE << 1); + + int messageSize = copySize + V4_POST_EPID_SIZE; + + memcpy(response_v4, rawResponse, copySize); + memcpy(&response_v4->ResponseBase.CMID, rawResponse + copySize, responseSize - copySize); + + // ensure PID is null terminated + response_v4->ResponseBase.KmsPID[PID_BUFFER_SIZE-1] = 0; + + uint8_t* mac = rawResponse + messageSize; + AesCmacV4(rawResponse, messageSize, mac); + + REQUEST_V4* request_v4 = (REQUEST_V4*)rawRequest; + RESPONSE_RESULT result; + + result.mask = (DWORD)~0; + result.PidLengthOK = checkPidLength((RESPONSE*)rawResponse); + result.VersionOK = response_v4->ResponseBase.Version == request_v4->RequestBase.Version; + result.HashOK = !memcmp(&response_v4->MAC, mac, sizeof(response_v4->MAC)); + result.TimeStampOK = !memcmp(&response_v4->ResponseBase.ClientTime, &request_v4->RequestBase.ClientTime, sizeof(FILETIME)); + result.ClientMachineIDOK = !memcmp(&response_v4->ResponseBase.CMID, &request_v4->RequestBase.CMID, sizeof(GUID)); + result.effectiveResponseSize = responseSize; + result.correctResponseSize = sizeof(RESPONSE_V4) - sizeof(response_v4->ResponseBase.KmsPID) + LE32(response_v4->ResponseBase.PIDSize); + + return result; +} + + +static RESPONSE_RESULT VerifyResponseV6(RESPONSE_RESULT result, const AesCtx* Ctx, RESPONSE_V6* response_v6, REQUEST_V6* request_v6, BYTE* const rawResponse) +{ + // Check IVs + result.IVsOK = !memcmp // In V6 the XoredIV is actually the request IV + ( + response_v6->XoredIVs, + request_v6->IV, + sizeof(response_v6->XoredIVs) + ); + + result.IVnotSuspicious = !!memcmp // If IVs are identical, it is obviously an emulator + ( + request_v6->IV, + response_v6->IV, + sizeof(request_v6->IV) + ); + + // Check Hmac + int_fast8_t tolerance; + BYTE OldHmac[sizeof(response_v6->HMAC)]; + + result.HmacSha256OK = FALSE; + + memcpy // Save received HMAC to compare with calculated HMAC later + ( + OldHmac, + response_v6->HMAC, + sizeof(response_v6->HMAC) + ); + + //AesEncryptBlock(Ctx, Response_v6->IV); // CreateV6Hmac needs original IV as received over the network + + for (tolerance = -1; tolerance < 2; tolerance++) + { + CreateV6Hmac + ( + rawResponse + sizeof(response_v6->Version), // Pointer to start of the encrypted part of the response + (size_t)result.correctResponseSize - V6_UNENCRYPTED_SIZE, // size of the encrypted part + tolerance // tolerance -1, 0, or +1 + ); + + if + (( + result.HmacSha256OK = !memcmp // Compare both HMACs + ( + OldHmac, + rawResponse + (size_t)result.correctResponseSize - sizeof(response_v6->HMAC), + sizeof(OldHmac) + ) + )) + { + break; + } + } + return result; +} + + +static RESPONSE_RESULT VerifyResponseV5(RESPONSE_RESULT result, REQUEST_V5* request_v5, RESPONSE_V5* response_v5) +{ + // Check IVs: in V5 (and only v5) request and response IVs must match + result.IVsOK = !memcmp(request_v5->IV, response_v5->IV, sizeof(request_v5->IV)); + + // V5 has no Hmac, always set to TRUE + result.HmacSha256OK = TRUE; + + return result; +} + + +/* + * Decrypts a KMS v5 or v6 response received from a server. + * hwid must supply a valid 16 byte buffer for v6. hwid is ignored in v5 + */ +RESPONSE_RESULT DecryptResponseV6(RESPONSE_V6* response_v6, int responseSize, BYTE* const response, const BYTE* const rawRequest, BYTE* hwid) +{ + RESPONSE_RESULT result; + result.mask = ~0; // Set all bits in the results mask to 1. Assume success first. + result.effectiveResponseSize = responseSize; + + int copySize1 = + sizeof(response_v6->Version); + + // Decrypt KMS Server Response (encrypted part starts after RequestIV) + responseSize -= copySize1; + + AesCtx Ctx; + int_fast8_t v6 = LE16(((RESPONSE_V6*)response)->MajorVer) > 5; + + AesInitKey(&Ctx, v6 ? AesKeyV6 : AesKeyV5, v6, AES_KEY_BYTES); + AesDecryptCbc(&Ctx, NULL, response + copySize1, responseSize); + + // Check padding + BYTE* lastPadByte = response + (size_t)result.effectiveResponseSize - 1; + + // Must be from 1 to 16 + if (!*lastPadByte || *lastPadByte > AES_BLOCK_BYTES) + { + result.DecryptSuccess = FALSE; + return result; + } + + // Check if pad bytes are all the same + BYTE* padByte; + for (padByte = lastPadByte - *lastPadByte + 1; padByte < lastPadByte; padByte++) + if (*padByte != *lastPadByte) + { + result.DecryptSuccess = FALSE; + return result; + } + + // Add size of Version, KmsPIDLen and variable size PID + DWORD pidSize = LE32(((RESPONSE_V6*) response)->ResponseBase.PIDSize); + + copySize1 += + V6_UNENCRYPTED_SIZE + + sizeof(response_v6->ResponseBase.PIDSize) + + (pidSize <= PID_BUFFER_SIZE << 1 ? pidSize : PID_BUFFER_SIZE << 1); + + // Copy part 1 of response up to variable sized PID + memcpy(response_v6, response, copySize1); + + // ensure PID is null terminated + response_v6->ResponseBase.KmsPID[PID_BUFFER_SIZE - 1] = 0; + + // Copy part 2 + size_t copySize2 = v6 ? V6_POST_EPID_SIZE : V5_POST_EPID_SIZE; + memcpy(&response_v6->ResponseBase.CMID, response + copySize1, copySize2); + + // Decrypting the response is finished here. Now we check the results for validity + // A basic client doesn't need the stuff below this comment but we want to use vlmcs + // as a debug tool for KMS emulators. + + REQUEST_V6* request_v6 = (REQUEST_V6*) rawRequest; + DWORD decryptSize = sizeof(request_v6->IV) + sizeof(request_v6->RequestBase) + sizeof(request_v6->Pad); + + AesDecryptCbc(&Ctx, NULL, request_v6->IV, decryptSize); + + // Check that all version informations are the same + result.VersionOK = + request_v6->Version == response_v6->ResponseBase.Version && + request_v6->Version == response_v6->Version && + request_v6->Version == request_v6->RequestBase.Version; + + // Check Base Request + result.PidLengthOK = checkPidLength(&((RESPONSE_V6*) response)->ResponseBase); + result.TimeStampOK = !memcmp(&response_v6->ResponseBase.ClientTime, &request_v6->RequestBase.ClientTime, sizeof(FILETIME)); + result.ClientMachineIDOK = IsEqualGUID(&response_v6->ResponseBase.CMID, &request_v6->RequestBase.CMID); + + // Rebuild Random Key and Sha256 Hash + BYTE HashVerify[sizeof(response_v6->Hash)]; + BYTE RandomKey[sizeof(response_v6->RandomXoredIVs)]; + + memcpy(RandomKey, request_v6->IV, sizeof(RandomKey)); + XorBlock(response_v6->RandomXoredIVs, RandomKey); + Sha256(RandomKey, sizeof(RandomKey), HashVerify); + + result.HashOK = !memcmp(response_v6->Hash, HashVerify, sizeof(HashVerify)); + + // size before encryption (padding not included) + result.correctResponseSize = + (v6 ? sizeof(RESPONSE_V6) : sizeof(RESPONSE_V5)) + - sizeof(response_v6->ResponseBase.KmsPID) + + LE32(response_v6->ResponseBase.PIDSize); + + // Version specific stuff + if (v6) + { + // Copy the HwId + memcpy(hwid, response_v6->HwId, sizeof(response_v6->HwId)); + + // Verify the V6 specific part of the response + result = VerifyResponseV6(result, &Ctx, response_v6, request_v6, response); + } + else // V5 + { + // Verify the V5 specific part of the response + result = VerifyResponseV5(result, request_v6, (RESPONSE_V5*)response_v6); + } + + // padded size after encryption + result.correctResponseSize += (~(result.correctResponseSize - sizeof(response_v6->ResponseBase.Version)) & 0xf) + 1; + + return result; +} + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "endian.h" + +#if defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN) \ + && defined(BS16) && defined(BS32) && defined(BS64) + +#else // ! defined(__BYTE_ORDER) + +void PUT_UAA64BE(void *p, unsigned long long v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + _p[ 0 ] = v >> 56; + _p[ 1 ] = v >> 48; + _p[ 2 ] = v >> 40; + _p[ 3 ] = v >> 32; + _p[ 4 ] = v >> 24; + _p[ 5 ] = v >> 16; + _p[ 6 ] = v >> 8; + _p[ 7 ] = v; +} + +void PUT_UAA32BE(void *p, unsigned int v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + _p[ 0 ] = v >> 24; + _p[ 1 ] = v >> 16; + _p[ 2 ] = v >> 8; + _p[ 3 ] = v; +} + +void PUT_UAA16BE(void *p, unsigned short v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + _p[ 0 ] = v >> 8; + _p[ 1 ] = v; +} + + +void PUT_UAA64LE(void *p, unsigned long long v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + _p[ 0 ] = v; + _p[ 1 ] = v >> 8; + _p[ 2 ] = v >> 16; + _p[ 3 ] = v >> 24; + _p[ 4 ] = v >> 32; + _p[ 5 ] = v >> 40; + _p[ 6 ] = v >> 48; + _p[ 7 ] = v >> 56; +} + +void PUT_UAA32LE(void *p, unsigned int v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + _p[ 0 ] = v; + _p[ 1 ] = v >> 8; + _p[ 2 ] = v >> 16; + _p[ 3 ] = v >> 24; +} + +void PUT_UAA16LE(void *p, unsigned short v, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + _p[ 0 ] = v; + _p[ 1 ] = v >> 8; +} + + +unsigned long long GET_UAA64BE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + return + (unsigned long long)_p[ 0 ] << 56 | + (unsigned long long)_p[ 1 ] << 48 | + (unsigned long long)_p[ 2 ] << 40 | + (unsigned long long)_p[ 3 ] << 32 | + (unsigned long long)_p[ 4 ] << 24 | + (unsigned long long)_p[ 5 ] << 16 | + (unsigned long long)_p[ 6 ] << 8 | + (unsigned long long)_p[ 7 ]; + +} + +unsigned int GET_UAA32BE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + return + (unsigned int)_p[ 0 ] << 24 | + (unsigned int)_p[ 1 ] << 16 | + (unsigned int)_p[ 2 ] << 8 | + (unsigned int)_p[ 3 ]; +} + +unsigned short GET_UAA16BE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + return + (unsigned short)_p[ 0 ] << 8 | + (unsigned short)_p[ 1 ]; +} + + +unsigned long long GET_UAA64LE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i]; + return + (unsigned long long)_p[ 0 ] | + (unsigned long long)_p[ 1 ] << 8 | + (unsigned long long)_p[ 2 ] << 16 | + (unsigned long long)_p[ 3 ] << 24 | + (unsigned long long)_p[ 4 ] << 32 | + (unsigned long long)_p[ 5 ] << 40 | + (unsigned long long)_p[ 6 ] << 48 | + (unsigned long long)_p[ 7 ] << 56; + +} + +unsigned int GET_UAA32LE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i]; + return + (unsigned int)_p[ 0 ] | + (unsigned int)_p[ 1 ] << 8 | + (unsigned int)_p[ 2 ] << 16 | + (unsigned int)_p[ 3 ] << 24; +} + +unsigned short GET_UAA16LE(void *p, unsigned int i) +{ + unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i]; + return + (unsigned short)_p[ 0 ] | + (unsigned short)_p[ 1 ] << 8; +} + + +unsigned short BE16(unsigned short x) +{ + return GET_UAA16BE(&x, 0); +} + +unsigned short LE16(unsigned short x) +{ + return GET_UAA16LE(&x, 0); +} + +unsigned int BE32(unsigned int x) +{ + return GET_UAA32BE(&x, 0); +} + +unsigned int LE32(unsigned int x) +{ + return GET_UAA32LE(&x, 0); +} + +unsigned long long BE64(unsigned long long x) +{ + return GET_UAA64BE(&x, 0); +} + +inline unsigned long long LE64(unsigned long long x) +{ + return GET_UAA64LE(&x, 0); +} + +#endif // defined(__BYTE_ORDER) +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE +#endif // _DEFAULT_SOURCE + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "output.h" +#include "shared_globals.h" +#include "endian.h" +#include "helpers.h" + +#ifndef NO_LOG +static void vlogger(const char *message, va_list args) +{ + FILE *log; + + #ifdef _NTSERVICE + if (!IsNTService && logstdout) log = stdout; + #else + if (logstdout) log = stdout; + #endif + else + { + if (fn_log == NULL) return; + + #ifndef _WIN32 + if (!strcmp(fn_log, "syslog")) + { + openlog("vlmcsd", LOG_CONS | LOG_PID, LOG_USER); + + ////PORTABILITY: vsyslog is not in Posix but virtually all Unixes have it + vsyslog(LOG_INFO, message, args); + + closelog(); + return; + } + #endif // _WIN32 + + log = fopen(fn_log, "a"); + if ( !log ) return; + } + + time_t now = time(0); + + #ifdef USE_THREADS + char mbstr[2048]; + #else + char mbstr[24]; + #endif + + strftime(mbstr, sizeof(mbstr), "%Y-%m-%d %X", localtime(&now)); + + #ifndef USE_THREADS + + fprintf(log, "%s: ", mbstr); + vfprintf(log, message, args); + fflush(log); + + #else // USE_THREADS + + // We write everything to a string before we really log inside the critical section + // so formatting the output can be concurrent + strcat(mbstr, ": "); + int len = strlen(mbstr); + vsnprintf(mbstr + len, sizeof(mbstr) - len, message, args); + + lock_mutex(&logmutex); + fputs(mbstr, log); + fflush(log); + unlock_mutex(&logmutex); + + #endif // USE_THREADS + if (log != stdout) fclose(log); +} + + +// Always sends to log output +int logger(const char *const fmt, ...) +{ + va_list args; + + va_start(args, fmt); + vlogger(fmt, args); + va_end(args); + return 0; +} + +#endif //NO_LOG + + +// Output to stderr if it is available or to log otherwise (e.g. if running as daemon/service) +void printerrorf(const char *const fmt, ...) +{ + va_list arglist; + + va_start(arglist, fmt); + + #ifndef NO_LOG + #ifdef _NTSERVICE + if (InetdMode || IsNTService) + #else // !_NTSERVICE + if (InetdMode) + #endif // NTSERVIICE + vlogger(fmt, arglist); + else + #endif //NO_LOG + { + vfprintf(stderr, fmt, arglist); + fflush(stderr); + } + + va_end(arglist); +} + + +// Always output to stderr +int errorout(const char* fmt, ...) +{ + va_list args; + + va_start(args, fmt); + int i = vfprintf(stderr, fmt, args); + va_end(args); + fflush(stderr); + + return i; +} + + +static const char *LicenseStatusText[] = +{ + "Unlicensed", "Licensed", "OOB grace", "OOT grace", "Non-Genuine", "Notification", "Extended grace" +}; + + +void uuid2StringLE(const GUID *const guid, char *const string) +{ + sprintf(string, + #ifdef _WIN32 + "%08x-%04x-%04x-%04x-%012I64x", + #else + "%08x-%04x-%04x-%04x-%012llx", + #endif + (unsigned int)LE32( guid->Data1 ), + (unsigned int)LE16( guid->Data2 ), + (unsigned int)LE16( guid->Data3 ), + (unsigned int)BE16( *(uint16_t*)guid->Data4 ), + (unsigned long long)BE64(*(uint64_t*)(guid->Data4)) & 0xffffffffffffLL + ); +} + + +void logRequestVerbose(const REQUEST *const Request, const PRINTFUNC p) +{ + char guidBuffer[GUID_STRING_LENGTH + 1]; + char WorkstationBuffer[3 * WORKSTATION_NAME_BUFFER]; + const char *productName; + ProdListIndex_t index; + + p("Protocol version : %u.%u\n", LE16(Request->MajorVer), LE16(Request->MinorVer)); + p("Client is a virtual machine : %s\n", LE32(Request->VMInfo) ? "Yes" : "No"); + p("Licensing status : %u (%s)\n", (uint32_t)LE32(Request->LicenseStatus), LE32(Request->LicenseStatus) < _countof(LicenseStatusText) ? LicenseStatusText[LE32(Request->LicenseStatus)] : "Unknown"); + p("Remaining time (0 = forever) : %i minutes\n", (uint32_t)LE32(Request->BindingExpiration)); + + uuid2StringLE(&Request->AppID, guidBuffer); + productName = getProductNameLE(&Request->AppID, AppList, &index); + p("Application ID : %s (%s)\n", guidBuffer, productName); + + uuid2StringLE(&Request->ActID, guidBuffer); + + #ifndef NO_EXTENDED_PRODUCT_LIST + productName = getProductNameLE(&Request->ActID, ExtendedProductList, &index); + #else + productName = "Unknown"; + #endif + + p("Activation ID (Product) : %s (%s)\n", guidBuffer, productName); + + uuid2StringLE(&Request->KMSID, guidBuffer); + + #ifndef NO_BASIC_PRODUCT_LIST + productName = getProductNameLE(&Request->KMSID, ProductList, &index); + #else + productName = "Unknown"; + #endif + + p("Key Management Service ID : %s (%s)\n", guidBuffer, productName); + + uuid2StringLE(&Request->CMID, guidBuffer); + p("Client machine ID : %s\n", guidBuffer); + + uuid2StringLE(&Request->CMID_prev, guidBuffer); + p("Previous client machine ID : %s\n", guidBuffer); + + + char mbstr[64]; + time_t st; + st = fileTimeToUnixTime(&Request->ClientTime); + strftime(mbstr, sizeof(mbstr), "%Y-%m-%d %X", gmtime(&st)); + p("Client request timestamp (UTC) : %s\n", mbstr); + + ucs2_to_utf8(Request->WorkstationName, WorkstationBuffer, WORKSTATION_NAME_BUFFER, sizeof(WorkstationBuffer)); + + p("Workstation name : %s\n", WorkstationBuffer); + p("N count policy (minimum clients): %u\n", (uint32_t)LE32(Request->N_Policy)); +} + + +void logResponseVerbose(const char *const ePID, const BYTE *const hwid, const RESPONSE *const response, const PRINTFUNC p) +{ + char guidBuffer[GUID_STRING_LENGTH + 1]; + //SYSTEMTIME st; + + p("Protocol version : %u.%u\n", (uint32_t)LE16(response->MajorVer), (uint32_t)LE16(response->MinorVer)); + p("KMS host extended PID : %s\n", ePID); + if (LE16(response->MajorVer) > 5) +# ifndef _WIN32 + p("KMS host Hardware ID : %016llX\n", (unsigned long long)BE64(*(uint64_t*)hwid)); +# else // _WIN32 + p("KMS host Hardware ID : %016I64X\n", (unsigned long long)BE64(*(uint64_t*)hwid)); +# endif // WIN32 + + uuid2StringLE(&response->CMID, guidBuffer); + p("Client machine ID : %s\n", guidBuffer); + + char mbstr[64]; + time_t st; + + st = fileTimeToUnixTime(&response->ClientTime); + strftime(mbstr, sizeof(mbstr), "%Y-%m-%d %X", gmtime(&st)); + p("Client request timestamp (UTC) : %s\n", mbstr); + + p("KMS host current active clients : %u\n", (uint32_t)LE32(response->Count)); + p("Renewal interval policy : %u\n", (uint32_t)LE32(response->VLRenewalInterval)); + p("Activation interval policy : %u\n", (uint32_t)LE32(response->VLActivationInterval)); +} + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "shared_globals.h" + +int global_argc, multi_argc = 0; +CARGV global_argv, multi_argv = NULL; +const char *const Version = VERSION; +DWORD VLActivationInterval = 60 * 2; // 2 hours +DWORD VLRenewalInterval = 60 * 24 * 7; // 7 days +int_fast8_t DisconnectImmediately = FALSE; +const char *const cIPv4 = "IPv4"; +const char *const cIPv6 = "IPv6"; + +#ifndef USE_MSRPC +int_fast8_t UseMultiplexedRpc = TRUE; +int_fast8_t UseRpcNDR64 = TRUE; +int_fast8_t UseRpcBTFN = TRUE; +#endif // USE_MSRPC + +#ifndef NO_SOCKETS +const char *defaultport = "1688"; +#endif // NO_SOCKETS + +KmsResponseParam_t KmsResponseParameters[MAX_KMSAPPS]; + +#if !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) +int_fast8_t IsRestarted = FALSE; +#endif // !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) + +#if !defined(NO_TIMEOUT) && !__minix__ +DWORD ServerTimeout = 30; +#endif // !defined(NO_TIMEOUT) && !__minix__ + +#if !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ +#ifdef USE_MSRPC +uint32_t MaxTasks = RPC_C_LISTEN_MAX_CALLS_DEFAULT; +#else // !USE_MSRPC +uint32_t MaxTasks = SEM_VALUE_MAX; +#endif // !USE_MSRPC +#endif // !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ + +#ifndef NO_LOG +char *fn_log = NULL; +int_fast8_t logstdout = 0; +#ifndef NO_VERBOSE_LOG +int_fast8_t logverbose = 0; +#endif // NO_VERBOSE_LOG +#endif // NO_LOG + +#ifndef NO_SOCKETS +int_fast8_t nodaemon = 0; +int_fast8_t InetdMode = 0; +#else +int_fast8_t nodaemon = 1; +int_fast8_t InetdMode = 1; +#endif + +#ifndef NO_RANDOM_EPID +int_fast8_t RandomizationLevel = 1; +uint16_t Lcid = 0; +#endif + +#ifndef NO_SOCKETS +SOCKET *SocketList; +int numsockets = 0; + +#if !defined(NO_LIMIT) && !__minix__ +#ifndef _WIN32 // Posix +sem_t *Semaphore; +#else // _WIN32 +HANDLE Semaphore; +#endif // _WIN32 + +#endif // !defined(NO_LIMIT) && !__minix__ +#endif // NO_SOCKETS + +#ifdef _NTSERVICE +int_fast8_t IsNTService = TRUE; +int_fast8_t ServiceShutdown = FALSE; +#endif // _NTSERVICE + +#ifndef NO_LOG +#ifdef USE_THREADS +#if !defined(_WIN32) && !defined(__CYGWIN__) +pthread_mutex_t logmutex = PTHREAD_MUTEX_INITIALIZER; +#else +CRITICAL_SECTION logmutex; +#endif // !defined(_WIN32) && !defined(__CYGWIN__) +#endif // USE_THREADS +#endif // NO_LOG + + + + + +/* + * Helper functions used by other modules + */ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef _WIN32 +#include +#endif // _WIN32 +#include +#include +#include +#include +#include "helpers.h" +#include "output.h" +#include "endian.h" +#include "shared_globals.h" + + +/* + * UCS2 <-> UTF-8 functions + * All functions use little endian UCS2 since we only need it to communicate with Windows via RPC + */ + +// Convert one character from UTF-8 to UCS2 +// Returns 0xffff, if utf-8 evaluates to > 0xfffe (outside basic multilingual pane) +WCHAR utf8_to_ucs2_char (const unsigned char *input, const unsigned char **end_ptr) +{ + *end_ptr = input; + if (input[0] == 0) + return ~0; + + if (input[0] < 0x80) { + *end_ptr = input + 1; + return LE16(input[0]); + } + + if ((input[0] & 0xE0) == 0xE0) { + + if (input[1] == 0 || input[2] == 0) + return ~0; + + *end_ptr = input + 3; + + return + LE16((input[0] & 0x0F)<<12 | + (input[1] & 0x3F)<<6 | + (input[2] & 0x3F)); + } + + if ((input[0] & 0xC0) == 0xC0) { + if (input[1] == 0) + return ~0; + + *end_ptr = input + 2; + + return + LE16((input[0] & 0x1F)<<6 | + (input[1] & 0x3F)); + } + return ~0; +} + +// Convert one character from UCS2 to UTF-8 +// Returns length of UTF-8 char (1, 2 or 3) or -1 on error (UTF-16 outside UCS2) +// char *utf8 must be large enough to hold 3 bytes +int ucs2_to_utf8_char (const WCHAR ucs2_le, char *utf8) +{ + const WCHAR ucs2 = LE16(ucs2_le); + + if (ucs2 < 0x80) { + utf8[0] = ucs2; + utf8[1] = '\0'; + return 1; + } + + if (ucs2 >= 0x80 && ucs2 < 0x800) { + utf8[0] = (ucs2 >> 6) | 0xC0; + utf8[1] = (ucs2 & 0x3F) | 0x80; + utf8[2] = '\0'; + return 2; + } + + if (ucs2 >= 0x800 && ucs2 < 0xFFFF) { + + if (ucs2 >= 0xD800 && ucs2 <= 0xDFFF) { + /* Ill-formed (UTF-16 ouside of BMP) */ + return -1; + } + + utf8[0] = ((ucs2 >> 12) ) | 0xE0; + utf8[1] = ((ucs2 >> 6 ) & 0x3F) | 0x80; + utf8[2] = ((ucs2 ) & 0x3F) | 0x80; + utf8[3] = '\0'; + return 3; + } + + return -1; +} + + +// Converts UTF8 to UCS2. Returns size in bytes of the converted string or -1 on error +size_t utf8_to_ucs2(WCHAR* const ucs2_le, const char* const utf8, const size_t maxucs2, const size_t maxutf8) +{ + const unsigned char* current_utf8 = (unsigned char*)utf8; + WCHAR* current_ucs2_le = ucs2_le; + + for (; *current_utf8; current_ucs2_le++) + { + size_t size = (char*)current_utf8 - utf8; + + if (size >= maxutf8) return (size_t)-1; + if (((*current_utf8 & 0xc0) == 0xc0) && (size >= maxutf8 - 1)) return (size_t)-1; + if (((*current_utf8 & 0xe0) == 0xe0) && (size >= maxutf8 - 2)) return (size_t)-1; + if (current_ucs2_le - ucs2_le >= (intptr_t)maxucs2 - 1) return (size_t)-1; + + *current_ucs2_le = utf8_to_ucs2_char(current_utf8, ¤t_utf8); + current_ucs2_le[1] = 0; + + if (*current_ucs2_le == (WCHAR)-1) return (size_t)-1; + } + return current_ucs2_le - ucs2_le; +} + +// Converts UCS2 to UTF-8. Return TRUE or FALSE +BOOL ucs2_to_utf8(const WCHAR* const ucs2_le, char* utf8, size_t maxucs2, size_t maxutf8) +{ + char utf8_char[4]; + const WCHAR* current_ucs2 = ucs2_le; + unsigned int index_utf8 = 0; + + for(*utf8 = 0; *current_ucs2; current_ucs2++) + { + if (current_ucs2 - ucs2_le > (intptr_t)maxucs2) return FALSE; + int len = ucs2_to_utf8_char(*current_ucs2, utf8_char); + if (index_utf8 + len > maxutf8) return FALSE; + strncat(utf8, utf8_char, len); + index_utf8+=len; + } + + return TRUE; +} + +/* End of UTF-8 <-> UCS2 conversion */ + + +// Checks, whether a string is a valid integer number between min and max. Returns TRUE or FALSE. Puts int value in *value +BOOL stringToInt(const char *const szValue, const unsigned int min, const unsigned int max, unsigned int *const value) +{ + char *nextchar; + + errno = 0; + long long result = strtoll(szValue, &nextchar, 10); + + if (errno || result < (long long)min || result > (long long)max || *nextchar) + { + return FALSE; + } + + *value = (unsigned int)result; + return TRUE; +} + + +//Converts a String Guid to a host binary guid in host endianess +int_fast8_t string2Uuid(const char *const restrict input, GUID *const restrict guid) +{ + int i; + + if (strlen(input) < GUID_STRING_LENGTH) return FALSE; + if (input[8] != '-' || input[13] != '-' || input[18] != '-' || input[23] != '-') return FALSE; + + for (i = 0; i < GUID_STRING_LENGTH; i++) + { + if (i == 8 || i == 13 || i == 18 || i == 23) continue; + + const char c = toupper((int)input[i]); + + if (c < '0' || c > 'F' || (c > '9' && c < 'A')) return FALSE; + } + + char inputCopy[GUID_STRING_LENGTH + 1]; + strncpy(inputCopy, input, GUID_STRING_LENGTH + 1); + inputCopy[8] = inputCopy[13] = inputCopy[18] = 0; + + hex2bin((BYTE*)&guid->Data1, inputCopy, 8); + hex2bin((BYTE*)&guid->Data2, inputCopy + 9, 4); + hex2bin((BYTE*)&guid->Data3, inputCopy + 14, 4); + hex2bin(guid->Data4, input + 19, 16); + + guid->Data1 = BE32(guid->Data1); + guid->Data2 = BE16(guid->Data2); + guid->Data3 = BE16(guid->Data3); + return TRUE; +} + + +// convert GUID to little-endian +void LEGUID(GUID *const restrict out, const GUID* const restrict in) +{ + #if __BYTE_ORDER != __LITTLE_ENDIAN + out->Data1 = LE32(in->Data1); + out->Data2 = LE16(in->Data2); + out->Data3 = LE16(in->Data3); + memcpy(out->Data4, in->Data4, sizeof(out->Data4)); + #else + memcpy(out, in, sizeof(GUID)); + #endif +} + + +//Checks a command line argument if it is numeric and between min and max. Returns the numeric value or exits on error +__pure unsigned int getOptionArgumentInt(const char o, const unsigned int min, const unsigned int max) +{ + unsigned int result; + + if (!stringToInt(optarg, min, max, &result)) + { + printerrorf("Fatal: Option \"-%c\" must be numeric between %u and %u.\n", o, min, max); + exit(!0); + } + + return result; +} + + +// Resets getopt() to start parsing from the beginning +void optReset(void) +{ + #if __minix__ || defined(__BSD__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) + optind = 1; + optreset = 1; // Makes newer BSD getopt happy + #elif defined(__UCLIBC__) // uClibc headers also define __GLIBC__ so be careful here + optind = 0; // uClibc seeks compatibility with GLIBC + #elif defined(__GLIBC__) + optind = 0; // Makes GLIBC getopt happy + #else // Standard for most systems + optind = 1; + #endif +} + + +#if defined(_WIN32) || defined(USE_MSRPC) + +// Returns a static message buffer containing text for a given Win32 error. Not thread safe (same as strerror) +char* win_strerror(const int message) +{ + #define STRERROR_BUFFER_SIZE 256 + static char buffer[STRERROR_BUFFER_SIZE]; + + FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, NULL, message, 0, buffer, STRERROR_BUFFER_SIZE, NULL); + return buffer; +} + +#endif // defined(_WIN32) || defined(USE_MSRPC) + + +/* + * parses an address in the form host:[port] in addr + * returns host and port in seperate strings + */ +void parseAddress(char *const addr, char** szHost, char** szPort) +{ + *szHost = addr; + +# ifndef NO_SOCKETS + *szPort = (char*)defaultport; +# else // NO_SOCKETS + *szPort = "1688"; +# endif // NO_SOCKETS + + char *lastcolon = strrchr(addr, ':'); + char *firstcolon = strchr(addr, ':'); + char *closingbracket = strrchr(addr, ']'); + + if (*addr == '[' && closingbracket) //Address in brackets + { + *closingbracket = 0; + (*szHost)++; + + if (closingbracket[1] == ':') + *szPort = closingbracket + 2; + } + else if (firstcolon && firstcolon == lastcolon) //IPv4 address or hostname with port + { + *firstcolon = 0; + *szPort = firstcolon + 1; + } +} + + +// Initialize random generator (needs to be done in each thread) +void randomNumberInit() +{ + struct timeval tv; + gettimeofday(&tv, NULL); + srand((unsigned int)(tv.tv_sec ^ tv.tv_usec)); +} + + +// We always exit immediately if any OOM condition occurs +__noreturn void OutOfMemory(void) +{ + errorout("Fatal: Out of memory"); + exit(!0); +} + + +void* vlmcsd_malloc(size_t len) +{ + void* buf = malloc(len); + if (!buf) OutOfMemory(); + return buf; +} + + +/* + * Converts hex digits to bytes in big-endian order. + * Ignores any non-hex characters + */ +void hex2bin(BYTE *const bin, const char *hex, const size_t maxbin) +{ + static const char *const hexdigits = "0123456789ABCDEF"; + char* nextchar; + size_t i; + + for (i = 0; (i < 16) && utf8_to_ucs2_char((const unsigned char*)hex, (const unsigned char**)&nextchar) != (WCHAR)-1; hex = nextchar) + { + const char* pos = strchr(hexdigits, toupper((int)*hex)); + if (!pos) continue; + + if (!(i & 1)) bin[i >> 1] = 0; + bin[i >> 1] |= (char)(pos - hexdigits); + if (!(i & 1)) bin[i >> 1] <<= 4; + i++; + if (i >> 1 > maxbin) break; + } +} + + +__pure BOOL getArgumentBool(int_fast8_t *result, const char *const argument) +{ + if ( + !strncasecmp(argument, "true", 4) || + !strncasecmp(argument, "on", 4) || + !strncasecmp(argument, "yes", 3) || + !strncasecmp(argument, "1", 1) + ) + { + *result = TRUE; + return TRUE; + } + else if ( + !strncasecmp(argument, "false", 5) || + !strncasecmp(argument, "off", 3) || + !strncasecmp(argument, "no", 2) || + !strncasecmp(argument, "0", 1) + ) + { + *result = FALSE; + return TRUE; + } + + return FALSE; +} + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef USE_MSRPC + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include +#ifndef _WIN32 +#include +#include +#include +#include +#include +#endif // WIN32 + +#include "network.h" +#include "endian.h" +#include "output.h" +#include "helpers.h" +#include "shared_globals.h" +#include "rpc.h" + + +#ifndef _WIN32 +typedef ssize_t (*sendrecv_t)(int, void*, size_t, int); +#else +typedef int (WINAPI *sendrecv_t)(SOCKET, void*, int, int); +#endif + + +// Send or receive a fixed number of bytes regardless if received in one or more chunks +int_fast8_t sendrecv(SOCKET sock, BYTE *data, int len, int_fast8_t do_send) +{ + int n; + sendrecv_t f = do_send + ? (sendrecv_t) send + : (sendrecv_t) recv; + + do + { + n = f(sock, data, len, 0); + } + while ( + ( n < 0 && socket_errno == VLMCSD_EINTR ) || ( n > 0 && ( data += n, (len -= n) > 0 ) )); + + return ! len; +} + + +static int_fast8_t ip2str(char *restrict result, const size_t resultLength, const struct sockaddr *const restrict socketAddress, const socklen_t socketLength) +{ + static const char *const fIPv4 = "%s:%s"; + static const char *const fIPv6 = "[%s]:%s"; + char ipAddress[64], portNumber[8]; + + if (getnameinfo + ( + socketAddress, + socketLength, + ipAddress, + sizeof(ipAddress), + portNumber, + sizeof(portNumber), + NI_NUMERICHOST | NI_NUMERICSERV + )) + { + return FALSE; + } + + if ((unsigned int)snprintf(result, resultLength, socketAddress->sa_family == AF_INET6 ? fIPv6 : fIPv4, ipAddress, portNumber) > resultLength) return FALSE; + return TRUE; +} + + +static int_fast8_t getSocketList(struct addrinfo **saList, const char *const addr, const int flags, const int AddressFamily) +{ + int status; + char *szHost, *szPort; + size_t len = strlen(addr) + 1; + + // Don't alloca too much + if (len > 264) return FALSE; + + char *addrcopy = (char*)alloca(len); + memcpy(addrcopy, addr, len); + + parseAddress(addrcopy, &szHost, &szPort); + + struct addrinfo hints; + + memset(&hints, 0, sizeof(struct addrinfo)); + + hints.ai_family = AddressFamily; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + hints.ai_flags = flags; + + if ((status = getaddrinfo(szHost, szPort, &hints, saList))) + { + printerrorf("Warning: %s: %s\n", addr, gai_strerror(status)); + return FALSE; + } + + return TRUE; +} + + +static int_fast8_t setBlockingEnabled(SOCKET fd, int_fast8_t blocking) +{ + if (fd == INVALID_SOCKET) return FALSE; + + #ifdef _WIN32 + + unsigned long mode = blocking ? 0 : 1; + return (ioctlsocket(fd, FIONBIO, &mode) == 0) ? TRUE : FALSE; + + #else // POSIX + + int flags = fcntl(fd, F_GETFL, 0); + + if (flags < 0) return FALSE; + + flags = blocking ? (flags & ~O_NONBLOCK) : (flags | O_NONBLOCK); + return (fcntl(fd, F_SETFL, flags) == 0) ? TRUE : FALSE; + + #endif // POSIX +} + + +int_fast8_t isDisconnected(const SOCKET s) +{ + char buffer[1]; + + if (!setBlockingEnabled(s, FALSE)) return TRUE; + + int n = recv(s, buffer, 1, MSG_PEEK); + + if (!setBlockingEnabled(s, TRUE)) return TRUE; + if (n == 0) return TRUE; + + return FALSE; +} + + +// Connect to TCP address addr (e.g. "kms.example.com:1688") and return an +// open socket for the connection if successful or INVALID_SOCKET otherwise +SOCKET connectToAddress(const char *const addr, const int AddressFamily, int_fast8_t showHostName) +{ + struct addrinfo *saList, *sa; + SOCKET s = INVALID_SOCKET; + char szAddr[128]; + + if (!getSocketList(&saList, addr, 0, AddressFamily)) return INVALID_SOCKET; + + for (sa = saList; sa; sa = sa->ai_next) + { + // struct sockaddr_in* addr4 = (struct sockaddr_in*)sa->ai_addr; + // struct sockaddr_in6* addr6 = (struct sockaddr_in6*)sa->ai_addr; + + if (ip2str(szAddr, sizeof(szAddr), sa->ai_addr, sa->ai_addrlen)) + { + if (showHostName) + printf("Connecting to %s (%s) ... ", addr, szAddr); + else + printf("Connecting to %s ... ", szAddr); + + fflush(stdout); + } + + s = socket(sa->ai_family, SOCK_STREAM, IPPROTO_TCP); + +# if !defined(NO_TIMEOUT) && !__minix__ +# ifndef _WIN32 // Standard Posix timeout structure + + struct timeval to; + to.tv_sec = 10; + to.tv_usec = 0; + +# else // Windows requires a DWORD with milliseconds + + DWORD to = 10000; + +# endif // _WIN32 + + setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (sockopt_t)&to, sizeof(to)); + setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, (sockopt_t)&to, sizeof(to)); +# endif // !defined(NO_TIMEOUT) && !__minix__ + + if (!connect(s, sa->ai_addr, sa->ai_addrlen)) + { + printf("successful\n"); + break; + } + + errorout("%s\n", socket_errno == VLMCSD_EINPROGRESS ? "Timed out" : vlmcsd_strerror(socket_errno)); + + socketclose(s); + s = INVALID_SOCKET; + } + + freeaddrinfo(saList); + return s; +} + + +#ifndef NO_SOCKETS + +// Create a Listening socket for addrinfo sa and return socket s +// szHost and szPort are for logging only +static int listenOnAddress(const struct addrinfo *const ai, SOCKET *s) +{ + int error; + char ipstr[64]; + + ip2str(ipstr, sizeof(ipstr), ai->ai_addr, ai->ai_addrlen); + + //*s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); + *s = socket(ai->ai_family, SOCK_STREAM, IPPROTO_TCP); + + if (*s == INVALID_SOCKET) + { + error = socket_errno; + printerrorf("Warning: %s error. %s\n", ai->ai_family == AF_INET6 ? cIPv6 : cIPv4, vlmcsd_strerror(error)); + return error; + } + +# if !defined(_WIN32) && !defined(NO_SIGHUP) + + int flags = fcntl(*s, F_GETFD, 0); + + if (flags != -1) + { + flags |= FD_CLOEXEC; + fcntl(*s, F_SETFD, flags); + } +# ifdef _PEDANTIC + else + { + printerrorf("Warning: Could not set FD_CLOEXEC flag on %s: %s\n", ipstr, vlmcsd_strerror(errno)); + } +# endif // _PEDANTIC + +# endif // !defined(_WIN32) && !defined(NO_SIGHUP) + + BOOL socketOption = TRUE; + + // fix for lame tomato toolchain +# ifndef IPV6_V6ONLY +# ifdef __linux__ +# define IPV6_V6ONLY (26) +# endif // __linux__ +# endif // IPV6_V6ONLY + +# ifdef IPV6_V6ONLY + if (ai->ai_family == AF_INET6) setsockopt(*s, IPPROTO_IPV6, IPV6_V6ONLY, (sockopt_t)&socketOption, sizeof(socketOption)); +# endif + +# ifndef _WIN32 + setsockopt(*s, SOL_SOCKET, SO_REUSEADDR, (sockopt_t)&socketOption, sizeof(socketOption)); +# endif + + if (bind(*s, ai->ai_addr, ai->ai_addrlen) || listen(*s, SOMAXCONN)) + { + error = socket_errno; + printerrorf("Warning: %s: %s\n", ipstr, vlmcsd_strerror(error)); + socketclose(*s); + return error; + } + +# ifndef NO_LOG + logger("Listening on %s\n", ipstr); +# endif + + return 0; +} + + +// Adds a listening socket for an address string, +// e.g. 127.0.0.1:1688 or [2001:db8:dead:beef::1]:1688 +BOOL addListeningSocket(const char *const addr) +{ + struct addrinfo *aiList, *ai; + int result = FALSE; + SOCKET *s = SocketList + numsockets; + + if (getSocketList(&aiList, addr, AI_PASSIVE | AI_NUMERICHOST, AF_UNSPEC)) + { + for (ai = aiList; ai; ai = ai->ai_next) + { + // struct sockaddr_in* addr4 = (struct sockaddr_in*)sa->ai_addr; + // struct sockaddr_in6* addr6 = (struct sockaddr_in6*)sa->ai_addr; + + if (numsockets >= FD_SETSIZE) + { + #ifdef _PEDANTIC // Do not report this error in normal builds to keep file size low + printerrorf("Warning: Cannot listen on %s. Your OS only supports %u listening sockets in an FD_SET.\n", addr, FD_SETSIZE); + #endif + break; + } + + if (!listenOnAddress(ai, s)) + { + numsockets++; + result = TRUE; + } + } + + freeaddrinfo(aiList); + } + return result; +} + + +// Just create some dummy sockets to see if we have a specific protocol (IPv4 or IPv6) +__pure int_fast8_t checkProtocolStack(const int addressfamily) +{ + SOCKET s; // = INVALID_SOCKET; + + s = socket(addressfamily, SOCK_STREAM, 0); + int_fast8_t success = (s != INVALID_SOCKET); + + socketclose(s); + return success; +} + + +// Build an fd_set of all listening socket then use select to wait for an incoming connection +static SOCKET network_accept_any() +{ + fd_set ListeningSocketsList; + SOCKET maxSocket, sock; + int i; + int status; + + FD_ZERO(&ListeningSocketsList); + maxSocket = 0; + + for (i = 0; i < numsockets; i++) + { + FD_SET(SocketList[i], &ListeningSocketsList); + if (SocketList[i] > maxSocket) maxSocket = SocketList[i]; + } + + status = select(maxSocket + 1, &ListeningSocketsList, NULL, NULL, NULL); + + if (status < 0) return INVALID_SOCKET; + + sock = INVALID_SOCKET; + + for (i = 0; i < numsockets; i++) + { + if (FD_ISSET(SocketList[i], &ListeningSocketsList)) + { + sock = SocketList[i]; + break; + } + } + + if (sock == INVALID_SOCKET) + return INVALID_SOCKET; + else + return accept(sock, NULL, NULL); +} + + +void closeAllListeningSockets() +{ + int i; + + for (i = 0; i < numsockets; i++) + { + shutdown(SocketList[i], VLMCSD_SHUT_RDWR); + socketclose(SocketList[i]); + } +} +#endif // NO_SOCKETS + + +static void serveClient(const SOCKET s_client, const DWORD RpcAssocGroup) +{ +# if !defined(NO_TIMEOUT) && !__minix__ + +# ifndef _WIN32 // Standard Posix timeout structure + + struct timeval to; + to.tv_sec = ServerTimeout; + to.tv_usec = 0; + + #else // Windows requires a DWORD with milliseconds + + DWORD to = ServerTimeout * 1000; + +# endif // _WIN32 + +# if !defined(NO_LOG) && defined(_PEDANTIC) + + int result = + setsockopt(s_client, SOL_SOCKET, SO_RCVTIMEO, (sockopt_t)&to, sizeof(to)) || + setsockopt(s_client, SOL_SOCKET, SO_SNDTIMEO, (sockopt_t)&to, sizeof(to)); + + if (result) logger("Warning: Set timeout failed: %s\n", vlmcsd_strerror(socket_errno)); + +# else // !(!defined(NO_LOG) && defined(_PEDANTIC)) + + setsockopt(s_client, SOL_SOCKET, SO_RCVTIMEO, (sockopt_t)&to, sizeof(to)); + setsockopt(s_client, SOL_SOCKET, SO_SNDTIMEO, (sockopt_t)&to, sizeof(to)); + +# endif // !(!defined(NO_LOG) && defined(_PEDANTIC)) + +# endif // !defined(NO_TIMEOUT) && !__minix__ + + char ipstr[64]; + socklen_t len; + struct sockaddr_storage addr; + + len = sizeof addr; + + if (getpeername(s_client, (struct sockaddr*)&addr, &len) || + !ip2str(ipstr, sizeof(ipstr), (struct sockaddr*)&addr, len)) + { +# if !defined(NO_LOG) && defined(_PEDANTIC) + logger("Fatal: Cannot determine client's IP address: %s\n", vlmcsd_strerror(errno)); +# endif // !defined(NO_LOG) && defined(_PEDANTIC) + socketclose(s_client); + return; + } + + +# ifndef NO_LOG + const char *const connection_type = addr.ss_family == AF_INET6 ? cIPv6 : cIPv4; + static const char *const cAccepted = "accepted"; + static const char *const cClosed = "closed"; + static const char *const fIP = "%s connection %s: %s.\n"; + + logger(fIP, connection_type, cAccepted, ipstr); + #endif // NO_LOG + + rpcServer(s_client, RpcAssocGroup, ipstr); + +# ifndef NO_LOG + logger(fIP, connection_type, cClosed, ipstr); +# endif // NO_LOG + + socketclose(s_client); +} + + +#ifndef NO_SOCKETS +static void post_sem(void) +{ + #if !defined(NO_LIMIT) && !__minix__ + if (!InetdMode && MaxTasks != SEM_VALUE_MAX) + { + semaphore_post(Semaphore); + } + #endif // !defined(NO_LIMIT) && !__minix__ +} + + +static void wait_sem(void) +{ + #if !defined(NO_LIMIT) && !__minix__ + if (!InetdMode && MaxTasks != SEM_VALUE_MAX) + { + semaphore_wait(Semaphore); + } + #endif // !defined(NO_LIMIT) && !__minix__ +} +#endif // NO_SOCKETS + +#if defined(USE_THREADS) && !defined(NO_SOCKETS) + +#if defined(_WIN32) || defined(__CYGWIN__) // Win32 Threads +static DWORD WINAPI serveClientThreadProc(PCLDATA clData) +#else // Posix threads +static void *serveClientThreadProc (PCLDATA clData) +#endif // Thread proc is identical in WIN32 and Posix threads +{ + serveClient(clData->socket, clData->RpcAssocGroup); + free(clData); + post_sem(); + + return 0; +} + +#endif // USE_THREADS + + +#ifndef NO_SOCKETS + +#if defined(USE_THREADS) && (defined(_WIN32) || defined(__CYGWIN__)) // Windows Threads +static int serveClientAsyncWinThreads(const PCLDATA thr_CLData) +{ + wait_sem(); + + HANDLE h = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)serveClientThreadProc, thr_CLData, 0, NULL); + + if (h) + CloseHandle(h); + else + { + socketclose(thr_CLData->socket); + free(thr_CLData); + post_sem(); + return GetLastError(); + } + + return NO_ERROR; +} +#endif // defined(USE_THREADS) && defined(_WIN32) // Windows Threads + + +#if defined(USE_THREADS) && !defined(_WIN32) && !defined(__CYGWIN__) // Posix Threads +static int ServeClientAsyncPosixThreads(const PCLDATA thr_CLData) +{ + pthread_t p_thr; + pthread_attr_t attr; + + wait_sem(); + + // Must set detached state to avoid memory leak + if (pthread_attr_init(&attr) || + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) || + pthread_create(&p_thr, &attr, (void * (*)(void *))serveClientThreadProc, thr_CLData)) + { + socketclose(thr_CLData->socket); + free(thr_CLData); + post_sem(); + return !0; + } + + return 0; +} +#endif // defined(USE_THREADS) && !defined(_WIN32) // Posix Threads + +#ifndef USE_THREADS // fork() implementation +static void ChildSignalHandler(const int signal) +{ + if (signal == SIGHUP) return; + + post_sem(); + + #ifndef NO_LOG + logger("Warning: Child killed/crashed by %s\n", strsignal(signal)); + #endif // NO_LOG + + exit(!0); +} + +static int ServeClientAsyncFork(const SOCKET s_client, const DWORD RpcAssocGroup) +{ + int pid; + wait_sem(); + + if ((pid = fork()) < 0) + { + return errno; + } + else if ( pid ) + { + // Parent process + socketclose(s_client); + return 0; + } + else + { + // Child process + + // Setup a Child Handler for most common termination signals + struct sigaction sa; + + sa.sa_flags = 0; + sa.sa_handler = ChildSignalHandler; + + static int signallist[] = { SIGHUP, SIGINT, SIGTERM, SIGSEGV, SIGILL, SIGFPE, SIGBUS }; + + if (!sigemptyset(&sa.sa_mask)) + { + uint_fast8_t i; + + for (i = 0; i < _countof(signallist); i++) + { + sigaction(signallist[i], &sa, NULL); + } + } + + serveClient(s_client, RpcAssocGroup); + post_sem(); + exit(0); + } +} +#endif + + +int serveClientAsync(const SOCKET s_client, const DWORD RpcAssocGroup) +{ + #ifndef USE_THREADS // fork() implementation + + return ServeClientAsyncFork(s_client, RpcAssocGroup); + + #else // threads implementation + + PCLDATA thr_CLData = (PCLDATA)vlmcsd_malloc(sizeof(CLDATA)); + thr_CLData->socket = s_client; + thr_CLData->RpcAssocGroup = RpcAssocGroup; + + #if defined(_WIN32) || defined (__CYGWIN__) // Windows threads + + return serveClientAsyncWinThreads(thr_CLData); + + #else // Posix Threads + + return ServeClientAsyncPosixThreads(thr_CLData); + + #endif // Posix Threads + + #endif // USE_THREADS +} + +#endif // NO_SOCKETS + + +int runServer() +{ + DWORD RpcAssocGroup = rand32(); + + // If compiled for inetd-only mode just serve the stdin socket + #ifdef NO_SOCKETS + serveClient(STDIN_FILENO, RpcAssocGroup); + return 0; + #else + // In inetd mode just handle the stdin socket + if (InetdMode) + { + serveClient(STDIN_FILENO, RpcAssocGroup); + return 0; + } + + // Standalone mode + for (;;) + { + int error; + SOCKET s_client; + + if ( (s_client = network_accept_any()) == INVALID_SOCKET ) + { + error = socket_errno; + + if (error == VLMCSD_EINTR || error == VLMCSD_ECONNABORTED) continue; + + #ifdef _NTSERVICE + if (ServiceShutdown) return 0; + #endif + + #ifndef NO_LOG + logger("Fatal: %s\n",vlmcsd_strerror(error)); + #endif + + return error; + } + + RpcAssocGroup++; + serveClientAsync(s_client, RpcAssocGroup); + } + #endif // NO_SOCKETS + + return 0; +} + +#endif // USE_MSRPC +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE +#endif // _DEFAULT_SOURCE + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef USE_MSRPC + +#include +#include +#include +#include +#include +#include +#if !defined(_WIN32) +#include +#include +#endif +#include "rpc.h" +#include "output.h" +#include "crypto.h" +#include "endian.h" +#include "helpers.h" +#include "network.h" +#include "shared_globals.h" + +/* Forwards */ + +static int checkRpcHeader(const RPC_HEADER *const Header, const BYTE desiredPacketType, const PRINTFUNC p); + + +/* Data definitions */ + +// All GUIDs are defined as BYTE[16] here. No big-endian/little-endian byteswapping required. +static const BYTE TransferSyntaxNDR32[] = { + 0x04, 0x5D, 0x88, 0x8A, 0xEB, 0x1C, 0xC9, 0x11, 0x9F, 0xE8, 0x08, 0x00, 0x2B, 0x10, 0x48, 0x60 +}; + +static const BYTE InterfaceUuid[] = { + 0x75, 0x21, 0xc8, 0x51, 0x4e, 0x84, 0x50, 0x47, 0xB0, 0xD8, 0xEC, 0x25, 0x55, 0x55, 0xBC, 0x06 +}; + +static const BYTE TransferSyntaxNDR64[] = { + 0x33, 0x05, 0x71, 0x71, 0xba, 0xbe, 0x37, 0x49, 0x83, 0x19, 0xb5, 0xdb, 0xef, 0x9c, 0xcc, 0x36 +}; + +static const BYTE BindTimeFeatureNegotiation[] = { + 0x2c, 0x1c, 0xb7, 0x6c, 0x12, 0x98, 0x40, 0x45, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + + +// +// Dispatch RPC payload to kms.c +// +typedef int (*CreateResponse_t)(const void *const, void *const, const char* const); + +static const struct { + unsigned int RequestSize; + CreateResponse_t CreateResponse; +} _Versions[] = { + { sizeof(REQUEST_V4), (CreateResponse_t) CreateResponseV4 }, + { sizeof(REQUEST_V6), (CreateResponse_t) CreateResponseV6 }, + { sizeof(REQUEST_V6), (CreateResponse_t) CreateResponseV6 } +}; + +RPC_FLAGS RpcFlags; +static int_fast8_t firstPacketSent; + +// +// RPC request (server) +// +#if defined(_PEDANTIC) && !defined(NO_LOG) +static void CheckRpcRequest(const RPC_REQUEST64 *const Request, const unsigned int len, WORD* NdrCtx, WORD* Ndr64Ctx, WORD Ctx) +{ + uint_fast8_t kmsMajorVersion; + uint32_t requestSize = Ctx != *Ndr64Ctx ? sizeof(RPC_REQUEST) : sizeof(RPC_REQUEST64); + + if (len < requestSize) + { + logger("Fatal: RPC request (including header) must be at least %i bytes but is only %i bytes.\n", + (int)(sizeof(RPC_HEADER) + requestSize), + (int)(len + sizeof(RPC_HEADER)) + ); + + return; + } + + if (len < requestSize + sizeof(DWORD)) + { + logger("Fatal: KMS Request too small to contain version info (less than 4 bytes).\n"); + return; + } + + if (Ctx != *Ndr64Ctx) + kmsMajorVersion = LE16(((WORD*)Request->Ndr.Data)[1]); + else + kmsMajorVersion = LE16(((WORD*)Request->Ndr64.Data)[1]); + + if (kmsMajorVersion > 6) + { + logger("Fatal: KMSv%u is not supported.\n", (unsigned int)kmsMajorVersion); + } + else + { + if (len >_Versions[kmsMajorVersion].RequestSize + requestSize) + logger("Warning: %u excess bytes in RPC request.\n", + len - _Versions[kmsMajorVersion].RequestSize + ); + } + + if (Ctx != *Ndr64Ctx && Ctx != *NdrCtx) + logger("Warning: Context id should be %u (NDR32) or %u (NDR64) but is %u.\n", + (unsigned int)*NdrCtx, + (unsigned int)*Ndr64Ctx, + Ctx + ); + + if (Request->Opnum) + logger("Warning: OpNum should be 0 but is %u.\n", + (unsigned int)LE16(Request->Opnum) + ); + + if (LE32(Request->AllocHint) != len - sizeof(RPC_REQUEST) + sizeof(Request->Ndr)) + logger("Warning: Allocation hint should be %u but is %u.\n", + len + sizeof(Request->Ndr), + LE32(Request->AllocHint) + ); + + if (Ctx != *Ndr64Ctx) + { + if (LE32(Request->Ndr.DataLength) != len - sizeof(RPC_REQUEST)) + logger("Warning: NDR32 data length field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST), + LE32(Request->Ndr.DataLength) + ); + + if (LE32(Request->Ndr.DataSizeIs) != len - sizeof(RPC_REQUEST)) + logger("Warning: NDR32 data size field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST), + LE32(Request->Ndr.DataSizeIs) + ); + } + else + { + if (LE64(Request->Ndr64.DataLength) != len - sizeof(RPC_REQUEST64)) + logger("Warning: NDR32 data length field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST) + sizeof(Request->Ndr), + LE64(Request->Ndr64.DataLength) + ); + + if (LE64(Request->Ndr64.DataSizeIs) != len - sizeof(RPC_REQUEST64)) + logger("Warning: NDR32 data size field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST64), + LE64(Request->Ndr64.DataSizeIs) + ); + } +} +#endif // defined(_PEDANTIC) && !defined(NO_LOG) + +/* + * check RPC request for (somewhat) correct size + * allow any size that does not cause CreateResponse to fail badly + */ +static unsigned int checkRpcRequestSize(const RPC_REQUEST64 *const Request, const unsigned int requestSize, WORD* NdrCtx, WORD* Ndr64Ctx) +{ + WORD Ctx = LE16(Request->ContextId); + +# if defined(_PEDANTIC) && !defined(NO_LOG) + CheckRpcRequest(Request, requestSize, NdrCtx, Ndr64Ctx, Ctx); +# endif // defined(_PEDANTIC) && !defined(NO_LOG) + + // Anything that is smaller than a v4 request is illegal + if (requestSize < sizeof(REQUEST_V4) + (Ctx != *Ndr64Ctx ? sizeof(RPC_REQUEST) : sizeof(RPC_REQUEST64))) return 0; + + // Get KMS major version + uint_fast16_t _v; + + if (Ctx != *Ndr64Ctx) + _v = LE16(((WORD*)Request->Ndr.Data)[1]) - 4; + else + _v = LE16(((WORD*)Request->Ndr64.Data)[1]) - 4; + + // Only KMS v4, v5 and v6 are supported + if (_v >= vlmcsd_countof(_Versions)) + { +# ifndef NO_LOG + logger("Fatal: KMSv%i unsupported\n", _v + 4); +# endif // NO_LOG + return 0; + } + + // Could check for equality but allow bigger requests to support buggy RPC clients (e.g. wine) + // Buffer overrun is check by caller. + return (requestSize >= _Versions[_v].RequestSize); +} + + +/* + * Handles the actual KMS request from the client. + * Calls KMS functions (CreateResponseV4 or CreateResponseV6) in kms.c + * Returns size of the KMS response packet or 0 on failure. + * + * The RPC packet size (excluding header) is actually in Response->AllocHint + */ +static int rpcRequest(const RPC_REQUEST64 *const Request, RPC_RESPONSE64 *const Response, const DWORD RpcAssocGroup_unused, const SOCKET sock_unused, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE packetType, const char* const ipstr) +{ + uint_fast16_t _v; + int ResponseSize; + WORD Ctx = LE16(Request->ContextId); + BYTE* requestData; + BYTE* responseData; + BYTE* pRpcReturnCode; + int len; + + if (Ctx != *Ndr64Ctx) + { + requestData = (BYTE*)&Request->Ndr.Data; + responseData = (BYTE*)&Response->Ndr.Data; + } + else + { + requestData = (BYTE*)&Request->Ndr64.Data; + responseData = (BYTE*)&Response->Ndr64.Data; + } + + _v = LE16(((WORD*)requestData)[1]) - 4; + + if (!(ResponseSize = _Versions[_v].CreateResponse(requestData, responseData, ipstr))) + { + return 0; + } + + if (Ctx != *Ndr64Ctx) + { + Response->Ndr.DataSizeMax = LE32(0x00020000); + Response->Ndr.DataLength = Response->Ndr.DataSizeIs = LE32(ResponseSize); + len = ResponseSize + sizeof(Response->Ndr); + } + else + { + Response->Ndr64.DataSizeMax = LE64(0x00020000ULL); + Response->Ndr64.DataLength = Response->Ndr64.DataSizeIs = LE64((uint64_t)ResponseSize); + len = ResponseSize + sizeof(Response->Ndr64); + } + + pRpcReturnCode = ((BYTE*)&Response->Ndr) + len; + UA32(pRpcReturnCode) = 0; //LE32 not needed for 0 + len += sizeof(DWORD); + + // Pad zeros to 32-bit align (seems not neccassary but Windows RPC does it this way) + int pad = ((~len & 3) + 1) & 3; + memset(pRpcReturnCode + sizeof(DWORD), 0, pad); + len += pad; + + Response->AllocHint = LE32(len); + Response->ContextId = Request->ContextId; + + *((WORD*)&Response->CancelCount) = 0; // CancelCount + Pad1 + + return len + 8; +} + + +#if defined(_PEDANTIC) && !defined(NO_LOG) +static void CheckRpcBindRequest(const RPC_BIND_REQUEST *const Request, const unsigned int len) +{ + uint_fast8_t i, HasTransferSyntaxNDR32 = FALSE; + char guidBuffer1[GUID_STRING_LENGTH + 1], guidBuffer2[GUID_STRING_LENGTH + 1]; + + uint32_t CapCtxItems = (len - sizeof(*Request) + sizeof(Request->CtxItems)) / sizeof(Request->CtxItems); + DWORD NumCtxItems = LE32(Request->NumCtxItems); + + if (NumCtxItems < CapCtxItems) // Can't be too small because already handled by RpcBindSize + logger("Warning: Excess bytes in RPC bind request.\n"); + + for (i = 0; i < NumCtxItems; i++) + { + if (!IsEqualGUID(&Request->CtxItems[i].InterfaceUUID, InterfaceUuid)) + { + uuid2StringLE((GUID*)&Request->CtxItems[i].InterfaceUUID, guidBuffer1); + uuid2StringLE((GUID*)InterfaceUuid, guidBuffer2); + logger("Warning: Interface UUID is %s but should be %s in Ctx item %u.\n", guidBuffer1, guidBuffer2, (unsigned int)i); + } + + if (Request->CtxItems[i].NumTransItems != LE16(1)) + logger("Fatal: %u NDR32 transfer items detected in Ctx item %u, but only one is supported.\n", + (unsigned int)LE16(Request->CtxItems[i].NumTransItems), (unsigned int)i + ); + + if (Request->CtxItems[i].InterfaceVerMajor != LE16(1) || Request->CtxItems[i].InterfaceVerMinor != 0) + logger("Warning: NDR32 Interface version is %u.%u but should be 1.0.\n", + (unsigned int)LE16(Request->CtxItems[i].InterfaceVerMajor), + (unsigned int)LE16(Request->CtxItems[i].InterfaceVerMinor) + ); + + if (Request->CtxItems[i].ContextId != LE16((WORD)i)) + logger("Warning: context id of Ctx item %u is %u.\n", (unsigned int)i, (unsigned int)Request->CtxItems[i].ContextId); + + if ( IsEqualGUID((GUID*)TransferSyntaxNDR32, &Request->CtxItems[i].TransferSyntax) ) + { + HasTransferSyntaxNDR32 = TRUE; + + if (Request->CtxItems[i].SyntaxVersion != LE32(2)) + logger("NDR32 transfer syntax version is %u but should be 2.\n", LE32(Request->CtxItems[i].SyntaxVersion)); + } + else if ( IsEqualGUID((GUID*)TransferSyntaxNDR64, &Request->CtxItems[i].TransferSyntax) ) + { + if (Request->CtxItems[i].SyntaxVersion != LE32(1)) + logger("NDR64 transfer syntax version is %u but should be 1.\n", LE32(Request->CtxItems[i].SyntaxVersion)); + } + else if (!memcmp(BindTimeFeatureNegotiation, (BYTE*)(&Request->CtxItems[i].TransferSyntax), 8)) + { + if (Request->CtxItems[i].SyntaxVersion != LE32(1)) + logger("BTFN syntax version is %u but should be 1.\n", LE32(Request->CtxItems[i].SyntaxVersion)); + } + } + + if (!HasTransferSyntaxNDR32) + logger("Warning: RPC bind request has no NDR32 CtxItem.\n"); +} +#endif // defined(_PEDANTIC) && !defined(NO_LOG) + + +/* + * Check, if we receive enough bytes to return a valid RPC bind response + */ +static unsigned int checkRpcBindSize(const RPC_BIND_REQUEST *const Request, const unsigned int RequestSize, WORD* NdrCtx, WORD* Ndr64Ctx) +{ + if ( RequestSize < sizeof(RPC_BIND_REQUEST) ) return FALSE; + + unsigned int _NumCtxItems = LE32(Request->NumCtxItems); + + if ( RequestSize < sizeof(RPC_BIND_REQUEST) - sizeof(Request->CtxItems[0]) + _NumCtxItems * sizeof(Request->CtxItems[0]) ) return FALSE; + + #if defined(_PEDANTIC) && !defined(NO_LOG) + CheckRpcBindRequest(Request, RequestSize); + #endif // defined(_PEDANTIC) && !defined(NO_LOG) + + return TRUE; +} + + +/* + * Accepts a bind or alter context request from the client and composes the bind response. + * Needs the socket because the tcp port number is part of the response. + * len is not used here. + * + * Returns TRUE on success. + */ +static int rpcBind(const RPC_BIND_REQUEST *const Request, RPC_BIND_RESPONSE* Response, const DWORD RpcAssocGroup, const SOCKET sock, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE packetType, const char* const ipstr_unused) +{ + unsigned int i, _st = FALSE; + DWORD numCtxItems = LE32(Request->NumCtxItems); + int_fast8_t IsNDR64possible = FALSE; + uint_fast8_t portNumberSize; + + socklen_t socklen; + struct sockaddr_storage addr; + + // M$ RPC does not do this. Pad bytes contain apparently random data + // memset(Response->SecondaryAddress, 0, sizeof(Response->SecondaryAddress)); + + socklen = sizeof addr; + + if ( + packetType == RPC_PT_ALTERCONTEXT_REQ || + getsockname(sock, (struct sockaddr*)&addr, &socklen) || + getnameinfo((struct sockaddr*)&addr, socklen, NULL, 0, (char*)Response->SecondaryAddress, sizeof(Response->SecondaryAddress), NI_NUMERICSERV)) + { + portNumberSize = Response->SecondaryAddressLength = 0; + } + else + { + portNumberSize = strlen((char*)Response->SecondaryAddress) + 1; + Response->SecondaryAddressLength = LE16(portNumberSize); + } + + Response->MaxXmitFrag = Request->MaxXmitFrag; + Response->MaxRecvFrag = Request->MaxRecvFrag; + Response->AssocGroup = LE32(RpcAssocGroup); + + // This is really ugly (but efficient) code to support padding after the secondary address field + if (portNumberSize < 3) + { + Response = (RPC_BIND_RESPONSE*)((BYTE*)Response - 4); + } + + Response->NumResults = Request->NumCtxItems; + + if (UseRpcNDR64) + { + for (i = 0; i < numCtxItems; i++) + { + if ( IsEqualGUID((GUID*)TransferSyntaxNDR32, &Request->CtxItems[i].TransferSyntax) ) + { + /*if (packetType == RPC_PT_BIND_REQ)*/ + *NdrCtx = LE16(Request->CtxItems[i].ContextId); + } + + if ( IsEqualGUID((GUID*)TransferSyntaxNDR64, &Request->CtxItems[i].TransferSyntax) ) + { + IsNDR64possible = TRUE; + + /*if (packetType == RPC_PT_BIND_REQ)*/ + *Ndr64Ctx = LE16(Request->CtxItems[i].ContextId); + } + } + } + + for (i = 0; i < numCtxItems; i++) + { + memset(&Response->Results[i].TransferSyntax, 0, sizeof(GUID)); + + if ( !IsNDR64possible && IsEqualGUID((GUID*)TransferSyntaxNDR32, &Request->CtxItems[i].TransferSyntax) ) + { + Response->Results[i].SyntaxVersion = LE32(2); + Response->Results[i].AckResult = + Response->Results[i].AckReason = RPC_BIND_ACCEPT; + memcpy(&Response->Results[i].TransferSyntax, TransferSyntaxNDR32, sizeof(GUID)); + + _st = TRUE; + } + else if ( IsNDR64possible && IsEqualGUID((GUID*)TransferSyntaxNDR64, &Request->CtxItems[i].TransferSyntax) ) + { + Response->Results[i].SyntaxVersion = LE32(1); + Response->Results[i].AckResult = + Response->Results[i].AckReason = RPC_BIND_ACCEPT; + memcpy(&Response->Results[i].TransferSyntax, TransferSyntaxNDR64, sizeof(GUID)); + + _st = TRUE; + } + else if ( UseRpcBTFN && !memcmp(BindTimeFeatureNegotiation, (BYTE*)(&Request->CtxItems[i].TransferSyntax), 8) ) + { + Response->Results[i].SyntaxVersion = 0; + Response->Results[i].AckResult = RPC_BIND_ACK; + + // Features requested are actually encoded in the GUID + Response->Results[i].AckReason = + ((WORD*)(&Request->CtxItems[i].TransferSyntax))[4] & + (RPC_BTFN_SEC_CONTEXT_MULTIPLEX | RPC_BTFN_KEEP_ORPHAN); + } + else + { + Response->Results[i].SyntaxVersion = 0; + Response->Results[i].AckResult = + Response->Results[i].AckReason = RPC_BIND_NACK; // Unsupported + } + } + + if ( !_st ) return 0; + + return sizeof(RPC_BIND_RESPONSE) + numCtxItems * sizeof(((RPC_BIND_RESPONSE *)0)->Results[0]) - (portNumberSize < 3 ? 4 : 0); +} + + +// +// Main RPC handling routine +// +typedef unsigned int (*GetResponseSize_t)(const void *const request, const unsigned int requestSize, WORD* NdrCtx, WORD* Ndr64Ctx); +typedef int (*GetResponse_t)(const void* const request, void* response, const DWORD rpcAssocGroup, const SOCKET socket, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE packetType, const char* const ipstr); + +static const struct { + BYTE ResponsePacketType; + GetResponseSize_t CheckRequestSize; + GetResponse_t GetResponse; +} +_Actions[] = { + { RPC_PT_BIND_ACK, (GetResponseSize_t)checkRpcBindSize, (GetResponse_t) rpcBind }, + { RPC_PT_RESPONSE, (GetResponseSize_t)checkRpcRequestSize, (GetResponse_t) rpcRequest }, + { RPC_PT_ALTERCONTEXT_ACK, (GetResponseSize_t)checkRpcBindSize, (GetResponse_t) rpcBind }, +}; + + +/* + * This is the main RPC server loop. Returns after KMS request has been serviced + * or a timeout has occured. + */ +void rpcServer(const SOCKET sock, const DWORD RpcAssocGroup, const char* const ipstr) +{ + RPC_HEADER rpcRequestHeader; + WORD NdrCtx = INVALID_NDR_CTX, Ndr64Ctx = INVALID_NDR_CTX; + + randomNumberInit(); + + while (_recv(sock, &rpcRequestHeader, sizeof(rpcRequestHeader))) + { + //int_fast8_t _st; + unsigned int request_len, response_len; + uint_fast8_t _a; + + #if defined(_PEDANTIC) && !defined(NO_LOG) + checkRpcHeader(&rpcRequestHeader, rpcRequestHeader.PacketType, &logger); + #endif // defined(_PEDANTIC) && !defined(NO_LOG) + + switch (rpcRequestHeader.PacketType) + { + case RPC_PT_BIND_REQ: _a = 0; break; + case RPC_PT_REQUEST: _a = 1; break; + case RPC_PT_ALTERCONTEXT_REQ: _a = 2; break; + default: return; + } + + request_len = LE16(rpcRequestHeader.FragLength) - sizeof(rpcRequestHeader); + + BYTE requestBuffer[MAX_REQUEST_SIZE + sizeof(RPC_RESPONSE64)]; + BYTE responseBuffer[MAX_RESPONSE_SIZE + sizeof(RPC_HEADER) + sizeof(RPC_RESPONSE64)]; + + RPC_HEADER *rpcResponseHeader = (RPC_HEADER *)responseBuffer; + RPC_RESPONSE* rpcResponse = (RPC_RESPONSE*)(responseBuffer + sizeof(rpcRequestHeader)); + + // The request is larger than the buffer size + if (request_len > MAX_REQUEST_SIZE + sizeof(RPC_REQUEST64)) return; + + // Unable to receive the complete request + if (!_recv(sock, requestBuffer, request_len)) return; + + // Request is invalid + if (!_Actions[_a].CheckRequestSize(requestBuffer, request_len, &NdrCtx, &Ndr64Ctx)) return; + + // Unable to create a valid response from request + if (!(response_len = _Actions[_a].GetResponse(requestBuffer, rpcResponse, RpcAssocGroup, sock, &NdrCtx, &Ndr64Ctx, rpcRequestHeader.PacketType, ipstr))) return; + + response_len += sizeof(RPC_HEADER); + + memcpy(rpcResponseHeader, &rpcRequestHeader, sizeof(RPC_HEADER)); + + rpcResponseHeader->FragLength = LE16(response_len); + rpcResponseHeader->PacketType = _Actions[_a].ResponsePacketType; + + if (rpcResponseHeader->PacketType == RPC_PT_ALTERCONTEXT_ACK) + rpcResponseHeader->PacketFlags = RPC_PF_FIRST | RPC_PF_LAST; + + if (!_send(sock, responseBuffer, response_len)) return; + + if (DisconnectImmediately && rpcResponseHeader->PacketType == RPC_PT_RESPONSE) + shutdown(sock, VLMCSD_SHUT_RDWR); + } +} + + +/* RPC client functions */ + +static DWORD CallId = 2; // M$ starts with CallId 2. So we do the same. + + +/* + * Checks RPC header. Returns 0 on success. + * This is mainly for debugging a non Microsoft KMS server that uses its own RPC code. + */ +static int checkRpcHeader(const RPC_HEADER *const Header, const BYTE desiredPacketType, const PRINTFUNC p) +{ + int status = 0; + + if (Header->PacketType != desiredPacketType) + { + p("Fatal: Received wrong RPC packet type. Expected %u but got %u\n", + (uint32_t)desiredPacketType, + Header->PacketType + ); + status = !0; + } + + if (Header->DataRepresentation != BE32(0x10000000)) + { + p("Fatal: RPC response does not conform to Microsoft's limited support of DCE RPC\n"); + status = !0; + } + + if (Header->AuthLength != 0) + { + p("Fatal: RPC response requests authentication\n"); + status = !0; + } + + // vlmcsd does not support fragmented packets (not yet neccassary) + if ( (Header->PacketFlags & (RPC_PF_FIRST | RPC_PF_LAST)) != (RPC_PF_FIRST | RPC_PF_LAST) ) + { + p("Fatal: RPC packet flags RPC_PF_FIRST and RPC_PF_LAST are not both set.\n"); + status = !0; + } + + if (Header->PacketFlags & RPC_PF_CANCEL_PENDING) p("Warning: %s should not be set\n", "RPC_PF_CANCEL_PENDING"); + if (Header->PacketFlags & RPC_PF_RESERVED) p("Warning: %s should not be set\n", "RPC_PF_RESERVED"); + if (Header->PacketFlags & RPC_PF_NOT_EXEC) p("Warning: %s should not be set\n", "RPC_PF_NOT_EXEC"); + if (Header->PacketFlags & RPC_PF_MAYBE) p("Warning: %s should not be set\n", "RPC_PF_MAYBE"); + if (Header->PacketFlags & RPC_PF_OBJECT) p("Warning: %s should not be set\n", "RPC_PF_OBJECT"); + + if (Header->VersionMajor != 5 || Header->VersionMinor != 0) + { + p("Fatal: Expected RPC version 5.0 and got %u.%u\n", Header->VersionMajor, Header->VersionMinor); + status = !0; + } + + return status; +} + + +/* + * Checks an RPC response header. Does basic header checks by calling checkRpcHeader() + * and then does additional checks if response header complies with the respective request header. + * PRINTFUNC p can be anything that has the same prototype as printf. + * Returns 0 on success. + */ +static int checkRpcResponseHeader(const RPC_HEADER *const ResponseHeader, const RPC_HEADER *const RequestHeader, const BYTE desiredPacketType, const PRINTFUNC p) +{ + static int_fast8_t WineBugDetected = FALSE; + int status = checkRpcHeader(ResponseHeader, desiredPacketType, p); + + if (desiredPacketType == RPC_PT_BIND_ACK) + { + if ((ResponseHeader->PacketFlags & RPC_PF_MULTIPLEX) != (RequestHeader->PacketFlags & RPC_PF_MULTIPLEX)) + { + p("Warning: RPC_PF_MULTIPLEX of RPC request and response should match\n"); + } + } + else + { + if (ResponseHeader->PacketFlags & RPC_PF_MULTIPLEX) + { + p("Warning: %s should not be set\n", "RPC_PF_MULTIPLEX"); + } + } + + if (!status && ResponseHeader->CallId == LE32(1)) + { + if (!WineBugDetected) + { + p("Warning: Buggy RPC of Wine detected. Call Id of Response is always 1\n"); + WineBugDetected = TRUE; + } + } + else if (ResponseHeader->CallId != RequestHeader->CallId) + { + p("Fatal: Sent Call Id %u but received answer for Call Id %u\n", + (uint32_t)LE32(RequestHeader->CallId), + (uint32_t)LE32(ResponseHeader->CallId) + ); + + status = !0; + } + + return status; +} + +/* + * Initializes an RPC request header as needed for KMS, i.e. packet always fits in one fragment. + * size cannot be greater than fragment length negotiated during RPC bind. + */ +static void createRpcRequestHeader(RPC_HEADER* RequestHeader, BYTE packetType, WORD size) +{ + RequestHeader->PacketType = packetType; + RequestHeader->PacketFlags = RPC_PF_FIRST | RPC_PF_LAST; + RequestHeader->VersionMajor = 5; + RequestHeader->VersionMinor = 0; + RequestHeader->AuthLength = 0; + RequestHeader->DataRepresentation = BE32(0x10000000); // Little endian, ASCII charset, IEEE floating point + RequestHeader->CallId = LE32(CallId); + RequestHeader->FragLength = LE16(size); +} + + +/* + * Sends a KMS request via RPC and receives a response. + * Parameters are raw (encrypted) reqeuests / responses. + * Returns 0 on success. + */ +RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const size_t requestSize, BYTE **KmsResponse, size_t *const responseSize) +{ + #define MAX_EXCESS_BYTES 16 + RPC_HEADER *RequestHeader, ResponseHeader; + RPC_REQUEST64 *RpcRequest; + RPC_RESPONSE64 _Response; + int status = 0; + int_fast8_t useNdr64 = UseRpcNDR64 && firstPacketSent; + size_t size = sizeof(RPC_HEADER) + (useNdr64 ? sizeof(RPC_REQUEST64) : sizeof(RPC_REQUEST)) + requestSize; + size_t responseSize2; + + *KmsResponse = NULL; + + BYTE *_Request = (BYTE*)vlmcsd_malloc(size); + + RequestHeader = (RPC_HEADER*)_Request; + RpcRequest = (RPC_REQUEST64*)(_Request + sizeof(RPC_HEADER)); + + createRpcRequestHeader(RequestHeader, RPC_PT_REQUEST, size); + + // Increment CallId for next Request + CallId++; + + RpcRequest->Opnum = 0; + + if (useNdr64) + { + RpcRequest->ContextId = LE16(1); // We negotiate NDR64 always as context 1 + RpcRequest->AllocHint = LE32(requestSize + sizeof(RpcRequest->Ndr64)); + RpcRequest->Ndr64.DataLength = LE64((uint64_t)requestSize); + RpcRequest->Ndr64.DataSizeIs = LE64((uint64_t)requestSize); + memcpy(RpcRequest->Ndr64.Data, KmsRequest, requestSize); + } + else + { + RpcRequest->ContextId = 0; // We negotiate NDR32 always as context 0 + RpcRequest->AllocHint = LE32(requestSize + sizeof(RpcRequest->Ndr)); + RpcRequest->Ndr.DataLength = LE32(requestSize); + RpcRequest->Ndr.DataSizeIs = LE32(requestSize); + memcpy(RpcRequest->Ndr.Data, KmsRequest, requestSize); + } + + for(;;) + { + int bytesread; + + if (!_send(sock, _Request, size)) + { + errorout("\nFatal: Could not send RPC request\n"); + status = !0; + break; + } + + if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER))) + { + errorout("\nFatal: No RPC response received from server\n"); + status = !0; + break; + } + + if ((status = checkRpcResponseHeader(&ResponseHeader, RequestHeader, RPC_PT_RESPONSE, &errorout))) break; + + size = useNdr64 ? sizeof(RPC_RESPONSE64) : sizeof(RPC_RESPONSE); + + if (size > LE16(ResponseHeader.FragLength) - sizeof(ResponseHeader)) + size = LE16(ResponseHeader.FragLength) - sizeof(ResponseHeader); + + if (!_recv(sock, &_Response, size)) + { + errorout("\nFatal: RPC response is incomplete\n"); + status = !0; + break; + } + + if (_Response.CancelCount != 0) + { + errorout("\nFatal: RPC response cancel count is not 0\n"); + status = !0; + } + + if (_Response.ContextId != (useNdr64 ? LE16(1) : 0)) + { + errorout("\nFatal: RPC response context id %u is not bound\n", (unsigned int)LE16(_Response.ContextId)); + status = !0; + } + + int_fast8_t sizesMatch; + + if (useNdr64) + { + *responseSize = (size_t)LE64(_Response.Ndr64.DataLength); + responseSize2 = (size_t)LE64(_Response.Ndr64.DataSizeIs); + + if (!*responseSize || !_Response.Ndr64.DataSizeMax) + { + status = (int)LE32(_Response.Ndr64.status); + break; + } + + sizesMatch = (size_t)LE64(_Response.Ndr64.DataLength) == responseSize2; + } + else + { + *responseSize = (size_t)LE32(_Response.Ndr.DataLength); + responseSize2 = (size_t)LE32(_Response.Ndr.DataSizeIs); + + if (!*responseSize || !_Response.Ndr.DataSizeMax) + { + status = (int)LE32(_Response.Ndr.status); + break; + } + + sizesMatch = (size_t)LE32(_Response.Ndr.DataLength) == responseSize2; + } + + if (!sizesMatch) + { + errorout("\nFatal: NDR data length (%u) does not match NDR data size (%u)\n", + (uint32_t)*responseSize, + (uint32_t)LE32(_Response.Ndr.DataSizeIs) + ); + + status = !0; + } + + *KmsResponse = (BYTE*)vlmcsd_malloc(*responseSize + MAX_EXCESS_BYTES); + + // If RPC stub is too short, assume missing bytes are zero (same ill behavior as MS RPC) + memset(*KmsResponse, 0, *responseSize + MAX_EXCESS_BYTES); + + // Read up to 16 bytes more than bytes expected to detect faulty KMS emulators + if ((bytesread = recv(sock, (char*)*KmsResponse, *responseSize + MAX_EXCESS_BYTES, 0)) < (int)*responseSize) + { + errorout("\nFatal: No or incomplete KMS response received. Required %u bytes but only got %i\n", + (uint32_t)*responseSize, + (int32_t)(bytesread < 0 ? 0 : bytesread) + ); + + status = !0; + break; + } + + DWORD *pReturnCode; + + size_t len = *responseSize + (useNdr64 ? sizeof(_Response.Ndr64) : sizeof(_Response.Ndr)) + sizeof(*pReturnCode); + size_t pad = ((~len & 3) + 1) & 3; + + if (len + pad != LE32(_Response.AllocHint)) + { + errorout("\nWarning: RPC stub size is %u, should be %u (probably incorrect padding)\n", (uint32_t)LE32(_Response.AllocHint), (uint32_t)(len + pad)); + } + else + { + size_t i; + for (i = 0; i < pad; i++) + { + if (*(*KmsResponse + *responseSize + sizeof(*pReturnCode) + i)) + { + errorout("\nWarning: RPC stub data not padded to zeros according to Microsoft standard\n"); + break; + } + } + } + + pReturnCode = (DWORD*)(*KmsResponse + *responseSize + pad); + status = LE32(UA32(pReturnCode)); + + if (status) errorout("\nWarning: RPC stub data reported Error %u\n", (uint32_t)status); + + break; + } + + free(_Request); + firstPacketSent = TRUE; + return status; + #undef MAX_EXCESS_BYTES +} + + +static int_fast8_t IsNullGuid(BYTE* guidPtr) +{ + int_fast8_t i; + + for (i = 0; i < 16; i++) + { + if (guidPtr[i]) return FALSE; + } + + return TRUE; +} + +/* + * Perform RPC client bind. Accepts a connected client socket. + * Returns 0 on success. RPC binding is required before any payload can be + * exchanged. It negotiates about protocol details. + */ +RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const int_fast8_t verbose) +{ + RPC_HEADER *RequestHeader, ResponseHeader; + RPC_BIND_REQUEST *bindRequest; + RPC_BIND_RESPONSE *bindResponse; + int status; + WORD ctxItems = 1 + (packetType == RPC_PT_BIND_REQ ? UseRpcNDR64 + UseRpcBTFN : 0); + size_t rpcBindSize = (sizeof(RPC_HEADER) + sizeof(RPC_BIND_REQUEST) + (ctxItems - 1) * sizeof(bindRequest->CtxItems[0])); + WORD ctxIndex = 0; + WORD i; + WORD CtxBTFN = (WORD)~0, CtxNDR64 = (WORD)~0; + BYTE _Request[rpcBindSize]; + + RequestHeader = (RPC_HEADER*)_Request; + bindRequest = (RPC_BIND_REQUEST* )(_Request + sizeof(RPC_HEADER)); + + createRpcRequestHeader(RequestHeader, packetType, rpcBindSize); + RequestHeader->PacketFlags |= UseMultiplexedRpc ? RPC_PF_MULTIPLEX : 0; + + bindRequest->AssocGroup = 0; + bindRequest->MaxRecvFrag = bindRequest->MaxXmitFrag = LE16(5840); + bindRequest->NumCtxItems = LE32(ctxItems); + + // data that is identical in all Ctx items + for (i = 0; i < ctxItems; i++) + { + bindRequest->CtxItems[i].ContextId = LE16(i); + bindRequest->CtxItems[i].InterfaceVerMajor = LE16(1); + bindRequest->CtxItems[i].InterfaceVerMinor = 0; + bindRequest->CtxItems[i].NumTransItems = LE16(1); + bindRequest->CtxItems[i].SyntaxVersion = i ? LE32(1) : LE32(2); + + memcpy(&bindRequest->CtxItems[i].InterfaceUUID, InterfaceUuid, sizeof(GUID)); + } + + memcpy(&bindRequest->CtxItems[0].TransferSyntax, TransferSyntaxNDR32, sizeof(GUID)); + + if (UseRpcNDR64 && packetType == RPC_PT_BIND_REQ) + { + memcpy(&bindRequest->CtxItems[++ctxIndex].TransferSyntax, TransferSyntaxNDR64, sizeof(GUID)); + CtxNDR64 = ctxIndex; + } + + if (UseRpcBTFN && packetType == RPC_PT_BIND_REQ) + { + memcpy(&bindRequest->CtxItems[++ctxIndex].TransferSyntax, BindTimeFeatureNegotiation, sizeof(GUID)); + CtxBTFN = ctxIndex; + } + + if (!_send(sock, _Request, rpcBindSize)) + { + errorout("\nFatal: Sending RPC bind request failed\n"); + return !0; + } + + if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER))) + { + errorout("\nFatal: Did not receive a response from server\n"); + return !0; + } + + if ((status = checkRpcResponseHeader + ( + &ResponseHeader, + RequestHeader, + packetType == RPC_PT_BIND_REQ ? RPC_PT_BIND_ACK : RPC_PT_ALTERCONTEXT_ACK, + &errorout + ))) + { + return status; + } + + bindResponse = (RPC_BIND_RESPONSE*)vlmcsd_malloc(LE16(ResponseHeader.FragLength) - sizeof(RPC_HEADER)); + BYTE* bindResponseBytePtr = (BYTE*)bindResponse; + + if (!_recv(sock, bindResponse, LE16(ResponseHeader.FragLength) - sizeof(RPC_HEADER))) + { + errorout("\nFatal: Incomplete RPC bind acknowledgement received\n"); + free(bindResponseBytePtr); + return !0; + } + else + { + /* + * checking, whether a bind or alter context response is as expected. + * This check is very strict and checks whether a KMS emulator behaves exactly the same way + * as Microsoft's RPC does. + */ + status = 0; + + if (bindResponse->SecondaryAddressLength < LE16(3)) + bindResponse = (RPC_BIND_RESPONSE*)(bindResponseBytePtr - 4); + + if (bindResponse->NumResults != bindRequest->NumCtxItems) + { + errorout("\nFatal: Expected %u CTX items but got %u\n", + (uint32_t)LE32(bindRequest->NumCtxItems), + (uint32_t)LE32(bindResponse->NumResults) + ); + + status = !0; + } + + for (i = 0; i < ctxItems; i++) + { + const char* transferSyntaxName = + i == CtxBTFN ? "BTFN" : i == CtxNDR64 ? "NDR64" : "NDR32"; + + if (bindResponse->Results[i].AckResult == RPC_BIND_NACK) // transfer syntax was declined + { + if (!IsNullGuid((BYTE*)&bindResponse->Results[i].TransferSyntax)) + { + errorout( + "\nWarning: Rejected transfer syntax %s did not return NULL Guid\n", + transferSyntaxName + ); + } + + if (bindResponse->Results[i].SyntaxVersion) + { + errorout( + "\nWarning: Rejected transfer syntax %s did not return syntax version 0 but %u\n", + transferSyntaxName, + LE32(bindResponse->Results[i].SyntaxVersion) + ); + } + + if (bindResponse->Results[i].AckReason == RPC_ABSTRACTSYNTAX_UNSUPPORTED) + { + errorout( + "\nWarning: Transfer syntax %s does not support KMS activation\n", + transferSyntaxName + ); + } + else if (bindResponse->Results[i].AckReason != RPC_SYNTAX_UNSUPPORTED) + { + errorout( + "\nWarning: Rejected transfer syntax %s did not return ack reason RPC_SYNTAX_UNSUPPORTED\n", + transferSyntaxName + ); + } + + continue; + } + + if (i == CtxBTFN) // BTFN + { + if (bindResponse->Results[i].AckResult != RPC_BIND_ACK) + { + errorout("\nWarning: BTFN did not respond with RPC_BIND_ACK or RPC_BIND_NACK\n"); + } + + if (bindResponse->Results[i].AckReason != LE16(3)) + { + errorout("\nWarning: BTFN did not return expected feature mask 0x3 but 0x%X\n", (unsigned int)LE16(bindResponse->Results[i].AckReason)); + } + + if (verbose) printf("... BTFN "); + RpcFlags.HasBTFN = TRUE; + + continue; + } + + // NDR32 or NDR64 Ctx + if (bindResponse->Results[i].AckResult != RPC_BIND_ACCEPT) + { + errorout( + "\nFatal: transfer syntax %s returned an invalid status, neither RPC_BIND_ACCEPT nor RPC_BIND_NACK\n", + transferSyntaxName + ); + + status = !0; + } + + if (!IsEqualGUID(&bindResponse->Results[i].TransferSyntax, &bindRequest->CtxItems[i].TransferSyntax)) + { + errorout( + "\nFatal: Transfer syntax of RPC bind request and response does not match\n" + ); + + status = !0; + } + + if (bindResponse->Results[i].SyntaxVersion != bindRequest->CtxItems[i].SyntaxVersion) + { + errorout("\nFatal: Expected transfer syntax version %u for %s but got %u\n", + (uint32_t)LE32(bindRequest->CtxItems[0].SyntaxVersion), + transferSyntaxName, + (uint32_t)LE32(bindResponse->Results[0].SyntaxVersion) + ); + + status = !0; + } + + // The ack reason field is actually undefined here but Microsoft sets this to 0 + if (bindResponse->Results[i].AckReason != 0) + { + errorout( + "\nWarning: Ack reason should be 0 but is %u\n", + LE16(bindResponse->Results[i].AckReason) + ); + } + + if (!status) + { + if (i == CtxNDR64) + { + RpcFlags.HasNDR64 = TRUE; + if (verbose) printf("... NDR64 "); + } + if (!i) + { + RpcFlags.HasNDR32 = TRUE; + if (verbose) printf("... NDR32 "); + } + + } + } + } + + free(bindResponseBytePtr); + + if (!RpcFlags.HasNDR64 && !RpcFlags.HasNDR32) + { + errorout("\nFatal: Could neither negotiate NDR32 nor NDR64 with the RPC server\n"); + status = !0; + } + + return status; +} + +RpcStatus rpcBindClient(const RpcCtx sock, const int_fast8_t verbose) +{ + firstPacketSent = FALSE; + RpcFlags.mask = 0; + + RpcStatus status = + rpcBindOrAlterClientContext(sock, RPC_PT_BIND_REQ, verbose); + + if (status) return status; + + if (!RpcFlags.HasNDR32) + status = rpcBindOrAlterClientContext(sock, RPC_PT_ALTERCONTEXT_REQ, verbose); + + return status; +} + +#endif // USE_MSRPC +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#if !defined(_CRYPTO_OPENSSL) && !defined(_CRYPTO_POLARSSL) && !defined(_CRYPTO_WINDOWS) +#include "crypto_internal.h" +#include "endian.h" + +#define F0(x, y, z) ( ((x) & (y)) | (~(x) & (z)) ) +#define F1(x, y, z) ( ((x) & (y)) | ((x) & (z)) | ((y) & (z)) ) + +#define SI1(x) ( ROR32(x, 2 ) ^ ROR32(x, 13) ^ ROR32(x, 22) ) +#define SI2(x) ( ROR32(x, 6 ) ^ ROR32(x, 11) ^ ROR32(x, 25) ) +#define SI3(x) ( ROR32(x, 7 ) ^ ROR32(x, 18) ^ ((x) >> 3 ) ) +#define SI4(x) ( ROR32(x, 17) ^ ROR32(x, 19) ^ ((x) >> 10) ) + +static const DWORD k[] = { + 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, + 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, + 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, + 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, + 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, + 0x06CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, + 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, + 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, + 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, + 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, + 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 +}; + + +static void Sha256Init(Sha256Ctx *Ctx) +{ + Ctx->State[0] = 0x6A09E667; + Ctx->State[1] = 0xBB67AE85; + Ctx->State[2] = 0x3C6EF372; + Ctx->State[3] = 0xA54FF53A; + Ctx->State[4] = 0x510E527F; + Ctx->State[5] = 0x9B05688C; + Ctx->State[6] = 0x1F83D9AB; + Ctx->State[7] = 0x5BE0CD19; + Ctx->Len = 0; +} + + +static void Sha256ProcessBlock(Sha256Ctx *Ctx, BYTE *block) +{ + unsigned int i; + DWORD w[64], temp1, temp2; + DWORD a = Ctx->State[0]; + DWORD b = Ctx->State[1]; + DWORD c = Ctx->State[2]; + DWORD d = Ctx->State[3]; + DWORD e = Ctx->State[4]; + DWORD f = Ctx->State[5]; + DWORD g = Ctx->State[6]; + DWORD h = Ctx->State[7]; + + for (i = 0; i < 16; i++) + //w[ i ] = GET_UAA32BE(block, i); + w[i] = BE32(((DWORD*)block)[i]); + + for (i = 16; i < 64; i++) + w[ i ] = SI4(w[ i - 2 ]) + w[ i - 7 ] + SI3(w[ i - 15 ]) + w[ i - 16 ]; + + for (i = 0; i < 64; i++) + { + temp1 = h + SI2(e) + F0(e, f, g) + k[ i ] + w[ i ]; + temp2 = SI1(a) + F1(a, b, c); + + h = g; + g = f; + f = e; + e = d + temp1; + d = c; + c = b; + b = a; + a = temp1 + temp2; + } + + Ctx->State[0] += a; + Ctx->State[1] += b; + Ctx->State[2] += c; + Ctx->State[3] += d; + Ctx->State[4] += e; + Ctx->State[5] += f; + Ctx->State[6] += g; + Ctx->State[7] += h; +} + + +static void Sha256Update(Sha256Ctx *Ctx, BYTE *data, size_t len) +{ + unsigned int b_len = Ctx->Len & 63, + r_len = (b_len ^ 63) + 1; + + Ctx->Len += len; + + if ( len < r_len ) + { + memcpy(Ctx->Buffer + b_len, data, len); + return; + } + + if ( r_len < 64 ) + { + memcpy(Ctx->Buffer + b_len, data, r_len); + len -= r_len; + data += r_len; + Sha256ProcessBlock(Ctx, Ctx->Buffer); + } + + for (; len >= 64; len -= 64, data += 64) + Sha256ProcessBlock(Ctx, data); + + if ( len ) memcpy(Ctx->Buffer, data, len); +} + + +static void Sha256Finish(Sha256Ctx *Ctx, BYTE *hash) +{ + unsigned int i, b_len = Ctx->Len & 63; + + Ctx->Buffer[ b_len ] = 0x80; + if ( b_len ^ 63 ) memset(Ctx->Buffer + b_len + 1, 0, b_len ^ 63); + + if ( b_len >= 56 ) + { + Sha256ProcessBlock(Ctx, Ctx->Buffer); + memset(Ctx->Buffer, 0, 56); + } + + //PUT_UAA64BE(Ctx->Buffer, (unsigned long long)(Ctx->Len * 8), 7); + ((uint64_t*)Ctx->Buffer)[7] = BE64((uint64_t)Ctx->Len << 3); + Sha256ProcessBlock(Ctx, Ctx->Buffer); + + for (i = 0; i < 8; i++) + //PUT_UAA32BE(hash, Ctx->State[i], i); + ((DWORD*)hash)[i] = BE32(Ctx->State[i]); + +} + + +void Sha256(BYTE *data, size_t len, BYTE *hash) +{ + Sha256Ctx Ctx; + + Sha256Init(&Ctx); + Sha256Update(&Ctx, data, len); + Sha256Finish(&Ctx, hash); +} + + +static void _Sha256HmacInit(Sha256HmacCtx *Ctx, BYTE *key, size_t klen) +{ + BYTE IPad[64]; + unsigned int i; + + memset(IPad, 0x36, sizeof(IPad)); + memset(Ctx->OPad, 0x5C, sizeof(Ctx->OPad)); + + if ( klen > 64 ) + { + BYTE *temp = (BYTE*)alloca(32); + Sha256(key, klen, temp); + klen = 32; + key = temp; + } + + for (i = 0; i < klen; i++) + { + IPad[ i ] ^= key[ i ]; + Ctx->OPad[ i ] ^= key[ i ]; + } + + Sha256Init(&Ctx->ShaCtx); + Sha256Update(&Ctx->ShaCtx, IPad, sizeof(IPad)); +} + + +static void _Sha256HmacUpdate(Sha256HmacCtx *Ctx, BYTE *data, size_t len) +{ + Sha256Update(&Ctx->ShaCtx, data, len); +} + + +static void _Sha256HmacFinish(Sha256HmacCtx *Ctx, BYTE *hmac) +{ + BYTE temp[32]; + + Sha256Finish(&Ctx->ShaCtx, temp); + Sha256Init(&Ctx->ShaCtx); + Sha256Update(&Ctx->ShaCtx, Ctx->OPad, sizeof(Ctx->OPad)); + Sha256Update(&Ctx->ShaCtx, temp, sizeof(temp)); + Sha256Finish(&Ctx->ShaCtx, hmac); +} + + + +int_fast8_t Sha256Hmac(BYTE* key, BYTE* restrict data, DWORD len, BYTE* restrict hmac) +{ + Sha256HmacCtx Ctx; + _Sha256HmacInit(&Ctx, key, 16); + _Sha256HmacUpdate(&Ctx, data, len); + _Sha256HmacFinish(&Ctx, hmac); + return TRUE; +} + + +#endif // No external Crypto + +/* + * dns_srv.c + * + * This file contains the code for KMS SRV record lookup in DNS (_vlmcs._tcp.example.com IN SRV 0 0 1688 mykms.example.com) + * + */ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef NO_DNS + +#include "dns_srv.h" + +#include +#include +#ifndef _WIN32 +#include +#include +#include +#include +#include +//#ifndef DNS_PARSER_INTERNAL +#if __ANDROID__ +#include +#include "nameser.h" +#include "resolv.h" +#else // other Unix non-Android +#include +#include +#include +#endif // other Unix non-Android +//#endif // DNS_PARSER_INTERNAL +#else // WIN32 +#include +#endif // WIN32 + +#include "helpers.h" +#include "output.h" +#include "endian.h" + +#if defined(DNS_PARSER_INTERNAL) && !defined(_WIN32) + +#include "ns_name.h" +#include "ns_parse.h" + +// Define macros to redirect DNS parser functions to internal versions + +#undef ns_msg +#undef ns_initparse +#undef ns_parserr +#undef ns_rr +#undef ns_name_uncompress +#undef ns_msg_base +#undef ns_msg_end +#undef ns_rr_rdata +#undef ns_rr_type +#undef ns_msg_count +#undef ns_rr_class +#undef ns_s_an +#define ns_msg ns_msg_vlmcsd +#define ns_initparse ns_initparse_vlmcsd +#define ns_parserr ns_parserr_vlmcsd +#define ns_rr ns_rr_vlmcsd +#define ns_name_uncompress ns_name_uncompress_vlmcsd +#define ns_msg_base ns_msg_base_vlmcsd +#define ns_msg_end ns_msg_end_vlmcsd +#define ns_rr_rdata ns_rr_rdata_vlmcsd +#define ns_rr_type ns_rr_type_vlmcsd +#define ns_msg_count ns_msg_count_vlmcsd +#define ns_rr_class ns_rr_class_vlmcsd +#define ns_s_an ns_s_an_vlmcsd + +#ifndef NS_MAXLABEL +#define NS_MAXLABEL 63 +#endif + +#endif // defined(DNS_PARSER_INTERNAL) && !defined(_WIN32) + + +//TODO: maybe move to helpers.c +static unsigned int isqrt(unsigned int n) +{ + unsigned int c = 0x8000; + unsigned int g = 0x8000; + + for(;;) + { + if(g*g > n) + g ^= c; + + c >>= 1; + + if(c == 0) return g; + + g |= c; + } +} + + +/* + * Compare function for qsort to sort SRV records by priority and weight + * random_weight must be product of weight from SRV record and square root of a random number + */ +static int kmsServerListCompareFunc1(const void* a, const void* b) +{ + if ( !a && !b) return 0; + if ( a && !b) return -1; + if ( !a && b) return 1; + + int priority_order = (int)((*(kms_server_dns_ptr*)a)->priority) - ((int)(*(kms_server_dns_ptr*)b)->priority); + + if (priority_order) return priority_order; + + return (int)((*(kms_server_dns_ptr*)b)->random_weight) - ((int)(*(kms_server_dns_ptr*)a)->random_weight); +} + +/* Sort resulting SRV records */ +void sortSrvRecords(kms_server_dns_ptr* serverlist, const int answers) +{ + int i; + + for (i = 0; i < answers; i++) + { + serverlist[i]->random_weight = (rand32() % 256) * isqrt(serverlist[i]->weight * 1000); + } + + qsort(serverlist, answers, sizeof(kms_server_dns_ptr), kmsServerListCompareFunc1); +} + + +#define RECEIVE_BUFFER_SIZE 2048 +#ifndef _WIN32 // UNIX resolver + +/* + * Retrieves a raw DNS answer (a buffer of what came over the net) + * Result must be parsed + */ +static int getDnsRawAnswer(const char *restrict query, unsigned char** receive_buffer) +{ + if (res_init() < 0) + { + errorout("Cannot initialize resolver: %s", strerror(errno)); + return 0; + } + + //if(!(*receive_buffer = (unsigned char*)malloc(RECEIVE_BUFFER_SIZE))) OutOfMemory(); + *receive_buffer = (unsigned char*)vlmcsd_malloc(RECEIVE_BUFFER_SIZE); + + int bytes_received; + + if (*query == '.') + { +# if __ANDROID__ || __GLIBC__ /* including __UCLIBC__*/ || __APPLE__ || __CYGWIN__ || __FreeBSD__ || __NetBSD__ || __DragonFly__ || __OpenBSD__ || __sun__ + bytes_received = res_querydomain("_vlmcs._tcp", query + 1, ns_c_in, ns_t_srv, *receive_buffer, RECEIVE_BUFFER_SIZE); +# else + char* querystring = (char*)alloca(strlen(query) + 12); + strcpy(querystring, "_vlmcs._tcp"); + strcat(querystring, query); + bytes_received = res_query(querystring, C_IN, ns_t_srv, *receive_buffer, RECEIVE_BUFFER_SIZE); +# endif + } + else + { + bytes_received = res_search("_vlmcs._tcp", ns_c_in, ns_t_srv, *receive_buffer, RECEIVE_BUFFER_SIZE); + } + + if (bytes_received < 0) + { + errorout("Fatal: DNS query to %s%s failed: %s\n", "_vlmcs._tcp", *query == '.' ? query : "", hstrerror(h_errno)); + return 0; + } + + return bytes_received; +} + +/* + * Retrieves an unsorted array of SRV records (Unix / Posix) + */ +int getKmsServerList(kms_server_dns_ptr** serverlist, const char *restrict query) +{ + unsigned char* receive_buffer; + *serverlist = NULL; + + int bytes_received = getDnsRawAnswer(query, &receive_buffer); + + if (bytes_received == 0) return 0; + + ns_msg msg; + + if (ns_initparse(receive_buffer, bytes_received, &msg) < 0) + { + errorout("Fatal: Incorrect DNS response: %s\n", strerror(errno)); + free(receive_buffer); + return 0; + } + + uint16_t i, answers = ns_msg_count(msg, ns_s_an); + //if(!(*serverlist = (kms_server_dns_ptr*)malloc(answers * sizeof(kms_server_dns_ptr)))) OutOfMemory(); + *serverlist = (kms_server_dns_ptr*)malloc(answers * sizeof(kms_server_dns_ptr)); + + memset(*serverlist, 0, answers * sizeof(kms_server_dns_ptr)); + + for (i = 0; i < answers; i++) + { + ns_rr rr; + + if (ns_parserr(&msg, ns_s_an, i, &rr) < 0) + { + errorout("Warning: Error in DNS resource record: %s\n", strerror(errno)); + continue; + } + + if (ns_rr_type(rr) != ns_t_srv) + { + errorout("Warning: DNS server returned non-SRV record\n"); + continue; + } + + if (ns_rr_class(rr) != ns_c_in) + { + errorout("Warning: DNS server returned non-IN class record\n"); + continue; + } + + dns_srv_record_ptr srvrecord = (dns_srv_record_ptr)ns_rr_rdata(rr); + kms_server_dns_ptr kms_server = (kms_server_dns_ptr)vlmcsd_malloc(sizeof(kms_server_dns_t)); + + (*serverlist)[i] = kms_server; + + if (ns_name_uncompress(ns_msg_base(msg), ns_msg_end(msg), srvrecord->name, kms_server->serverName, sizeof(kms_server->serverName)) < 0) + { + errorout("Warning: No valid DNS name returned in SRV record: %s\n", strerror(errno)); + continue; + } + + sprintf(kms_server->serverName + strlen(kms_server->serverName), ":%hu", GET_UA16BE(&srvrecord->port)); + kms_server->priority = GET_UA16BE(&srvrecord->priority); + kms_server->weight = GET_UA16BE(&srvrecord->weight); + + } + + free(receive_buffer); + return answers; +} + +#else // WIN32 (Windows Resolver) + +/* + * Retrieves an unsorted array of SRV records (Windows) + */ +int getKmsServerList(kms_server_dns_ptr** serverlist, const char *const restrict query) +{ +# define MAX_DNS_NAME_SIZE 254 + *serverlist = NULL; + PDNS_RECORD receive_buffer; + char dnsDomain[MAX_DNS_NAME_SIZE]; + char FqdnQuery[MAX_DNS_NAME_SIZE]; + DWORD size = MAX_DNS_NAME_SIZE; + DNS_STATUS result; + int answers = 0; + PDNS_RECORD dns_iterator; + + if (*query == '-') + { + if (!GetComputerNameExA(ComputerNamePhysicalDnsDomain, dnsDomain, &size)) + { + errorout("Fatal: Could not determine computer's DNS name: %s\n", vlmcsd_strerror(GetLastError())); + return 0; + } + + strcpy(FqdnQuery, "_vlmcs._tcp."); + strncat(FqdnQuery, dnsDomain, MAX_DNS_NAME_SIZE - 12); + } + else + { + strcpy(FqdnQuery, "_vlmcs._tcp"); + strncat(FqdnQuery, query, MAX_DNS_NAME_SIZE - 11); + } + + if ((result = DnsQuery_UTF8(FqdnQuery, DNS_TYPE_SRV, 0, NULL, &receive_buffer, NULL)) != 0) + { + errorout("Fatal: DNS query to %s failed: %s\n", FqdnQuery, vlmcsd_strerror(result)); + return 0; + } + + for (dns_iterator = receive_buffer; dns_iterator; dns_iterator = dns_iterator->pNext) + { + if (dns_iterator->Flags.S.Section != 1) continue; + + if (dns_iterator->wType != DNS_TYPE_SRV) + { + errorout("Warning: DNS server returned non-SRV record\n"); + continue; + } + + answers++; + } + + *serverlist = (kms_server_dns_ptr*)vlmcsd_malloc(answers * sizeof(kms_server_dns_ptr)); + + for (answers = 0, dns_iterator = receive_buffer; dns_iterator; dns_iterator = dns_iterator->pNext) + { + if (dns_iterator->wType != DNS_TYPE_SRV) continue; + + kms_server_dns_ptr kms_server = (kms_server_dns_ptr)vlmcsd_malloc(sizeof(kms_server_dns_t)); + + memset(kms_server, 0, sizeof(kms_server_dns_t)); + + snprintf(kms_server->serverName, sizeof(kms_server->serverName), "%s:%hu", dns_iterator->Data.SRV.pNameTarget, dns_iterator->Data.SRV.wPort); + kms_server->priority = dns_iterator->Data.SRV.wPriority; + kms_server->weight = dns_iterator->Data.SRV.wWeight; + + (*serverlist)[answers++] = kms_server; + } + + //sortSrvRecords(*serverlist, answers, NoSrvRecordPriority); + + DnsRecordListFree(receive_buffer, DnsFreeRecordList); + + return answers; +# undef MAX_DNS_NAME_SIZE +} +#endif // _WIN32 +#undef RECEIVE_BUFFER_SIZE +#endif // NO_DNS + + +/* + * Copyright (c) 1996,1999 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +/* + * Modified by Hotbird64 for use with vlmcs. + */ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifdef DNS_PARSER_INTERNAL +#ifndef NO_DNS + +/* Import. */ + +#include +#include +#include + +#include "types.h" +#include "endian.h" +#include "ns_name.h" +#include "ns_parse.h" + +/* Macros. */ + +#define NS_GET16_VLMCSD(s, cp) do { \ + (s) = GET_UA16BE(cp); \ + (cp) += NS_INT16SZ; \ +} while (0) + +#define NS_GET32_VLMCSD(l, cp) do { \ + (l) = GET_UA32BE(cp); \ + (cp) += NS_INT32SZ; \ +} while (0) + +#define RETERR(err) do { errno = (err); return (-1); } while (0) + +/* Forward. */ + +static void setsection_vlmcsd(ns_msg_vlmcsd *msg, ns_sect_vlmcsd sect); + + +static int dn_skipname_vlmcsd(const unsigned char *s, const unsigned char *end) +{ + const unsigned char *p; + for (p=s; p=192) + {if (p+1 0; count--) { + int b, rdlength; + + b = dn_skipname_vlmcsd(ptr, eom); + if (b < 0) + RETERR(EMSGSIZE); + ptr += b/*Name*/ + NS_INT16SZ/*Type*/ + NS_INT16SZ/*Class*/; + if (section != ns_s_qd_vlmcsd) { + if (ptr + NS_INT32SZ + NS_INT16SZ > eom) + RETERR(EMSGSIZE); + ptr += NS_INT32SZ/*TTL*/; + NS_GET16_VLMCSD(rdlength, ptr); + ptr += rdlength/*RData*/; + } + } + if (ptr > eom) + RETERR(EMSGSIZE); + return (ptr - optr); +} + +int +ns_initparse_vlmcsd(const uint8_t *msg, int msglen, ns_msg_vlmcsd *handle) { + const uint8_t *eom = msg + msglen; + int i; + + memset(handle, 0x5e, sizeof *handle); + handle->_msg = msg; + handle->_eom = eom; + if (msg + NS_INT16SZ > eom) + RETERR(EMSGSIZE); + NS_GET16_VLMCSD(handle->_id, msg); + if (msg + NS_INT16SZ > eom) + RETERR(EMSGSIZE); + NS_GET16_VLMCSD(handle->_flags, msg); + for (i = 0; i < ns_s_max_vlmcsd; i++) { + if (msg + NS_INT16SZ > eom) + RETERR(EMSGSIZE); + NS_GET16_VLMCSD(handle->_counts[i], msg); + } + for (i = 0; i < ns_s_max_vlmcsd; i++) + if (handle->_counts[i] == 0) + handle->_sections[i] = NULL; + else { + int b = ns_skiprr_vlmcsd(msg, eom, (ns_sect_vlmcsd)i, + handle->_counts[i]); + + if (b < 0) + return (-1); + handle->_sections[i] = msg; + msg += b; + } + if (msg > eom) + RETERR(EMSGSIZE); + handle->_eom = msg; + setsection_vlmcsd(handle, ns_s_max_vlmcsd); + return (0); +} + +int +ns_parserr_vlmcsd(ns_msg_vlmcsd *handle, ns_sect_vlmcsd section, int rrnum, ns_rr_vlmcsd *rr) { + int b; + + /* Make section right. */ + if (section >= ns_s_max_vlmcsd) + RETERR(ENODEV); + if (section != handle->_sect) + setsection_vlmcsd(handle, section); + + /* Make rrnum right. */ + if (rrnum == -1) + rrnum = handle->_rrnum; + if (rrnum < 0 || rrnum >= handle->_counts[(int)section]) + RETERR(ENODEV); + if (rrnum < handle->_rrnum) + setsection_vlmcsd(handle, section); + if (rrnum > handle->_rrnum) { + b = ns_skiprr_vlmcsd(handle->_msg_ptr, handle->_eom, section, + rrnum - handle->_rrnum); + + if (b < 0) + return (-1); + handle->_msg_ptr += b; + handle->_rrnum = rrnum; + } + + /* Do the parse. */ + b = ns_name_uncompress_vlmcsd(handle->_msg, handle->_eom, + handle->_msg_ptr, rr->name, NS_MAXDNAME); + if (b < 0) + return (-1); + handle->_msg_ptr += b; + if (handle->_msg_ptr + NS_INT16SZ + NS_INT16SZ > handle->_eom) + RETERR(EMSGSIZE); + NS_GET16_VLMCSD(rr->type, handle->_msg_ptr); + NS_GET16_VLMCSD(rr->rr_class, handle->_msg_ptr); + if (section == ns_s_qd_vlmcsd) { + rr->ttl = 0; + rr->rdlength = 0; + rr->rdata = NULL; + } else { + if (handle->_msg_ptr + NS_INT32SZ + NS_INT16SZ > handle->_eom) + RETERR(EMSGSIZE); + NS_GET32_VLMCSD(rr->ttl, handle->_msg_ptr); + NS_GET16_VLMCSD(rr->rdlength, handle->_msg_ptr); + if (handle->_msg_ptr + rr->rdlength > handle->_eom) + RETERR(EMSGSIZE); + rr->rdata = handle->_msg_ptr; + handle->_msg_ptr += rr->rdlength; + } + if (++handle->_rrnum > handle->_counts[(int)section]) + setsection_vlmcsd(handle, (ns_sect_vlmcsd)((int)section + 1)); + + /* All done. */ + return (0); +} + +/* Private. */ + +static void +setsection_vlmcsd(ns_msg_vlmcsd *msg, ns_sect_vlmcsd sect) { + msg->_sect = sect; + if (sect == ns_s_max_vlmcsd) { + msg->_rrnum = -1; + msg->_msg_ptr = NULL; + } else { + msg->_rrnum = 0; + msg->_msg_ptr = msg->_sections[(int)sect]; + } +} + +#endif // !NO_DNS +#endif // DNS_PARSER_INTERNAL +/* + * Copyright (c) 1996,1999 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +/* + * Modified by Hotbird64 for use with vlmcs. + */ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifdef DNS_PARSER_INTERNAL +#ifndef NO_DNS + +#include +#include +#include +#include +#include +#include +#include + +#include "types.h" +#include "ns_name.h" + +#ifdef SPRINTF_CHAR +# define SPRINTF(x) strlen(sprintf/**/x) +#else +# define SPRINTF(x) ((size_t)sprintf x) +#endif + +#define NS_TYPE_ELT 0x40 /* EDNS0 extended label type */ +#define DNS_LABELTYPE_BITSTRING 0x41 + +#define NS_MAXCDNAME 255 +#define NS_CMPRSFLGS 0xc0 + +/* Data. */ + +static char digits[] = "0123456789"; + + +/* Forward. */ + +static int special_vlmcsd(int); +static int printable_vlmcsd(int); +static int labellen_vlmcsd(const uint8_t *); +static int decode_bitstring_vlmcsd(const char **, char *, const char *); + +/* + * ns_name_ntop(src, dst, dstsiz) + * Convert an encoded domain name to printable ascii as per RFC1035. + * return: + * Number of bytes written to buffer, or -1 (with errno set) + * notes: + * The root is returned as "." + * All other domains are returned in non absolute form + */ +static int +ns_name_ntop_vlmcsd(const uint8_t *src, char *dst, size_t dstsiz) +{ + const uint8_t *cp; + char *dn, *eom; + uint8_t c; + uint32_t n; + int l; + + cp = src; + dn = dst; + eom = dst + dstsiz; + + while ((n = *cp++) != 0) { + if ((n & NS_CMPRSFLGS) == NS_CMPRSFLGS) { + /* Some kind of compression pointer. */ + errno = EMSGSIZE; + return (-1); + } + if (dn != dst) { + if (dn >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = '.'; + } + if ((l = labellen_vlmcsd(cp - 1)) < 0) { + errno = EMSGSIZE; /* XXX */ + return(-1); + } + if (dn + l >= eom) { + errno = EMSGSIZE; + return (-1); + } + if ((n & NS_CMPRSFLGS) == NS_TYPE_ELT) { + int m; + + if (n != DNS_LABELTYPE_BITSTRING) { + /* XXX: labellen should reject this case */ + errno = EINVAL; + return(-1); + } + if ((m = decode_bitstring_vlmcsd((const char **)&cp, dn, eom)) < 0) + { + errno = EMSGSIZE; + return(-1); + } + dn += m; + continue; + } + for ((void)NULL; l > 0; l--) { + c = *cp++; + if (special_vlmcsd(c)) { + if (dn + 1 >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = '\\'; + *dn++ = (char)c; + } else if (!printable_vlmcsd(c)) { + if (dn + 3 >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = '\\'; + *dn++ = digits[c / 100]; + *dn++ = digits[(c % 100) / 10]; + *dn++ = digits[c % 10]; + } else { + if (dn >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = (char)c; + } + } + } + if (dn == dst) { + if (dn >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = '.'; + } + if (dn >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = '\0'; + return (dn - dst); +} + +static int +ns_name_unpack_vlmcsd(const uint8_t *msg, const uint8_t *eom, const uint8_t *src, + uint8_t *dst, size_t dstsiz) +{ + const uint8_t *srcp, *dstlim; + uint8_t *dstp; + int n, len, checked, l; + + len = -1; + checked = 0; + dstp = dst; + srcp = src; + dstlim = dst + dstsiz; + if (srcp < msg || srcp >= eom) { + errno = EMSGSIZE; + return (-1); + } + /* Fetch next label in domain name. */ + while ((n = *srcp++) != 0) { + /* Check for indirection. */ + switch (n & NS_CMPRSFLGS) { + case 0: + case NS_TYPE_ELT: + /* Limit checks. */ + if ((l = labellen_vlmcsd(srcp - 1)) < 0) { + errno = EMSGSIZE; + return(-1); + } + if (dstp + l + 1 >= dstlim || srcp + l >= eom) { + errno = EMSGSIZE; + return (-1); + } + checked += l + 1; + *dstp++ = n; + memcpy(dstp, srcp, l); + dstp += l; + srcp += l; + break; + + case NS_CMPRSFLGS: + if (srcp >= eom) { + errno = EMSGSIZE; + return (-1); + } + if (len < 0) + len = srcp - src + 1; + srcp = msg + (((n & 0x3f) << 8) | (*srcp & 0xff)); + if (srcp < msg || srcp >= eom) { /* Out of range. */ + errno = EMSGSIZE; + return (-1); + } + checked += 2; + /* + * Check for loops in the compressed name; + * if we've looked at the whole message, + * there must be a loop. + */ + if (checked >= eom - msg) { + errno = EMSGSIZE; + return (-1); + } + break; + + default: + errno = EMSGSIZE; + return (-1); /* flag error */ + } + } + *dstp = '\0'; + if (len < 0) + len = srcp - src; + return (len); +} + + +/* + * ns_name_uncompress_vlmcsd(msg, eom, src, dst, dstsiz) + * Expand compressed domain name to presentation format. + * return: + * Number of bytes read out of `src', or -1 (with errno set). + * note: + * Root domain returns as "." not "". + */ +int +ns_name_uncompress_vlmcsd(const uint8_t *msg, const uint8_t *eom, const uint8_t *src, + char *dst, size_t dstsiz) +{ + uint8_t tmp[NS_MAXCDNAME]; + int n; + + if ((n = ns_name_unpack_vlmcsd(msg, eom, src, tmp, sizeof tmp)) == -1) + return (-1); + if (ns_name_ntop_vlmcsd(tmp, dst, dstsiz) == -1) + return (-1); + return (n); +} + +/* + * special(ch) + * Thinking in noninternationalized USASCII (per the DNS spec), + * is this characted special ("in need of quoting") ? + * return: + * boolean. + */ +static int +special_vlmcsd(int ch) { + switch (ch) { + case 0x22: /* '"' */ + case 0x2E: /* '.' */ + case 0x3B: /* ';' */ + case 0x5C: /* '\\' */ + case 0x28: /* '(' */ + case 0x29: /* ')' */ + /* Special modifiers in zone files. */ + case 0x40: /* '@' */ + case 0x24: /* '$' */ + return (1); + default: + return (0); + } +} + +/* + * printable(ch) + * Thinking in noninternationalized USASCII (per the DNS spec), + * is this character visible and not a space when printed ? + * return: + * boolean. + */ +static int +printable_vlmcsd(int ch) { + return (ch > 0x20 && ch < 0x7f); +} + +static int +decode_bitstring_vlmcsd(const char **cpp, char *dn, const char *eom) +{ + const char *cp = *cpp; + char *beg = dn, tc; + int b, blen, plen; + + if ((blen = (*cp & 0xff)) == 0) + blen = 256; + plen = (blen + 3) / 4; + plen += sizeof("\\[x/]") + (blen > 99 ? 3 : (blen > 9) ? 2 : 1); + if (dn + plen >= eom) + return(-1); + + cp++; + dn += SPRINTF((dn, "\\[x")); + for (b = blen; b > 7; b -= 8, cp++) + dn += SPRINTF((dn, "%02x", *cp & 0xff)); + if (b > 4) { + tc = *cp++; + dn += SPRINTF((dn, "%02x", tc & (0xff << (8 - b)))); + } else if (b > 0) { + tc = *cp++; + dn += SPRINTF((dn, "%1x", + ((tc >> 4) & 0x0f) & (0x0f << (4 - b)))); + } + dn += SPRINTF((dn, "/%d]", blen)); + + *cpp = cp; + return(dn - beg); +} + +static int +labellen_vlmcsd(const uint8_t *lp) +{ + int bitlen; + uint8_t l = *lp; + + if ((l & NS_CMPRSFLGS) == NS_CMPRSFLGS) { + /* should be avoided by the caller */ + return(-1); + } + + if ((l & NS_CMPRSFLGS) == NS_TYPE_ELT) { + if (l == DNS_LABELTYPE_BITSTRING) { + if ((bitlen = *(lp + 1)) == 0) + bitlen = 256; + return((bitlen + 7 ) / 8 + 1); + } + return(-1); /* unknwon ELT */ + } + return(l); +} + +#endif // !NO_DNS +#endif // DNS_PARSER_INTERNAL

*JV@$Qj;ZH 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 deBti{`4TVy&EWDW%=q16 +#endif // _WIN32 +#include +#include +#include +#include +#include "helpers.h" +#include "output.h" +#include "endian.h" +#include "shared_globals.h" + + +/* + * UCS2 <-> UTF-8 functions + * All functions use little endian UCS2 since we only need it to communicate with Windows via RPC + */ + +// Convert one character from UTF-8 to UCS2 +// Returns 0xffff, if utf-8 evaluates to > 0xfffe (outside basic multilingual pane) +WCHAR utf8_to_ucs2_char (const unsigned char *input, const unsigned char **end_ptr) +{ + *end_ptr = input; + if (input[0] == 0) + return ~0; + + if (input[0] < 0x80) { + *end_ptr = input + 1; + return LE16(input[0]); + } + + if ((input[0] & 0xE0) == 0xE0) { + + if (input[1] == 0 || input[2] == 0) + return ~0; + + *end_ptr = input + 3; + + return + LE16((input[0] & 0x0F)<<12 | + (input[1] & 0x3F)<<6 | + (input[2] & 0x3F)); + } + + if ((input[0] & 0xC0) == 0xC0) { + if (input[1] == 0) + return ~0; + + *end_ptr = input + 2; + + return + LE16((input[0] & 0x1F)<<6 | + (input[1] & 0x3F)); + } + return ~0; +} + +// Convert one character from UCS2 to UTF-8 +// Returns length of UTF-8 char (1, 2 or 3) or -1 on error (UTF-16 outside UCS2) +// char *utf8 must be large enough to hold 3 bytes +int ucs2_to_utf8_char (const WCHAR ucs2_le, char *utf8) +{ + const WCHAR ucs2 = LE16(ucs2_le); + + if (ucs2 < 0x80) { + utf8[0] = ucs2; + utf8[1] = '\0'; + return 1; + } + + if (ucs2 >= 0x80 && ucs2 < 0x800) { + utf8[0] = (ucs2 >> 6) | 0xC0; + utf8[1] = (ucs2 & 0x3F) | 0x80; + utf8[2] = '\0'; + return 2; + } + + if (ucs2 >= 0x800 && ucs2 < 0xFFFF) { + + if (ucs2 >= 0xD800 && ucs2 <= 0xDFFF) { + /* Ill-formed (UTF-16 ouside of BMP) */ + return -1; + } + + utf8[0] = ((ucs2 >> 12) ) | 0xE0; + utf8[1] = ((ucs2 >> 6 ) & 0x3F) | 0x80; + utf8[2] = ((ucs2 ) & 0x3F) | 0x80; + utf8[3] = '\0'; + return 3; + } + + return -1; +} + + +// Converts UTF8 to UCS2. Returns size in bytes of the converted string or -1 on error +size_t utf8_to_ucs2(WCHAR* const ucs2_le, const char* const utf8, const size_t maxucs2, const size_t maxutf8) +{ + const unsigned char* current_utf8 = (unsigned char*)utf8; + WCHAR* current_ucs2_le = ucs2_le; + + for (; *current_utf8; current_ucs2_le++) + { + size_t size = (char*)current_utf8 - utf8; + + if (size >= maxutf8) return (size_t)-1; + if (((*current_utf8 & 0xc0) == 0xc0) && (size >= maxutf8 - 1)) return (size_t)-1; + if (((*current_utf8 & 0xe0) == 0xe0) && (size >= maxutf8 - 2)) return (size_t)-1; + if (current_ucs2_le - ucs2_le >= (intptr_t)maxucs2 - 1) return (size_t)-1; + + *current_ucs2_le = utf8_to_ucs2_char(current_utf8, ¤t_utf8); + current_ucs2_le[1] = 0; + + if (*current_ucs2_le == (WCHAR)-1) return (size_t)-1; + } + return current_ucs2_le - ucs2_le; +} + +// Converts UCS2 to UTF-8. Return TRUE or FALSE +BOOL ucs2_to_utf8(const WCHAR* const ucs2_le, char* utf8, size_t maxucs2, size_t maxutf8) +{ + char utf8_char[4]; + const WCHAR* current_ucs2 = ucs2_le; + unsigned int index_utf8 = 0; + + for(*utf8 = 0; *current_ucs2; current_ucs2++) + { + if (current_ucs2 - ucs2_le > (intptr_t)maxucs2) return FALSE; + int len = ucs2_to_utf8_char(*current_ucs2, utf8_char); + if (index_utf8 + len > maxutf8) return FALSE; + strncat(utf8, utf8_char, len); + index_utf8+=len; + } + + return TRUE; +} + +/* End of UTF-8 <-> UCS2 conversion */ + + +// Checks, whether a string is a valid integer number between min and max. Returns TRUE or FALSE. Puts int value in *value +BOOL stringToInt(const char *const szValue, const unsigned int min, const unsigned int max, unsigned int *const value) +{ + char *nextchar; + + errno = 0; + long long result = strtoll(szValue, &nextchar, 10); + + if (errno || result < (long long)min || result > (long long)max || *nextchar) + { + return FALSE; + } + + *value = (unsigned int)result; + return TRUE; +} + + +//Converts a String Guid to a host binary guid in host endianess +int_fast8_t string2Uuid(const char *const restrict input, GUID *const restrict guid) +{ + int i; + + if (strlen(input) < GUID_STRING_LENGTH) return FALSE; + if (input[8] != '-' || input[13] != '-' || input[18] != '-' || input[23] != '-') return FALSE; + + for (i = 0; i < GUID_STRING_LENGTH; i++) + { + if (i == 8 || i == 13 || i == 18 || i == 23) continue; + + const char c = toupper((int)input[i]); + + if (c < '0' || c > 'F' || (c > '9' && c < 'A')) return FALSE; + } + + char inputCopy[GUID_STRING_LENGTH + 1]; + strncpy(inputCopy, input, GUID_STRING_LENGTH + 1); + inputCopy[8] = inputCopy[13] = inputCopy[18] = 0; + + hex2bin((BYTE*)&guid->Data1, inputCopy, 8); + hex2bin((BYTE*)&guid->Data2, inputCopy + 9, 4); + hex2bin((BYTE*)&guid->Data3, inputCopy + 14, 4); + hex2bin(guid->Data4, input + 19, 16); + + guid->Data1 = BE32(guid->Data1); + guid->Data2 = BE16(guid->Data2); + guid->Data3 = BE16(guid->Data3); + return TRUE; +} + + +// convert GUID to little-endian +void LEGUID(GUID *const restrict out, const GUID* const restrict in) +{ + #if __BYTE_ORDER != __LITTLE_ENDIAN + out->Data1 = LE32(in->Data1); + out->Data2 = LE16(in->Data2); + out->Data3 = LE16(in->Data3); + memcpy(out->Data4, in->Data4, sizeof(out->Data4)); + #else + memcpy(out, in, sizeof(GUID)); + #endif +} + + +//Checks a command line argument if it is numeric and between min and max. Returns the numeric value or exits on error +__pure unsigned int getOptionArgumentInt(const char o, const unsigned int min, const unsigned int max) +{ + unsigned int result; + + if (!stringToInt(optarg, min, max, &result)) + { + printerrorf("Fatal: Option \"-%c\" must be numeric between %u and %u.\n", o, min, max); + exit(!0); + } + + return result; +} + + +// Resets getopt() to start parsing from the beginning +void optReset(void) +{ + #if __minix__ || defined(__BSD__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) + optind = 1; + optreset = 1; // Makes newer BSD getopt happy + #elif defined(__UCLIBC__) // uClibc headers also define __GLIBC__ so be careful here + optind = 0; // uClibc seeks compatibility with GLIBC + #elif defined(__GLIBC__) + optind = 0; // Makes GLIBC getopt happy + #else // Standard for most systems + optind = 1; + #endif +} + + +#if defined(_WIN32) || defined(USE_MSRPC) + +// Returns a static message buffer containing text for a given Win32 error. Not thread safe (same as strerror) +char* win_strerror(const int message) +{ + #define STRERROR_BUFFER_SIZE 256 + static char buffer[STRERROR_BUFFER_SIZE]; + + FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, NULL, message, 0, buffer, STRERROR_BUFFER_SIZE, NULL); + return buffer; +} + +#endif // defined(_WIN32) || defined(USE_MSRPC) + + +/* + * parses an address in the form host:[port] in addr + * returns host and port in seperate strings + */ +void parseAddress(char *const addr, char** szHost, char** szPort) +{ + *szHost = addr; + +# ifndef NO_SOCKETS + *szPort = (char*)defaultport; +# else // NO_SOCKETS + *szPort = "1688"; +# endif // NO_SOCKETS + + char *lastcolon = strrchr(addr, ':'); + char *firstcolon = strchr(addr, ':'); + char *closingbracket = strrchr(addr, ']'); + + if (*addr == '[' && closingbracket) //Address in brackets + { + *closingbracket = 0; + (*szHost)++; + + if (closingbracket[1] == ':') + *szPort = closingbracket + 2; + } + else if (firstcolon && firstcolon == lastcolon) //IPv4 address or hostname with port + { + *firstcolon = 0; + *szPort = firstcolon + 1; + } +} + + +// Initialize random generator (needs to be done in each thread) +void randomNumberInit() +{ + struct timeval tv; + gettimeofday(&tv, NULL); + srand((unsigned int)(tv.tv_sec ^ tv.tv_usec)); +} + + +// We always exit immediately if any OOM condition occurs +__noreturn void OutOfMemory(void) +{ + errorout("Fatal: Out of memory"); + exit(!0); +} + + +void* vlmcsd_malloc(size_t len) +{ + void* buf = malloc(len); + if (!buf) OutOfMemory(); + return buf; +} + + +/* + * Converts hex digits to bytes in big-endian order. + * Ignores any non-hex characters + */ +void hex2bin(BYTE *const bin, const char *hex, const size_t maxbin) +{ + static const char *const hexdigits = "0123456789ABCDEF"; + char* nextchar; + size_t i; + + for (i = 0; (i < 16) && utf8_to_ucs2_char((const unsigned char*)hex, (const unsigned char**)&nextchar) != (WCHAR)-1; hex = nextchar) + { + const char* pos = strchr(hexdigits, toupper((int)*hex)); + if (!pos) continue; + + if (!(i & 1)) bin[i >> 1] = 0; + bin[i >> 1] |= (char)(pos - hexdigits); + if (!(i & 1)) bin[i >> 1] <<= 4; + i++; + if (i >> 1 > maxbin) break; + } +} + + +__pure BOOL getArgumentBool(int_fast8_t *result, const char *const argument) +{ + if ( + !strncasecmp(argument, "true", 4) || + !strncasecmp(argument, "on", 4) || + !strncasecmp(argument, "yes", 3) || + !strncasecmp(argument, "1", 1) + ) + { + *result = TRUE; + return TRUE; + } + else if ( + !strncasecmp(argument, "false", 5) || + !strncasecmp(argument, "off", 3) || + !strncasecmp(argument, "no", 2) || + !strncasecmp(argument, "0", 1) + ) + { + *result = FALSE; + return TRUE; + } + + return FALSE; +} + diff --git a/helpers.h b/helpers.h new file mode 100644 index 0000000..2a7460e --- /dev/null +++ b/helpers.h @@ -0,0 +1,34 @@ +#ifndef HELPERS_H +#define HELPERS_H + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include +#include "types.h" + +#define GUID_LE 0 +#define GUID_BE 1 +#define GUID_SWAP 2 + +BOOL stringToInt(const char *const szValue, const unsigned int min, const unsigned int max, unsigned int *const value); +unsigned int getOptionArgumentInt(const char o, const unsigned int min, const unsigned int max); +void optReset(void); +char* win_strerror(const int message); +int ucs2_to_utf8_char (const WCHAR ucs2_le, char *utf8); +size_t utf8_to_ucs2(WCHAR* const ucs2_le, const char* const utf8, const size_t maxucs2, const size_t maxutf8); +WCHAR utf8_to_ucs2_char (const unsigned char * input, const unsigned char ** end_ptr); +BOOL ucs2_to_utf8(const WCHAR* const ucs2_le, char* utf8, size_t maxucs2, size_t maxutf8); +int_fast8_t string2Uuid(const char *const restrict input, GUID *const restrict guid); +void randomNumberInit(); +void LEGUID(GUID *const restrict result, const GUID* const restrict guid); +void parseAddress(char *const addr, char** szHost, char** szPort); +__noreturn void OutOfMemory(void); +void* vlmcsd_malloc(size_t len); +void hex2bin(BYTE *const bin, const char *hex, const size_t maxbin); +__pure BOOL getArgumentBool(int_fast8_t *result, const char *const argument); + + +#endif // HELPERS_H diff --git a/kms.c b/kms.c new file mode 100644 index 0000000..840aacc --- /dev/null +++ b/kms.c @@ -0,0 +1,1118 @@ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include +#include +#include +#include +#include +#if !defined(_WIN32) +#include +#endif + +#include "output.h" +#include "crypto.h" +#include "endian.h" +#include "kms.h" +#include "shared_globals.h" +#include "helpers.h" + +#define FRIENDLY_NAME_WINDOWS "Windows" +#define FRIENDLY_NAME_OFFICE2010 "Office 2010" +#define FRIENDLY_NAME_OFFICE2013 "Office" + +#ifndef NO_BASIC_PRODUCT_LIST +// Do not change the order of this list. Append items as necessary +const KmsIdList ProductList[] = { + /* 000 */ { { 0x212a64dc, 0x43b1, 0x4d3d, { 0xa3, 0x0c, 0x2f, 0xc6, 0x9d, 0x20, 0x95, 0xc6 } } /*"212a64dc-43b1-4d3d-a30c-2fc69d2095c6"*/, "Vista", EPID_WINDOWS, 4, 25 }, + /* 001 */ { { 0x7fde5219, 0xfbfa, 0x484a, { 0x82, 0xc9, 0x34, 0xd1, 0xad, 0x53, 0xe8, 0x56 } } /*"7fde5219-fbfa-484a-82c9-34d1ad53e856"*/, "Windows 7", EPID_WINDOWS, 4, 25 }, + /* 002 */ { { 0x3c40b358, 0x5948, 0x45af, { 0x92, 0x3b, 0x53, 0xd2, 0x1f, 0xcc, 0x7e, 0x79 } } /*"3c40b358-5948-45af-923b-53d21fcc7e79"*/, "Windows 8 VL", EPID_WINDOWS, 5, 25 }, + /* 003 */ { { 0x5f94a0bb, 0xd5a0, 0x4081, { 0xa6, 0x85, 0x58, 0x19, 0x41, 0x8b, 0x2f, 0xe0 } } /*"5f94a0bb-d5a0-4081-a685-5819418b2fe0"*/, "Windows Preview", EPID_WINDOWS, 6, 25 }, + /* 004 */ { { 0xbbb97b3b, 0x8ca4, 0x4a28, { 0x97, 0x17, 0x89, 0xfa, 0xbd, 0x42, 0xc4, 0xac } } /*"bbb97b3b-8ca4-4a28-9717-89fabd42c4ac"*/, "Windows 8 Retail", EPID_WINDOWS, 5, 25 }, + /* 005 */ { { 0xcb8fc780, 0x2c05, 0x495a, { 0x97, 0x10, 0x85, 0xaf, 0xff, 0xc9, 0x04, 0xd7 } } /*"cb8fc780-2c05-495a-9710-85afffc904d7"*/, "Windows 8.1 VL", EPID_WINDOWS, 6, 25 }, + /* 006 */ { { 0x6d646890, 0x3606, 0x461a, { 0x86, 0xab, 0x59, 0x8b, 0xb8, 0x4a, 0xce, 0x82 } } /*"6d646890-3606-461a-86ab-598bb84ace82"*/, "Windows 8.1 Retail", EPID_WINDOWS, 6, 25 }, + /* 007 */ { { 0x33e156e4, 0xb76f, 0x4a52, { 0x9f, 0x91, 0xf6, 0x41, 0xdd, 0x95, 0xac, 0x48 } } /*"33e156e4-b76f-4a52-9f91-f641dd95ac48"*/, "Windows 2008 A", EPID_WINDOWS, 4, 5 }, + /* 008 */ { { 0x8fe53387, 0x3087, 0x4447, { 0x89, 0x85, 0xf7, 0x51, 0x32, 0x21, 0x5a, 0xc9 } } /*"8fe53387-3087-4447-8985-f75132215ac9"*/, "Windows 2008 B", EPID_WINDOWS, 4, 5 }, + /* 009 */ { { 0x8a21fdf3, 0xcbc5, 0x44eb, { 0x83, 0xf3, 0xfe, 0x28, 0x4e, 0x66, 0x80, 0xa7 } } /*"8a21fdf3-cbc5-44eb-83f3-fe284e6680a7"*/, "Windows 2008 C", EPID_WINDOWS, 4, 5 }, + /* 010 */ { { 0x0fc6ccaf, 0xff0e, 0x4fae, { 0x9d, 0x08, 0x43, 0x70, 0x78, 0x5b, 0xf7, 0xed } } /*"0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed"*/, "Windows 2008 R2 A", EPID_WINDOWS, 4, 5 }, + /* 011 */ { { 0xca87f5b6, 0xcd46, 0x40c0, { 0xb0, 0x6d, 0x8e, 0xcd, 0x57, 0xa4, 0x37, 0x3f } } /*"ca87f5b6-cd46-40c0-b06d-8ecd57a4373f"*/, "Windows 2008 R2 B", EPID_WINDOWS, 4, 5 }, + /* 012 */ { { 0xb2ca2689, 0xa9a8, 0x42d7, { 0x93, 0x8d, 0xcf, 0x8e, 0x9f, 0x20, 0x19, 0x58 } } /*"b2ca2689-a9a8-42d7-938d-cf8e9f201958"*/, "Windows 2008 R2 C", EPID_WINDOWS, 4, 5 }, + /* 013 */ { { 0x8665cb71, 0x468c, 0x4aa3, { 0xa3, 0x37, 0xcb, 0x9b, 0xc9, 0xd5, 0xea, 0xac } } /*"8665cb71-468c-4aa3-a337-cb9bc9d5eaac"*/, "Windows 2012", EPID_WINDOWS, 5, 5 }, + /* 014 */ { { 0x8456EFD3, 0x0C04, 0x4089, { 0x87, 0x40, 0x5b, 0x72, 0x38, 0x53, 0x5a, 0x65 } } /*"8456EFD3-0C04-4089-8740-5B7238535A65"*/, "Windows 2012 R2", EPID_WINDOWS, 6, 5 }, + /* 015 */ { { 0xe85af946, 0x2e25, 0x47b7, { 0x83, 0xe1, 0xbe, 0xbc, 0xeb, 0xea, 0xc6, 0x11 } } /*"e85af946-2e25-47b7-83e1-bebcebeac611"*/, "Office 2010", EPID_OFFICE2010, 4, 5 }, + /* 016 */ { { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } /*"e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0"*/, "Office 2013", EPID_OFFICE2013, 6, 5 }, + /* 017 */ { { 0x6d5f5270, 0x31ac, 0x433e, { 0xb9, 0x0a, 0x39, 0x89, 0x29, 0x23, 0xc6, 0x57 } } /*"6d5f5270-31ac-433e-b90a-39892923c657"*/, "Windows Server Preview", EPID_WINDOWS, 6, 5 }, + /* 018 */ { { 0x85b5f61b, 0x320b, 0x4be3, { 0x81, 0x4a, 0xb7, 0x6b, 0x2b, 0xfa, 0xfc, 0x82 } } /*"85b5f61b-320b-4be3-814a-b76b2bfafc82"*/, "Office 2016", EPID_OFFICE2013, 6, 5 }, + /* 019 */ { { 0x58e2134f, 0x8e11, 0x4d17, { 0x9c, 0xb2, 0x91, 0x06, 0x9c, 0x15, 0x11, 0x48 } } /*"58e2134f-8e11-4d17-9cb2-91069c151148"*/, "Windows 10 VL", EPID_WINDOWS, 6, 25 }, + /* 020 */ { { 0xe1c51358, 0xfe3e, 0x4203, { 0xa4, 0xa2, 0x3b, 0x6b, 0x20, 0xc9, 0x73, 0x4e } } /*"e1c51358-fe3e-4203-a4a2-3b6b20c9734e"*/, "Windows 10 Retail", EPID_WINDOWS, 6, 25 }, + /* 021 */ { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 } +}; +#endif + +// Application ID is used by KMS server to count KeyManagementServiceCurrentCount +// Do not change the order of this list. Append items as necessary +const KmsIdList AppList[] = { + /* 000 */ { { 0x55c92734, 0xd682, 0x4d71, { 0x98, 0x3e, 0xd6, 0xec, 0x3f, 0x16, 0x05, 0x9f } } /*"55C92734-D682-4D71-983E-D6EC3F16059F"*/, FRIENDLY_NAME_WINDOWS, EPID_WINDOWS, 0, 0}, + /* 001 */ { { 0x59A52881, 0xa989, 0x479d, { 0xaf, 0x46, 0xf2, 0x75, 0xc6, 0x37, 0x06, 0x63 } } /*"59A52881-A989-479D-AF46-F275C6370663"*/, FRIENDLY_NAME_OFFICE2010, EPID_OFFICE2010, 0, 0}, + /* 002 */ { { 0x0FF1CE15, 0xA989, 0x479D, { 0xaf, 0x46, 0xf2, 0x75, 0xc6, 0x37, 0x06, 0x63 } } /*"0FF1CE15-A989-479D-AF46-F275C6370663"*/, FRIENDLY_NAME_OFFICE2013, EPID_OFFICE2013, 0, 0}, + /* 003 */ { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 } +}; + +#ifndef NO_EXTENDED_PRODUCT_LIST +const KmsIdList ExtendedProductList [] = { + + // Windows Server + + { { 0xad2542d4, 0x9154, 0x4c6d, { 0x8a, 0x44, 0x30, 0xf1, 0x1e, 0xe9, 0x69, 0x89, } } /*ad2542d4-9154-4c6d-8a44-30f11ee96989*/, "Windows Server 2008 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, + { { 0x2401e3d0, 0xc50a, 0x4b58, { 0x87, 0xb2, 0x7e, 0x79, 0x4b, 0x7d, 0x26, 0x07, } } /*2401e3d0-c50a-4b58-87b2-7e794b7d2607*/, "Windows Server 2008 Standard V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, + { { 0x68b6e220, 0xcf09, 0x466b, { 0x92, 0xd3, 0x45, 0xcd, 0x96, 0x4b, 0x95, 0x09, } } /*68b6e220-cf09-466b-92d3-45cd964b9509*/, "Windows Server 2008 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + { { 0xfd09ef77, 0x5647, 0x4eff, { 0x80, 0x9c, 0xaf, 0x2b, 0x64, 0x65, 0x9a, 0x45, } } /*fd09ef77-5647-4eff-809c-af2b64659a45*/, "Windows Server 2008 Datacenter V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + { { 0xc1af4d90, 0xd1bc, 0x44ca, { 0x85, 0xd4, 0x00, 0x3b, 0xa3, 0x3d, 0xb3, 0xb9, } } /*c1af4d90-d1bc-44ca-85d4-003ba33db3b9*/, "Windows Server 2008 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B }, + { { 0x8198490a, 0xadd0, 0x47b2, { 0xb3, 0xba, 0x31, 0x6b, 0x12, 0xd6, 0x47, 0xb4, } } /*8198490a-add0-47b2-b3ba-316b12d647b4*/, "Windows Server 2008 Enterprise V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B }, + { { 0xddfa9f7c, 0xf09e, 0x40b9, { 0x8c, 0x1a, 0xbe, 0x87, 0x7a, 0x9a, 0x7f, 0x4b, } } /*ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b*/, "Windows Server 2008 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, + { { 0x7afb1156, 0x2c1d, 0x40fc, { 0xb2, 0x60, 0xaa, 0xb7, 0x44, 0x2b, 0x62, 0xfe, } } /*7afb1156-2c1d-40fc-b260-aab7442b62fe*/, "Windows Server 2008 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + { { 0x68531fb9, 0x5511, 0x4989, { 0x97, 0xbe, 0xd1, 0x1a, 0x0f, 0x55, 0x63, 0x3f, } } /*68531fb9-5511-4989-97be-d11a0f55633f*/, "Windows Server 2008 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A }, + { { 0x7482e61b, 0xc589, 0x4b7f, { 0x8e, 0xcc, 0x46, 0xd4, 0x55, 0xac, 0x3b, 0x87, } } /*7482e61b-c589-4b7f-8ecc-46d455ac3b87*/, "Windows Server 2008 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C }, + { { 0x620e2b3d, 0x09e7, 0x42fd, { 0x80, 0x2a, 0x17, 0xa1, 0x36, 0x52, 0xfe, 0x7a, } } /*620e2b3d-09e7-42fd-802a-17a13652fe7a*/, "Windows Server 2008 R2 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2B }, + { { 0xa78b8bd9, 0x8017, 0x4df5, { 0xb8, 0x6a, 0x09, 0xf7, 0x56, 0xaf, 0xfa, 0x7c, } } /*a78b8bd9-8017-4df5-b86a-09f756affa7c*/, "Windows Server 2008 R2 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A }, + { { 0xcda18cf3, 0xc196, 0x46ad, { 0xb2, 0x89, 0x60, 0xc0, 0x72, 0x86, 0x99, 0x94, } } /*cda18cf3-c196-46ad-b289-60c072869994*/, "Windows Server 2008 R2 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C }, + { { 0xd3643d60, 0x0c42, 0x412d, { 0xa7, 0xd6, 0x52, 0xe6, 0x63, 0x53, 0x27, 0xf6, } } /*d3643d60-0c42-412d-a7d6-52e6635327f6*/, "Windows Server 2012 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0xf0f5ec41, 0x0d55, 0x4732, { 0xaf, 0x02, 0x44, 0x0a, 0x44, 0xa3, 0xcf, 0x0f, } } /*f0f5ec41-0d55-4732-af02-440a44a3cf0f*/, "Windows Server 2012 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0x95fd1c83, 0x7df5, 0x494a, { 0xbe, 0x8b, 0x13, 0x00, 0xe1, 0xc9, 0xd1, 0xcd, } } /*95fd1c83-7df5-494a-be8b-1300e1c9d1cd*/, "Windows Server 2012 MultiPoint Premium", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0x7d5486c7, 0xe120, 0x4771, { 0xb7, 0xf1, 0x7b, 0x56, 0xc6, 0xd3, 0x17, 0x0c, } } /*7d5486c7-e120-4771-b7f1-7b56c6d3170c*/, "Windows Server 2012 MultiPoint Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0x00091344, 0x1ea4, 0x4f37, { 0xb7, 0x89, 0x01, 0x75, 0x0b, 0xa6, 0x98, 0x8c, } } /*00091344-1ea4-4f37-b789-01750ba6988c*/, "Windows Server 2012 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0xb3ca044e, 0xa358, 0x4d68, { 0x98, 0x83, 0xaa, 0xa2, 0x94, 0x1a, 0xca, 0x99, } } /*b3ca044e-a358-4d68-9883-aaa2941aca99*/, "Windows Server 2012 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0xb743a2be, 0x68d4, 0x4dd3, { 0xaf, 0x32, 0x92, 0x42, 0x5b, 0x7b, 0xb6, 0x23, } } /*b743a2be-68d4-4dd3-af32-92425b7bb623*/, "Windows Server 2012 R2 Cloud Storage", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0x21db6ba4, 0x9a7b, 0x4a14, { 0x9e, 0x29, 0x64, 0xa6, 0x0c, 0x59, 0x30, 0x1d, } } /*21db6ba4-9a7b-4a14-9e29-64a60c59301d*/, "Windows Server 2012 R2 Essentials", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0xba947c44, 0xd19d, 0x4786, { 0xb6, 0xae, 0x22, 0x77, 0x0b, 0xc9, 0x4c, 0x54, } } /*ba947c44-d19d-4786-b6ae-22770bc94c54*/, "Windows Server 2016 Datacenter Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_SRV_BETA }, + + + // Windows 10 Preview +# ifdef INCLUDE_BETAS + { { 0x6496e59d, 0x89dc, 0x49eb, { 0xa3, 0x53, 0x09, 0xce, 0xb9, 0x40, 0x48, 0x45, } } /*6496e59d-89dc-49eb-a353-09ceb9404845*/, "Windows 10 Core Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0xa4383e6b, 0xdada, 0x423d, { 0xa4, 0x3d, 0xf2, 0x56, 0x78, 0x42, 0x96, 0x76, } } /*a4383e6b-dada-423d-a43d-f25678429676*/, "Windows 10 Professional Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0xcf59a07b, 0x1a2a, 0x4be0, { 0xbf, 0xe0, 0x42, 0x3b, 0x58, 0x23, 0xe6, 0x63, } } /*cf59a07b-1a2a-4be0-bfe0-423b5823e663*/, "Windows 10 Professional WMC Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0xcde952c7, 0x2f96, 0x4d9d, { 0x8f, 0x2b, 0x2d, 0x34, 0x9f, 0x64, 0xfc, 0x51, } } /*cde952c7-2f96-4d9d-8f2b-2d349f64fc51*/, "Windows 10 Enterprise Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, +# endif + + + // Windows 10 + + { { 0x73111121, 0x5638, 0x40f6, { 0xbc, 0x11, 0xf1, 0xd7, 0xb0, 0xd6, 0x43, 0x00, } } /*73111121-5638-40f6-bc11-f1d7b0d64300*/, "Windows 10 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0xe272e3e2, 0x732f, 0x4c65, { 0xa8, 0xf0, 0x48, 0x47, 0x47, 0xd0, 0xd9, 0x47, } } /*e272e3e2-732f-4c65-a8f0-484747d0d947*/, "Windows 10 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x7b51a46c, 0x0c04, 0x4e8f, { 0x9a, 0xf4, 0x84, 0x96, 0xcc, 0xa9, 0x0d, 0x5e, } } /*7b51a46c-0c04-4e8f-9af4-8496cca90d5e*/, "Windows 10 Enterprise LTSB", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x87b838b7, 0x41b6, 0x4590, { 0x83, 0x18, 0x57, 0x97, 0x95, 0x1d, 0x85, 0x29, } } /*87b838b7-41b6-4590-8318-5797951d8529*/, "Windows 10 Enterprise LTSB N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0xe0c42288, 0x980c, 0x4788, { 0xa0, 0x14, 0xc0, 0x80, 0xd2, 0xe1, 0x92, 0x6e, } } /*e0c42288-980c-4788-a014-c080d2e1926e*/, "Windows 10 Education", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x3c102355, 0xd027, 0x42c6, { 0xad, 0x23, 0x2e, 0x7e, 0xf8, 0xa0, 0x25, 0x85, } } /*3c102355-d027-42c6-ad23-2e7ef8a02585*/, "Windows 10 Education N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x2de67392, 0xb7a7, 0x462a, { 0xb1, 0xca, 0x10, 0x8d, 0xd1, 0x89, 0xf5, 0x88, } } /*2de67392-b7a7-462a-b1ca-108dd189f588*/, "Windows 10 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0xa80b5abf, 0x75ad, 0x428b, { 0xb0, 0x5d, 0xa4, 0x7d, 0x2d, 0xff, 0xee, 0xbf, } } /*a80b5abf-76ad-428b-b05d-a47d2dffeebf*/, "Windows 10 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, + { { 0x58e97c99, 0xf377, 0x4ef1, { 0x81, 0xd5, 0x4a, 0xd5, 0x52, 0x2b, 0x5f, 0xd8, } } /*58e97c99-f377-4ef1-81d5-4ad5522b5fd8*/, "Windows 10 Home", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + { { 0x7b9e1751, 0xa8da, 0x4f75, { 0x95, 0x60, 0x5f, 0xad, 0xfe, 0x3d, 0x8e, 0x38, } } /*7b9e1751-a8da-4f75-9560-5fadfe3d8e38*/, "Windows 10 Home N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + { { 0xcd918a57, 0xa41b, 0x4c82, { 0x8d, 0xce, 0x1a, 0x53, 0x8e, 0x22, 0x1a, 0x83, } } /*cd918a57-a41b-4c82-8dce-1a538e221a83*/, "Windows 10 Home Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + { { 0xa9107544, 0xf4a0, 0x4053, { 0xa9, 0x6a, 0x14, 0x79, 0xab, 0xde, 0xf9, 0x12, } } /*a9107544-f4a0-4053-a96a-1479abdef912*/, "Windows 10 Home Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, + + + // Windows 8.x + +# ifdef INCLUDE_BETAS + { { 0x2B9C337F, 0x7A1D, 0x4271, { 0x90, 0xA3, 0xC6, 0x85, 0x5A, 0x2B, 0x8A, 0x1C, } } /*2B9C337F-7A1D-4271-90A3-C6855A2B8A1C*/, "Windows 8.x Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0x631EAD72, 0xA8AB, 0x4DF8, { 0xBB, 0xDF, 0x37, 0x20, 0x29, 0x98, 0x9B, 0xDD, } } /*631EAD72-A8AB-4DF8-BBDF-372029989BDD*/, "Windows 8.x Preview ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, +# endif + { { 0x81671aaf, 0x79d1, 0x4eb1, { 0xb0, 0x04, 0x8c, 0xbb, 0xe1, 0x73, 0xaf, 0xea, } } /*81671aaf-79d1-4eb1-b004-8cbbe173afea*/, "Windows 8.1 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0x113e705c, 0xfa49, 0x48a4, { 0xbe, 0xea, 0x7d, 0xd8, 0x79, 0xb4, 0x6b, 0x14, } } /*113e705c-fa49-48a4-beea-7dd879b46b14*/, "Windows 8.1 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0x096ce63d, 0x4fac, 0x48a9, { 0x82, 0xa9, 0x61, 0xae, 0x9e, 0x80, 0x0e, 0x5f, } } /*096ce63d-4fac-48a9-82a9-61ae9e800e5f*/, "Windows 8.1 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xc06b6981, 0xd7fd, 0x4a35, { 0xb7, 0xb4, 0x05, 0x47, 0x42, 0xb7, 0xaf, 0x67, } } /*c06b6981-d7fd-4a35-b7b4-054742b7af67*/, "Windows 8.1 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0x7476d79f, 0x8e48, 0x49b4, { 0xab, 0x63, 0x4d, 0x0b, 0x81, 0x3a, 0x16, 0xe4, } } /*7476d79f-8e48-49b4-ab63-4d0b813a16e4*/, "Windows 8.1 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xfe1c3238, 0x432a, 0x43a1, { 0x8e, 0x25, 0x97, 0xe7, 0xd1, 0xef, 0x10, 0xf3, } } /*fe1c3238-432a-43a1-8e25-97e7d1ef10f3*/, "Windows 8.1 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0x78558a64, 0xdc19, 0x43fe, { 0xa0, 0xd0, 0x80, 0x75, 0xb2, 0xa3, 0x70, 0xa3, } } /*78558a64-dc19-43fe-a0d0-8075b2a370a3*/, "Windows 8.1 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xffee456a, 0xcd87, 0x4390, { 0x8e, 0x07, 0x16, 0x14, 0x6c, 0x67, 0x2f, 0xd0, } } /*ffee456a-cd87-4390-8e07-16146c672fd0*/, "Windows 8.1 Core ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xc72c6a1d, 0xf252, 0x4e7e, { 0xbd, 0xd1, 0x3f, 0xca, 0x34, 0x2a, 0xcb, 0x35, } } /*c72c6a1d-f252-4e7e-bdd1-3fca342acb35*/, "Windows 8.1 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xdb78b74f, 0xef1c, 0x4892, { 0xab, 0xfe, 0x1e, 0x66, 0xb8, 0x23, 0x1d, 0xf6, } } /*db78b74f-ef1c-4892-abfe-1e66b8231df6*/, "Windows 8.1 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xe9942b32, 0x2e55, 0x4197, { 0xb0, 0xbd, 0x5f, 0xf5, 0x8c, 0xba, 0x88, 0x60, } } /*e9942b32-2e55-4197-b0bd-5ff58cba8860*/, "Windows 8.1 Core Connected", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xc6ddecd6, 0x2354, 0x4c19, { 0x90, 0x9b, 0x30, 0x6a, 0x30, 0x58, 0x48, 0x4e, } } /*c6ddecd6-2354-4c19-909b-306a3058484e*/, "Windows 8.1 Core Connected N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xb8f5e3a3, 0xed33, 0x4608, { 0x81, 0xe1, 0x37, 0xd6, 0xc9, 0xdc, 0xfd, 0x9c, } } /*b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c*/, "Windows 8.1 Core Connected Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xba998212, 0x460a, 0x44db, { 0xbf, 0xb5, 0x71, 0xbf, 0x09, 0xd1, 0xc6, 0x8b, } } /*ba998212-460a-44db-bfb5-71bf09d1c68b*/, "Windows 8.1 Core Connected Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xe58d87b5, 0x8126, 0x4580, { 0x80, 0xfb, 0x86, 0x1b, 0x22, 0xf7, 0x92, 0x96, } } /*e58d87b5-8126-4580-80fb-861b22f79296*/, "Windows 8.1 Professional Student", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xcab491c7, 0xa918, 0x4f60, { 0xb5, 0x02, 0xda, 0xb7, 0x5e, 0x33, 0x4f, 0x40, } } /*cab491c7-a918-4f60-b502-dab75e334f40*/, "Windows 8.1 Professional Student N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xa00018a3, 0xf20f, 0x4632, { 0xbf, 0x7c, 0x8d, 0xaa, 0x53, 0x51, 0xc9, 0x14, } } /*a00018a3-f20f-4632-bf7c-8daa5351c914*/, "Windows 8 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0xa98bcd6d, 0x5343, 0x4603, { 0x8a, 0xfe, 0x59, 0x08, 0xe4, 0x61, 0x11, 0x12, } } /*a98bcd6d-5343-4603-8afe-5908e4611112*/, "Windows 8 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0xebf245c1, 0x29a8, 0x4daf, { 0x9c, 0xb1, 0x38, 0xdf, 0xc6, 0x08, 0xa8, 0xc8, } } /*ebf245c1-29a8-4daf-9cb1-38dfc608a8c8*/, "Windows 8 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0x458e1bec, 0x837a, 0x45f6, { 0xb9, 0xd5, 0x92, 0x5e, 0xd5, 0xd2, 0x99, 0xde, } } /*458e1bec-837a-45f6-b9d5-925ed5d299de*/, "Windows 8 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0xe14997e7, 0x800a, 0x4cf7, { 0xad, 0x10, 0xde, 0x4b, 0x45, 0xb5, 0x78, 0xdb, } } /*e14997e7-800a-4cf7-ad10-de4b45b578db*/, "Windows 8 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0xc04ed6bf, 0x55c8, 0x4b47, { 0x9f, 0x8e, 0x5a, 0x1f, 0x31, 0xce, 0xee, 0x60, } } /*c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60*/, "Windows 8 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0x197390a0, 0x65f6, 0x4a95, { 0xbd, 0xc4, 0x55, 0xd5, 0x8a, 0x3b, 0x02, 0x53, } } /*197390a0-65f6-4a95-bdc4-55d58a3b0253*/, "Windows 8 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0x9d5584a2, 0x2d85, 0x419a, { 0x98, 0x2c, 0xa0, 0x08, 0x88, 0xbb, 0x9d, 0xdf, } } /*9d5584a2-2d85-419a-982c-a00888bb9ddf*/, "Windows 8 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0x8860fcd4, 0xa77b, 0x4a20, { 0x90, 0x45, 0xa1, 0x50, 0xff, 0x11, 0xd6, 0x09, } } /*8860fcd4-a77b-4a20-9045-a150ff11d609*/, "Windows 8 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + + + // Windows 7 + + { { 0xae2ee509, 0x1b34, 0x41c0, { 0xac, 0xb7, 0x6d, 0x46, 0x50, 0x16, 0x89, 0x15, } } /*ae2ee509-1b34-41c0-acb7-6d4650168915*/, "Windows 7 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x1cb6d605, 0x11b3, 0x4e14, { 0xbb, 0x30, 0xda, 0x91, 0xc8, 0xe3, 0x98, 0x3a, } } /*1cb6d605-11b3-4e14-bb30-da91c8e3983a*/, "Windows 7 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0xb92e9980, 0xb9d5, 0x4821, { 0x9c, 0x94, 0x14, 0x0f, 0x63, 0x2f, 0x63, 0x12, } } /*b92e9980-b9d5-4821-9c94-140f632f6312*/, "Windows 7 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x54a09a0d, 0xd57b, 0x4c10, { 0x8b, 0x69, 0xa8, 0x42, 0xd6, 0x59, 0x0a, 0xd5, } } /*54a09a0d-d57b-4c10-8b69-a842d6590ad5*/, "Windows 7 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + + + // Windows Vista + + { { 0xcfd8ff08, 0xc0d7, 0x452b, { 0x9f, 0x60, 0xef, 0x5c, 0x70, 0xc3, 0x20, 0x94, } } /*cfd8ff08-c0d7-452b-9f60-ef5c70c32094*/, "Windows Vista Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + { { 0xd4f54950, 0x26f2, 0x4fb4, { 0xba, 0x21, 0xff, 0xab, 0x16, 0xaf, 0xca, 0xde, } } /*d4f54950-26f2-4fb4-ba21-ffab16afcade*/, "Windows Vista Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + { { 0x4f3d1606, 0x3fea, 0x4c01, { 0xbe, 0x3c, 0x8d, 0x67, 0x1c, 0x40, 0x1e, 0x3b, } } /*4f3d1606-3fea-4c01-be3c-8d671c401e3b*/, "Windows Vista Business", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + { { 0x2c682dc2, 0x8b68, 0x4f63, { 0xa1, 0x65, 0xae, 0x29, 0x1d, 0x4c, 0xf1, 0x38, } } /*2c682dc2-8b68-4f63-a165-ae291d4cf138*/, "Windows Vista Business N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + + + // Windows Embedded + + { { 0xaa6dd3aa, 0xc2b4, 0x40e2, { 0xa5, 0x44, 0xa6, 0xbb, 0xb3, 0xf5, 0xc3, 0x95, } } /*aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395*/, "Windows ThinPC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0xdb537896, 0x376f, 0x48ae, { 0xa4, 0x92, 0x53, 0xd0, 0x54, 0x77, 0x73, 0xd0, } } /*db537896-376f-48ae-a492-53d0547773d0*/, "Windows Embedded POSReady 7", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x0ab82d54, 0x47f4, 0x4acb, { 0x81, 0x8c, 0xcc, 0x5b, 0xf0, 0xec, 0xb6, 0x49, } } /*0ab82d54-47f4-4acb-818c-cc5bf0ecb649*/, "Windows Embedded Industry 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xcd4e2d9f, 0x5059, 0x4a50, { 0xa9, 0x2d, 0x05, 0xd5, 0xbb, 0x12, 0x67, 0xc7, } } /*cd4e2d9f-5059-4a50-a92d-05d5bb1267c7*/, "Windows Embedded Industry E 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xf7e88590, 0xdfc7, 0x4c78, { 0xbc, 0xcb, 0x6f, 0x38, 0x65, 0xb9, 0x9d, 0x1a, } } /*f7e88590-dfc7-4c78-bccb-6f3865b99d1a*/, "Windows Embedded Industry A 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + + // Office 2010 + + { { 0x8ce7e872, 0x188c, 0x4b98, { 0x9d, 0x90, 0xf8, 0xf9, 0x0b, 0x7a, 0xad, 0x02, } } /*8ce7e872-188c-4b98-9d90-f8f90b7aad02*/, "Office Access 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xcee5d470, 0x6e3b, 0x4fcc, { 0x8c, 0x2b, 0xd1, 0x74, 0x28, 0x56, 0x8a, 0x9f, } } /*cee5d470-6e3b-4fcc-8c2b-d17428568a9f*/, "Office Excel 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x8947d0b8, 0xc33b, 0x43e1, { 0x8c, 0x56, 0x9b, 0x67, 0x4c, 0x05, 0x28, 0x32, } } /*8947d0b8-c33b-43e1-8c56-9b674c052832*/, "Office Groove 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xca6b6639, 0x4ad6, 0x40ae, { 0xa5, 0x75, 0x14, 0xde, 0xe0, 0x7f, 0x64, 0x30, } } /*ca6b6639-4ad6-40ae-a575-14dee07f6430*/, "Office InfoPath 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x09ed9640, 0xf020, 0x400a, { 0xac, 0xd8, 0xd7, 0xd8, 0x67, 0xdf, 0xd9, 0xc2, } } /*09ed9640-f020-400a-acd8-d7d867dfd9c2*/, "Office Mondo 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xef3d4e49, 0xa53d, 0x4d81, { 0xa2, 0xb1, 0x2c, 0xa6, 0xc2, 0x55, 0x6b, 0x2c, } } /*ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c*/, "Office Mondo 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xab586f5c, 0x5256, 0x4632, { 0x96, 0x2f, 0xfe, 0xfd, 0x8b, 0x49, 0xe6, 0xf4, } } /*ab586f5c-5256-4632-962f-fefd8b49e6f4*/, "Office OneNote 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xecb7c192, 0x73ab, 0x4ded, { 0xac, 0xf4, 0x23, 0x99, 0xb0, 0x95, 0xd0, 0xcc, } } /*ecb7c192-73ab-4ded-acf4-2399b095d0cc*/, "Office OutLook 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x45593b1d, 0xdfb1, 0x4e91, { 0xbb, 0xfb, 0x2d, 0x5d, 0x0c, 0xe2, 0x22, 0x7a, } } /*45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a*/, "Office PowerPoint 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xdf133ff7, 0xbf14, 0x4f95, { 0xaf, 0xe3, 0x7b, 0x48, 0xe7, 0xe3, 0x31, 0xef, } } /*df133ff7-bf14-4f95-afe3-7b48e7e331ef*/, "Office Project Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x5dc7bf61, 0x5ec9, 0x4996, { 0x9c, 0xcb, 0xdf, 0x80, 0x6a, 0x2d, 0x0e, 0xfe, } } /*5dc7bf61-5ec9-4996-9ccb-df806a2d0efe*/, "Office Project Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xb50c4f75, 0x599b, 0x43e8, { 0x8d, 0xcd, 0x10, 0x81, 0xa7, 0x96, 0x72, 0x41, } } /*b50c4f75-599b-43e8-8dcd-1081a7967241*/, "Office Publisher 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x92236105, 0xbb67, 0x494f, { 0x94, 0xc7, 0x7f, 0x7a, 0x60, 0x79, 0x29, 0xbd, } } /*92236105-bb67-494f-94c7-7f7a607929bd*/, "Office Visio Premium 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xe558389c, 0x83c3, 0x4b29, { 0xad, 0xfe, 0x5e, 0x4d, 0x7f, 0x46, 0xc3, 0x58, } } /*e558389c-83c3-4b29-adfe-5e4d7f46c358*/, "Office Visio Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x9ed833ff, 0x4f92, 0x4f36, { 0xb3, 0x70, 0x86, 0x83, 0xa4, 0xf1, 0x32, 0x75, } } /*9ed833ff-4f92-4f36-b370-8683a4f13275*/, "Office Visio Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x2d0882e7, 0xa4e7, 0x423b, { 0x8c, 0xcc, 0x70, 0xd9, 0x1e, 0x01, 0x58, 0xb1, } } /*2d0882e7-a4e7-423b-8ccc-70d91e0158b1*/, "Office Word 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x6f327760, 0x8c5c, 0x417c, { 0x9b, 0x61, 0x83, 0x6a, 0x98, 0x28, 0x7e, 0x0c, } } /*6f327760-8c5c-417c-9b61-836a98287e0c*/, "Office Professional Plus 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x9da2a678, 0xfb6b, 0x4e67, { 0xab, 0x84, 0x60, 0xdd, 0x6a, 0x9c, 0x81, 0x9a, } } /*9da2a678-fb6b-4e67-ab84-60dd6a9c819a*/, "Office Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xea509e87, 0x07a1, 0x4a45, { 0x9e, 0xdc, 0xeb, 0xa5, 0xa3, 0x9f, 0x36, 0xaf, } } /*ea509e87-07a1-4a45-9edc-eba5a39f36af*/, "Office Small Business Basics 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + + // Office 2013 + + { { 0x6ee7622c, 0x18d8, 0x4005, { 0x9f, 0xb7, 0x92, 0xdb, 0x64, 0x4a, 0x27, 0x9b, } } /*6ee7622c-18d8-4005-9fb7-92db644a279b*/, "Office Access 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xf7461d52, 0x7c2b, 0x43b2, { 0x87, 0x44, 0xea, 0x95, 0x8e, 0x0b, 0xd0, 0x9a, } } /*f7461d52-7c2b-43b2-8744-ea958e0bd09a*/, "Office Excel 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xa30b8040, 0xd68a, 0x423f, { 0xb0, 0xb5, 0x9c, 0xe2, 0x92, 0xea, 0x5a, 0x8f, } } /*a30b8040-d68a-423f-b0b5-9ce292ea5a8f*/, "Office InfoPath 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x1b9f11e3, 0xc85c, 0x4e1b, { 0xbb, 0x29, 0x87, 0x9a, 0xd2, 0xc9, 0x09, 0xe3, } } /*1b9f11e3-c85c-4e1b-bb29-879ad2c909e3*/, "Office Lync 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xdc981c6b, 0xfc8e, 0x420f, { 0xaa, 0x43, 0xf8, 0xf3, 0x3e, 0x5c, 0x09, 0x23, } } /*dc981c6b-fc8e-420f-aa43-f8f33e5c0923*/, "Office Mondo 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xefe1f3e6, 0xaea2, 0x4144, { 0xa2, 0x08, 0x32, 0xaa, 0x87, 0x2b, 0x65, 0x45, } } /*efe1f3e6-aea2-4144-a208-32aa872b6545*/, "Office OneNote 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x771c3afa, 0x50c5, 0x443f, { 0xb1, 0x51, 0xff, 0x25, 0x46, 0xd8, 0x63, 0xa0, } } /*771c3afa-50c5-443f-b151-ff2546d863a0*/, "Office OutLook 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x8c762649, 0x97d1, 0x4953, { 0xad, 0x27, 0xb7, 0xe2, 0xc2, 0x5b, 0x97, 0x2e, } } /*8c762649-97d1-4953-ad27-b7e2c25b972e*/, "Office PowerPoint 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x4a5d124a, 0xe620, 0x44ba, { 0xb6, 0xff, 0x65, 0x89, 0x61, 0xb3, 0x3b, 0x9a, } } /*4a5d124a-e620-44ba-b6ff-658961b33b9a*/, "Office Project Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x427a28d1, 0xd17c, 0x4abf, { 0xb7, 0x17, 0x32, 0xc7, 0x80, 0xba, 0x6f, 0x07, } } /*427a28d1-d17c-4abf-b717-32c780ba6f07*/, "Office Project Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x00c79ff1, 0x6850, 0x443d, { 0xbf, 0x61, 0x71, 0xcd, 0xe0, 0xde, 0x30, 0x5f, } } /*00c79ff1-6850-443d-bf61-71cde0de305f*/, "Office Publisher 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xac4efaf0, 0xf81f, 0x4f61, { 0xbd, 0xf7, 0xea, 0x32, 0xb0, 0x2a, 0xb1, 0x17, } } /*ac4efaf0-f81f-4f61-bdf7-ea32b02ab117*/, "Office Visio Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xe13ac10e, 0x75d0, 0x4aff, { 0xa0, 0xcd, 0x76, 0x49, 0x82, 0xcf, 0x54, 0x1c, } } /*e13ac10e-75d0-4aff-a0cd-764982cf541c*/, "Office Visio Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xd9f5b1c6, 0x5386, 0x495a, { 0x88, 0xf9, 0x9a, 0xd6, 0xb4, 0x1a, 0xc9, 0xb3, } } /*d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3*/, "Office Word 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } } /*b322da9c-a2e2-4058-9e4e-f59a6970bd69*/, "Office Professional Plus 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xb13afb38, 0xcd79, 0x4ae5, { 0x9f, 0x7f, 0xee, 0xd0, 0x58, 0xd7, 0x50, 0xca, } } /*b13afb38-cd79-4ae5-9f7f-eed058d750ca*/, "Office Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + + // Office 2016 + + { { 0xd450596f, 0x894d, 0x49e0, { 0x96, 0x6a, 0xfd, 0x39, 0xed, 0x4c, 0x4c, 0x64, } } /*d450596f-894d-49e0-966a-fd39ed4c4c64*/, "Office Professional Plus 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x4f414197, 0x0fc2, 0x4c01, { 0xb6, 0x8a, 0x86, 0xcb, 0xb9, 0xac, 0x25, 0x4c, } } /*4f414197-0fc2-4c01-b68a-86cbb9ac254c*/, "Office Project Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x6bf301c1, 0xb94a, 0x43e9, { 0xba, 0x31, 0xd4, 0x94, 0x59, 0x8c, 0x47, 0xfb, } } /*6bf301c1-b94a-43e9-ba31-d494598c47fb*/, "Office Visio Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x041a06cb, 0xc5b8, 0x4772, { 0x80, 0x9f, 0x41, 0x6d, 0x03, 0xd1, 0x66, 0x54, } } /*041a06cb-c5b8-4772-809f-416d03d16654*/, "Office Publisher 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x67c0fc0c, 0xdeba, 0x401b, { 0xbf, 0x8b, 0x9c, 0x8a, 0xd8, 0x39, 0x58, 0x04, } } /*67c0fc0c-deba-401b-bf8b-9c8ad8395804*/, "Office Access 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x83e04ee1, 0xfa8d, 0x436d, { 0x89, 0x94, 0xd3, 0x1a, 0x86, 0x2c, 0xab, 0x77, } } /*83e04ee1-fa8d-436d-8994-d31a862cab77*/, "Office Skype for Business 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x9caabccb, 0x61b1, 0x4b4b, { 0x8b, 0xec, 0xd1, 0x0a, 0x3c, 0x3a, 0xc2, 0xce, } } /*9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce*/, "Office Mondo 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xaa2a7821, 0x1827, 0x4c2c, { 0x8f, 0x1d, 0x45, 0x13, 0xa3, 0x4d, 0xda, 0x97, } } /*aa2a7821-1827-4c2c-8f1d-4513a34dda97*/, "Office Visio Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xbb11badf, 0xd8aa, 0x470e, { 0x93, 0x11, 0x20, 0xea, 0xf8, 0x0f, 0xe5, 0xcc, } } /*bb11badf-d8aa-470e-9311-20eaf80fe5cc*/, "Office Word 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xc3e65d36, 0x141f, 0x4d2f, { 0xa3, 0x03, 0xa8, 0x42, 0xee, 0x75, 0x6a, 0x29, } } /*c3e65d36-141f-4d2f-a303-a842ee756a29*/, "Office Excel 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xd70b1bba, 0xb893, 0x4544, { 0x96, 0xe2, 0xb7, 0xa3, 0x18, 0x09, 0x1c, 0x33, } } /*d70b1bba-b893-4544-96e2-b7a318091c33*/, "Office Powerpoint 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xd8cace59, 0x33d2, 0x4ac7, { 0x9b, 0x1b, 0x9b, 0x72, 0x33, 0x9c, 0x51, 0xc8, } } /*d8cace59-33d2-4ac7-9b1b-9b72339c51c8*/, "Office OneNote 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xda7ddabc, 0x3fbe, 0x4447, { 0x9e, 0x01, 0x6a, 0xb7, 0x44, 0x0b, 0x4c, 0xd4, } } /*da7ddabc-3fbe-4447-9e01-6ab7440b4cd4*/, "Office Project Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xdedfa23d, 0x6ed1, 0x45a6, { 0x85, 0xdc, 0x63, 0xca, 0xe0, 0x54, 0x6d, 0xe6, } } /*dedfa23d-6ed1-45a6-85dc-63cae0546de6*/, "Office Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xe914ea6e, 0xa5fa, 0x4439, { 0xa3, 0x94, 0xa9, 0xbb, 0x32, 0x93, 0xca, 0x09, } } /*e914ea6e-a5fa-4439-a394-a9bb3293ca09*/, "Office Mondo R 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xec9d9265, 0x9d1e, 0x4ed0, { 0x83, 0x8a, 0xcd, 0xc2, 0x0f, 0x25, 0x51, 0xa1, } } /*ec9d9265-9d1e-4ed0-838a-cdc20f2551a1*/, "Office Outlook 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + + // End marker (necessity should be removed when time permits) + + { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 } +}; + + +// necessary because other .c files cannot access _countof() +__pure ProdListIndex_t getExtendedProductListSize(void) +{ + return _countof(ExtendedProductList) - 1; +} + +__pure ProdListIndex_t getAppListSize(void) +{ + return _countof(AppList); +} + +#endif + +#ifndef NO_RANDOM_EPID +// HostType and OSBuild +static const struct KMSHostOS { uint16_t Type; uint16_t Build; } HostOS[] = +{ + { 55041, 6002 }, // Windows Server 2008 SP2 + { 55041, 7601 }, // Windows Server 2008 R2 SP1 + { 5426, 9200 }, // Windows Server 2012 + { 6401, 9600 }, // Windows Server 2012 R2 + { 3612, 10240}, // Windows Server 2016 +}; + +// GroupID and PIDRange +static const struct PKEYCONFIG { uint16_t GroupID; uint32_t RangeMin; uint32_t RangeMax; } pkeyconfig[] = { + { 206, 152000000, 191999999 }, // Windows Server 2012 KMS Host pkeyconfig + { 206, 271000000, 310999999 }, // Windows Server 2012 R2 KMS Host pkeyconfig + { 96, 199000000, 217999999 }, // Office2010 KMS Host pkeyconfig + { 206, 234000000, 255999999 }, // Office2013 KMS Host pkeyconfig +}; + +// Valid language identifiers to be used in the ePID +static const uint16_t LcidList[] = { + 1078, 1052, 1025, 2049, 3073, 4097, 5121, 6145, 7169, 8193, 9217, 10241, 11265, 12289, 13313, 14337, 15361, 16385, + 1067, 1068, 2092, 1069, 1059, 1093, 5146, 1026, 1027, 1028, 2052, 3076, 4100, 5124, 1050, 4122, 1029, 1030, 1125, 1043, 2067, + 1033, 2057, 3081, 4105, 5129, 6153, 7177, 8201, 9225, 10249, 11273, 12297, 13321, 1061, 1080, 1065, 1035, 1036, 2060, + 3084, 4108, 5132, 6156, 1079, 1110, 1031, 2055, 3079, 4103, 5127, 1032, 1095, 1037, 1081, 1038, 1039, 1057, 1040, 2064, 1041, 1099, + 1087, 1111, 1042, 1088, 1062, 1063, 1071, 1086, 2110, 1100, 1082, 1153, 1102, 1104, 1044, 2068, 1045, 1046, 2070, + 1094, 1131, 2155, 3179, 1048, 1049, 9275, 4155, 5179, 3131, 1083, 2107, 8251, 6203, 7227, 1103, 2074, 6170, 3098, + 7194, 1051, 1060, 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, 12298, 13322, 14346, 15370, 16394, + 17418, 18442, 19466, 20490, 1089, 1053, 2077, 1114, 1097, 1092, 1098, 1054, 1074, 1058, 1056, 1091, 2115, 1066, 1106, 1076, 1077 +}; + + +#ifdef _PEDANTIC +uint16_t IsValidLcid(const uint16_t Lcid) +{ + uint16_t i; + + for (i = 0; i < _countof(LcidList); i++) + { + if (Lcid == LcidList[i]) return Lcid; + } + + return 0; +} +#endif // _PEDANTIC +#endif // NO_RANDOM_EPID + + +// Unix time is seconds from 1970-01-01. Should be 64 bits to avoid Year 2035 overflow bug. +// FILETIME is 100 nanoseconds from 1601-01-01. Must be 64 bits. +void getUnixTimeAsFileTime(FILETIME *const ts) +{ + int64_t unixtime = (int64_t)time(NULL); + int64_t *filetime = (int64_t*)ts; + + *filetime = LE64( (unixtime + 11644473600LL) * 10000000LL ); +} + +__pure int64_t fileTimeToUnixTime(const FILETIME *const ts) +{ + return LE64( *((const int64_t *const)ts) ) / 10000000LL - 11644473600LL; +} + + +/* + * Get's a product name with a GUID in host-endian order. + * List can be any list defined above. + */ +const char* getProductNameHE(const GUID *const guid, const KmsIdList *const List, ProdListIndex_t *const i) +{ + for (*i = 0; List[*i].name != NULL; (*i)++) + { + if (IsEqualGUID(guid, &List[*i].guid)) + return List[*i].name; + } + + return "Unknown"; +} + + +/* + * same as getProductnameHE except GUID is in little-endian (network) order + */ +const char* getProductNameLE(const GUID *const guid, const KmsIdList *const List, ProdListIndex_t *const i) +{ + #if __BYTE_ORDER != __LITTLE_ENDIAN + GUID HeGUID; + LEGUID(&HeGUID, guid); + return getProductNameHE(&HeGUID, List, i); + #else + return getProductNameHE(guid, List, i); + #endif +} + + +#ifndef NO_RANDOM_EPID +// formats an int with a fixed number of digits with leading zeros (helper for ePID generation) +static char* itoc(char *const c, const int i, uint_fast8_t digits) +{ + char formatString[8]; + if (digits > 9) digits = 0; + strcpy(formatString,"%"); + + if (digits) + { + formatString[1] = '0'; + formatString[2] = digits | 0x30; + formatString[3] = 0; + } + + strcat(formatString, "u"); + sprintf(c, formatString, i); + return c; +} + +static int getRandomServerType() +{ +# ifndef USE_MSRPC + if (!UseRpcBTFN) +# endif // USE_MSRPC + { + // This isn't possible at all, e.g. KMS host on XP + return rand() % (int)_countof(HostOS); + } +# ifndef USE_MSRPC + else + { + // return 9200/9600/10240 if NDR64 is in use, otherwise 6002/7601 + if (UseRpcNDR64) return (rand() % 3) + 2; + return (rand() % 2); + } +# endif // USE_MSRPC +} + + +/* + * Generates a random ePID + */ +static void generateRandomPid(const int index, char *const szPid, int serverType, int16_t lang) +{ + int clientApp; + char numberBuffer[12]; + + if (serverType < 0 || serverType >= (int)_countof(HostOS)) + { + serverType = getRandomServerType(); + } + + strcpy(szPid, itoc(numberBuffer, HostOS[serverType].Type, 5)); + strcat(szPid, "-"); + + if (index == 2) + clientApp = 3; + else if (index == 1) + clientApp = 2; + else + clientApp = serverType == 3 /*change if HostOS changes*/ ? 1 : 0; + + strcat(szPid, itoc(numberBuffer, pkeyconfig[clientApp].GroupID, 5)); + strcat(szPid, "-"); + + int keyId = (rand32() % (pkeyconfig[clientApp].RangeMax - pkeyconfig[clientApp].RangeMin)) + pkeyconfig[clientApp].RangeMin; + strcat(szPid, itoc(numberBuffer, keyId / 1000000, 3)); + strcat(szPid, "-"); + strcat(szPid, itoc(numberBuffer, keyId % 1000000, 6)); + strcat(szPid, "-03-"); + + if (lang < 0) lang = LcidList[rand() % _countof(LcidList)]; + strcat(szPid, itoc(numberBuffer, lang, 0)); + strcat(szPid, "-"); + + strcat(szPid, itoc(numberBuffer, HostOS[serverType].Build, 0)); + strcat(szPid, ".0000-"); + +# define minTime ((time_t)1436958000) // Release Date Windows 10 RTM Escrow + + time_t maxTime, kmsTime; + time(&maxTime); + + if (maxTime < minTime) // Just in case the system time is < 07/15/2015 1:00 pm + maxTime = (time_t)BUILD_TIME; + + kmsTime = (rand32() % (maxTime - minTime)) + minTime; +# undef minTime + + struct tm *pidTime; + pidTime = gmtime(&kmsTime); + + strcat(szPid, itoc(numberBuffer, pidTime->tm_yday, 3)); + strcat(szPid, itoc(numberBuffer, pidTime->tm_year + 1900, 4)); +} + + +/* + * Generates random ePIDs and stores them if not already read from ini file. + * For use with randomization level 1 + */ +void randomPidInit() +{ + ProdListIndex_t i; + + int serverType = getRandomServerType(); + int16_t lang = Lcid ? Lcid : LcidList[rand() % _countof(LcidList)]; + + for (i = 0; i < _countof(AppList) - 1; i++) + { + if (KmsResponseParameters[i].Epid) continue; + + char Epid[PID_BUFFER_SIZE]; + + generateRandomPid(i, Epid, serverType, lang); + KmsResponseParameters[i].Epid = (const char*)vlmcsd_malloc(strlen(Epid) + 1); + + strcpy((char*)KmsResponseParameters[i].Epid, Epid); + + #ifndef NO_LOG + KmsResponseParameters[i].EpidSource = "randomized at program start"; + #endif // NO_LOG + } +} + +#endif // NO_RANDOM_EPID + + +#ifndef NO_LOG +/* + * Logs a Request + */ +static void logRequest(const REQUEST *const baseRequest) +{ + const char *productName; + char clientname[64]; + ProdListIndex_t index; + + #ifndef NO_EXTENDED_PRODUCT_LIST + productName = getProductNameLE(&baseRequest->ActID, ExtendedProductList, &index); + if (++index >= (int)_countof(ExtendedProductList)) + #endif // NO_EXTENDED_PRODUCT_LIST + { + #ifndef NO_BASIC_PRODUCT_LIST + productName = getProductNameLE(&baseRequest->KMSID, ProductList, &index); + if (++index >= (int)_countof(ProductList)) + #endif // NO_BASIC_PRODUCT_LIST + { + productName = getProductNameLE(&baseRequest->AppID, AppList, &index); + } + } + + #ifndef NO_VERBOSE_LOG + if (logverbose) + { + logger("<<< Incoming KMS request\n"); + logRequestVerbose(baseRequest, &logger); + } + else + { + #endif // NO_VERBOSE_LOG + ucs2_to_utf8(baseRequest->WorkstationName, clientname, 64, 64); + logger("KMS v%i.%i request from %s for %s\n", LE16(baseRequest->MajorVer), LE16(baseRequest->MinorVer), clientname, productName); + #ifndef NO_VERBOSE_LOG + } + #endif // NO_VERBOSE_LOG +} +#endif // NO_LOG + + +/* + * Converts a utf-8 ePID string to UCS-2 and writes it to a RESPONSE struct + */ +static void getEpidFromString(RESPONSE *const Response, const char *const pid) +{ + size_t length = utf8_to_ucs2(Response->KmsPID, pid, PID_BUFFER_SIZE, PID_BUFFER_SIZE * 3); + Response->PIDSize = LE32(((unsigned int )length + 1) << 1); +} + + +/* + * get ePID from appropriate source + */ +static void getEpid(RESPONSE *const baseResponse, const char** EpidSource, const ProdListIndex_t index, BYTE *const HwId) +{ + const char* pid; + if (KmsResponseParameters[index].Epid == NULL) + { + #ifndef NO_RANDOM_EPID + if (RandomizationLevel == 2) + { + char szPid[PID_BUFFER_SIZE]; + generateRandomPid(index, szPid, -1, Lcid ? Lcid : -1); + pid = szPid; + + #ifndef NO_LOG + *EpidSource = "randomized on every request"; + #endif // NO_LOG + } + else + #endif // NO_RANDOM_EPID + { + pid = AppList[index].pid; + #ifndef NO_LOG + *EpidSource = "vlmcsd default"; + #endif // NO_LOG + } + } + else + { + pid = KmsResponseParameters[index].Epid; + + if (HwId && KmsResponseParameters[index].HwId != NULL) + memcpy(HwId, KmsResponseParameters[index].HwId, sizeof(((RESPONSE_V6 *)0)->HwId)); + + #ifndef NO_LOG + *EpidSource = KmsResponseParameters[index].EpidSource; + #endif // NO_LOG + } + getEpidFromString(baseResponse, pid); +} + + +#if !defined(NO_LOG) && defined(_PEDANTIC) +static BOOL CheckVersion4Uuid(const GUID *const guid, const char *const szGuidName) +{ + if (LE16(guid->Data3) >> 12 != 4 || guid->Data4[0] >> 6 != 2) + { + logger("Warning: %s does not conform to version 4 UUID according to RFC 4122\n", szGuidName); + return FALSE; + } + return TRUE; +} + + +static void CheckRequest(const REQUEST *const Request) +{ + CheckVersion4Uuid(&Request->CMID, "Client machine ID"); + CheckVersion4Uuid(&Request->AppID, "Application ID"); + CheckVersion4Uuid(&Request->KMSID, "Server SKU ID"); + CheckVersion4Uuid(&Request->ActID, "Client SKU ID"); + + if (LE32(Request->IsClientVM) > 1) + logger("Warning: Virtual Machine field in request must be 0 or 1 but is %u\n", LE32(Request->IsClientVM)); + + if (LE32(Request->LicenseStatus) > 6 ) + logger("Warning: License status must be between 0 and 6 but is %u\n", LE32(Request->LicenseStatus)); +} +#endif // !defined(NO_LOG) && defined(_PEDANTIC) + + +#ifndef NO_LOG +/* + * Logs the Response + */ +static void logResponse(const RESPONSE *const baseResponse, const BYTE *const hwId, const char *const EpidSource) +{ + char utf8pid[PID_BUFFER_SIZE * 3]; + ucs2_to_utf8(baseResponse->KmsPID, utf8pid, PID_BUFFER_SIZE, PID_BUFFER_SIZE * 3); + + #ifndef NO_VERBOSE_LOG + if (!logverbose) + { + #endif // NO_VERBOSE_LOG + logger("Sending ePID (%s): %s\n", EpidSource, utf8pid); + #ifndef NO_VERBOSE_LOG + } + else + { + logger(">>> Sending response, ePID source = %s\n", EpidSource); + logResponseVerbose(utf8pid, hwId, baseResponse, &logger); + } + #endif // NO_VERBOSE_LOG + +} +#endif + + +/* + * Creates the unencrypted base response + */ +static BOOL __stdcall CreateResponseBaseCallback(const REQUEST *const baseRequest, RESPONSE *const baseResponse, BYTE *const hwId, const char* const ipstr) +{ + const char* EpidSource; + #ifndef NO_LOG + logRequest(baseRequest); + #ifdef _PEDANTIC + CheckRequest(baseRequest); + #endif // _PEDANTIC + #endif // NO_LOG + + ProdListIndex_t index; + + getProductNameLE(&baseRequest->AppID, AppList, &index); + + if (index >= _countof(AppList) - 1) index = 0; //default to Windows + + getEpid(baseResponse, &EpidSource, index, hwId); + + baseResponse->Version = baseRequest->Version; + + memcpy(&baseResponse->CMID, &baseRequest->CMID, sizeof(GUID)); + memcpy(&baseResponse->ClientTime, &baseRequest->ClientTime, sizeof(FILETIME)); + + baseResponse->Count = LE32(LE32(baseRequest->N_Policy) << 1); + baseResponse->VLActivationInterval = LE32(VLActivationInterval); + baseResponse->VLRenewalInterval = LE32(VLRenewalInterval); + + #ifndef NO_LOG + logResponse(baseResponse, hwId, EpidSource); + #endif // NO_LOG + + return !0; +} + +RequestCallback_t CreateResponseBase = &CreateResponseBaseCallback; + +////TODO: Move to helpers.c +void get16RandomBytes(void* ptr) +{ + int i; + for (i = 0; i < 4; i++) ((DWORD*)ptr)[i] = rand32(); +} + + +/* + * Creates v4 response + */ +size_t CreateResponseV4(REQUEST_V4 *const request_v4, BYTE *const responseBuffer, const char* const ipstr) +{ + RESPONSE_V4* Response = (RESPONSE_V4*)responseBuffer; + + if ( !CreateResponseBase(&request_v4->RequestBase, &Response->ResponseBase, NULL, ipstr) ) return 0; + + DWORD pidSize = LE32(Response->ResponseBase.PIDSize); + BYTE* postEpidPtr = responseBuffer + V4_PRE_EPID_SIZE + pidSize; + memmove(postEpidPtr, &Response->ResponseBase.CMID, V4_POST_EPID_SIZE); + + size_t encryptSize = V4_PRE_EPID_SIZE + V4_POST_EPID_SIZE + pidSize; + AesCmacV4(responseBuffer, encryptSize, responseBuffer + encryptSize); + + return encryptSize + sizeof(Response->MAC); +} + +/* +// Workaround for buggy GCC 4.2/4.3 +#if defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ < 4) +__attribute__((noinline)) +#endif +__pure static uint64_t TimestampInterval(void *ts) +{ + return ( GET_UA64LE(ts) / TIME_C1 ) * TIME_C2 + TIME_C3; +}*/ + + +/* + * Creates the HMAC for v6 + */ +static int_fast8_t CreateV6Hmac(BYTE *const encrypt_start, const size_t encryptSize, int_fast8_t tolerance) +{ + BYTE hash[32]; +# define halfHashSize (sizeof(hash) >> 1) + uint64_t timeSlot; + BYTE *responseEnd = encrypt_start + encryptSize; + + // This is the time from the response + FILETIME* ft = (FILETIME*)(responseEnd - V6_POST_EPID_SIZE + sizeof(((RESPONSE*)0)->CMID)); + + // Generate a time slot that changes every 4.11 hours. + // Request and repsonse time must match +/- 1 slot. + // When generating a response tolerance must be 0. + // If verifying the hash, try tolerance -1, 0 and +1. One of them must match. + + timeSlot = LE64( (GET_UA64LE(ft) / TIME_C1 * TIME_C2 + TIME_C3) + (tolerance * TIME_C1) ); + + // The time slot is hashed with SHA256 so it is not so obvious that it is time + Sha256((BYTE*) &timeSlot, sizeof(timeSlot), hash); + + // The last 16 bytes of the hashed time slot are the actual HMAC key + if (!Sha256Hmac + ( + hash + halfHashSize, // Use last 16 bytes of SHA256 as HMAC key + encrypt_start, // hash only the encrypted part of the v6 response + encryptSize - sizeof(((RESPONSE_V6*)0)->HMAC), // encryptSize minus the HMAC itself + hash // use same buffer for resulting hash where the key came from + )) + { + return FALSE; + } + + memcpy(responseEnd - sizeof(((RESPONSE_V6*)0)->HMAC), hash + halfHashSize, halfHashSize); + return TRUE; +# undef halfHashSize +} + + +/* + * Creates v5 or v6 response + */ +size_t CreateResponseV6(REQUEST_V6 *restrict request_v6, BYTE *const responseBuffer, const char* const ipstr) +{ + // The response will be created in a fixed sized struct to + // avoid unaligned access macros and packed structs on RISC systems + // which largely increase code size. + // + // The fixed sized struct with 64 WCHARs for the ePID will be converted + // to a variable sized struct later and requires unaligned access macros. + + RESPONSE_V6* Response = (RESPONSE_V6*)responseBuffer; + RESPONSE* baseResponse = &Response->ResponseBase; + + #ifdef _DEBUG + RESPONSE_V6_DEBUG* xxx = (RESPONSE_V6_DEBUG*)responseBuffer; + #endif + + static const BYTE DefaultHwid[8] = { HWID }; + int_fast8_t v6 = LE16(request_v6->MajorVer) > 5; + AesCtx aesCtx; + + AesInitKey(&aesCtx, v6 ? AesKeyV6 : AesKeyV5, v6, AES_KEY_BYTES); + AesDecryptCbc(&aesCtx, NULL, request_v6->IV, V6_DECRYPT_SIZE); + + // get random salt and SHA256 it + get16RandomBytes(Response->RandomXoredIVs); + Sha256(Response->RandomXoredIVs, sizeof(Response->RandomXoredIVs), Response->Hash); + + if (v6) // V6 specific stuff + { + // In v6 a random IV is generated + Response->Version = request_v6->Version; + get16RandomBytes(Response->IV); + + // pre-fill with default HwId (not required for v5) + memcpy(Response->HwId, DefaultHwid, sizeof(Response->HwId)); + + // Just copy decrypted request IV (using Null IV) here. Note this is identical + // to XORing non-decrypted request and reponse IVs + memcpy(Response->XoredIVs, request_v6->IV, sizeof(Response->XoredIVs)); + } + else // V5 specific stuff + { + // In v5 IVs of request and response must be identical (MS client checks this) + // The following memcpy copies Version and IVs at once + memcpy(Response, request_v6, V6_UNENCRYPTED_SIZE); + } + + // Xor Random bytes with decrypted request IV + XorBlock(request_v6->IV, Response->RandomXoredIVs); + + // Get the base response + if ( !CreateResponseBase(&request_v6->RequestBase, baseResponse, Response->HwId, ipstr) ) return 0; + + // Convert the fixed sized struct into variable sized + DWORD pidSize = LE32(baseResponse->PIDSize); + BYTE* postEpidPtr = responseBuffer + V6_PRE_EPID_SIZE + pidSize; + size_t post_epid_size = v6 ? V6_POST_EPID_SIZE : V5_POST_EPID_SIZE; + + memmove(postEpidPtr, &baseResponse->CMID, post_epid_size); + + // number of bytes to encrypt + size_t encryptSize = + V6_PRE_EPID_SIZE + - sizeof(Response->Version) + + pidSize + + post_epid_size; + + //AesDecryptBlock(&aesCtx, Response->IV); + if (v6 && !CreateV6Hmac(Response->IV, encryptSize, 0)) return 0; + + // Padding auto handled by encryption func + AesEncryptCbc(&aesCtx, NULL, Response->IV, &encryptSize); + + return encryptSize + sizeof(Response->Version); +} + + +// Create Hashed KMS Client Request Data for KMS Protocol Version 4 +BYTE *CreateRequestV4(size_t *size, const REQUEST* requestBase) +{ + *size = sizeof(REQUEST_V4); + + // Build a proper KMS client request data + BYTE *request = (BYTE *)vlmcsd_malloc(sizeof(REQUEST_V4)); + + // Temporary Pointer for access to REQUEST_V4 structure + REQUEST_V4 *request_v4 = (REQUEST_V4 *)request; + + // Set KMS Client Request Base + memcpy(&request_v4->RequestBase, requestBase, sizeof(REQUEST)); + + // Generate Hash Signature + AesCmacV4(request, sizeof(REQUEST), request_v4->MAC); + + // Return Request Data + return request; +} + + +// Create Encrypted KMS Client Request Data for KMS Protocol Version 6 +BYTE* CreateRequestV6(size_t *size, const REQUEST* requestBase) +{ + *size = sizeof(REQUEST_V6); + + // Temporary Pointer for access to REQUEST_V5 structure + REQUEST_V6 *request = (REQUEST_V6 *)vlmcsd_malloc(sizeof(REQUEST_V6)); + + // KMS Protocol Version + request->Version = requestBase->Version; + + // Initialize the IV + get16RandomBytes(request->IV); + + // Set KMS Client Request Base + memcpy(&request->RequestBase, requestBase, sizeof(REQUEST)); + + // Encrypt KMS Client Request + size_t encryptSize = sizeof(request->RequestBase); + AesCtx Ctx; + int_fast8_t v6 = LE16(request->MajorVer) > 5; + AesInitKey(&Ctx, v6 ? AesKeyV6 : AesKeyV5, v6, 16); + AesEncryptCbc(&Ctx, request->IV, (BYTE*)(&request->RequestBase), &encryptSize); + + // Return Proper Request Data + return (BYTE*)request; +} + + +/* + * Checks whether Length of ePID is valid + */ +static uint8_t checkPidLength(const RESPONSE *const responseBase) +{ + unsigned int i; + + if (LE32(responseBase->PIDSize) > (PID_BUFFER_SIZE << 1)) return FALSE; + if (responseBase->KmsPID[(LE32(responseBase->PIDSize) >> 1) - 1]) return FALSE; + + for (i = 0; i < (LE32(responseBase->PIDSize) >> 1) - 2; i++) + { + if (!responseBase->KmsPID[i]) return FALSE; + } + + return TRUE; +} + + +/* + * "Decrypts" a KMS v4 response. Actually just copies to a fixed size buffer + */ +RESPONSE_RESULT DecryptResponseV4(RESPONSE_V4* response_v4, const int responseSize, BYTE* const rawResponse, const BYTE* const rawRequest) +{ + int copySize = + V4_PRE_EPID_SIZE + + (LE32(((RESPONSE_V4*)rawResponse)->ResponseBase.PIDSize) <= PID_BUFFER_SIZE << 1 ? + LE32(((RESPONSE_V4*)rawResponse)->ResponseBase.PIDSize) : + PID_BUFFER_SIZE << 1); + + int messageSize = copySize + V4_POST_EPID_SIZE; + + memcpy(response_v4, rawResponse, copySize); + memcpy(&response_v4->ResponseBase.CMID, rawResponse + copySize, responseSize - copySize); + + // ensure PID is null terminated + response_v4->ResponseBase.KmsPID[PID_BUFFER_SIZE-1] = 0; + + uint8_t* mac = rawResponse + messageSize; + AesCmacV4(rawResponse, messageSize, mac); + + REQUEST_V4* request_v4 = (REQUEST_V4*)rawRequest; + RESPONSE_RESULT result; + + result.mask = (DWORD)~0; + result.PidLengthOK = checkPidLength((RESPONSE*)rawResponse); + result.VersionOK = response_v4->ResponseBase.Version == request_v4->RequestBase.Version; + result.HashOK = !memcmp(&response_v4->MAC, mac, sizeof(response_v4->MAC)); + result.TimeStampOK = !memcmp(&response_v4->ResponseBase.ClientTime, &request_v4->RequestBase.ClientTime, sizeof(FILETIME)); + result.ClientMachineIDOK = !memcmp(&response_v4->ResponseBase.CMID, &request_v4->RequestBase.CMID, sizeof(GUID)); + result.effectiveResponseSize = responseSize; + result.correctResponseSize = sizeof(RESPONSE_V4) - sizeof(response_v4->ResponseBase.KmsPID) + LE32(response_v4->ResponseBase.PIDSize); + + return result; +} + + +static RESPONSE_RESULT VerifyResponseV6(RESPONSE_RESULT result, const AesCtx* Ctx, RESPONSE_V6* response_v6, REQUEST_V6* request_v6, BYTE* const rawResponse) +{ + // Check IVs + result.IVsOK = !memcmp // In V6 the XoredIV is actually the request IV + ( + response_v6->XoredIVs, + request_v6->IV, + sizeof(response_v6->XoredIVs) + ); + + result.IVnotSuspicious = !!memcmp // If IVs are identical, it is obviously an emulator + ( + request_v6->IV, + response_v6->IV, + sizeof(request_v6->IV) + ); + + // Check Hmac + int_fast8_t tolerance; + BYTE OldHmac[sizeof(response_v6->HMAC)]; + + result.HmacSha256OK = FALSE; + + memcpy // Save received HMAC to compare with calculated HMAC later + ( + OldHmac, + response_v6->HMAC, + sizeof(response_v6->HMAC) + ); + + //AesEncryptBlock(Ctx, Response_v6->IV); // CreateV6Hmac needs original IV as received over the network + + for (tolerance = -1; tolerance < 2; tolerance++) + { + CreateV6Hmac + ( + rawResponse + sizeof(response_v6->Version), // Pointer to start of the encrypted part of the response + (size_t)result.correctResponseSize - V6_UNENCRYPTED_SIZE, // size of the encrypted part + tolerance // tolerance -1, 0, or +1 + ); + + if + (( + result.HmacSha256OK = !memcmp // Compare both HMACs + ( + OldHmac, + rawResponse + (size_t)result.correctResponseSize - sizeof(response_v6->HMAC), + sizeof(OldHmac) + ) + )) + { + break; + } + } + return result; +} + + +static RESPONSE_RESULT VerifyResponseV5(RESPONSE_RESULT result, REQUEST_V5* request_v5, RESPONSE_V5* response_v5) +{ + // Check IVs: in V5 (and only v5) request and response IVs must match + result.IVsOK = !memcmp(request_v5->IV, response_v5->IV, sizeof(request_v5->IV)); + + // V5 has no Hmac, always set to TRUE + result.HmacSha256OK = TRUE; + + return result; +} + + +/* + * Decrypts a KMS v5 or v6 response received from a server. + * hwid must supply a valid 16 byte buffer for v6. hwid is ignored in v5 + */ +RESPONSE_RESULT DecryptResponseV6(RESPONSE_V6* response_v6, int responseSize, BYTE* const response, const BYTE* const rawRequest, BYTE* hwid) +{ + RESPONSE_RESULT result; + result.mask = ~0; // Set all bits in the results mask to 1. Assume success first. + result.effectiveResponseSize = responseSize; + + int copySize1 = + sizeof(response_v6->Version); + + // Decrypt KMS Server Response (encrypted part starts after RequestIV) + responseSize -= copySize1; + + AesCtx Ctx; + int_fast8_t v6 = LE16(((RESPONSE_V6*)response)->MajorVer) > 5; + + AesInitKey(&Ctx, v6 ? AesKeyV6 : AesKeyV5, v6, AES_KEY_BYTES); + AesDecryptCbc(&Ctx, NULL, response + copySize1, responseSize); + + // Check padding + BYTE* lastPadByte = response + (size_t)result.effectiveResponseSize - 1; + + // Must be from 1 to 16 + if (!*lastPadByte || *lastPadByte > AES_BLOCK_BYTES) + { + result.DecryptSuccess = FALSE; + return result; + } + + // Check if pad bytes are all the same + BYTE* padByte; + for (padByte = lastPadByte - *lastPadByte + 1; padByte < lastPadByte; padByte++) + if (*padByte != *lastPadByte) + { + result.DecryptSuccess = FALSE; + return result; + } + + // Add size of Version, KmsPIDLen and variable size PID + DWORD pidSize = LE32(((RESPONSE_V6*) response)->ResponseBase.PIDSize); + + copySize1 += + V6_UNENCRYPTED_SIZE + + sizeof(response_v6->ResponseBase.PIDSize) + + (pidSize <= PID_BUFFER_SIZE << 1 ? pidSize : PID_BUFFER_SIZE << 1); + + // Copy part 1 of response up to variable sized PID + memcpy(response_v6, response, copySize1); + + // ensure PID is null terminated + response_v6->ResponseBase.KmsPID[PID_BUFFER_SIZE - 1] = 0; + + // Copy part 2 + size_t copySize2 = v6 ? V6_POST_EPID_SIZE : V5_POST_EPID_SIZE; + memcpy(&response_v6->ResponseBase.CMID, response + copySize1, copySize2); + + // Decrypting the response is finished here. Now we check the results for validity + // A basic client doesn't need the stuff below this comment but we want to use vlmcs + // as a debug tool for KMS emulators. + + REQUEST_V6* request_v6 = (REQUEST_V6*) rawRequest; + DWORD decryptSize = sizeof(request_v6->IV) + sizeof(request_v6->RequestBase) + sizeof(request_v6->Pad); + + AesDecryptCbc(&Ctx, NULL, request_v6->IV, decryptSize); + + // Check that all version informations are the same + result.VersionOK = + request_v6->Version == response_v6->ResponseBase.Version && + request_v6->Version == response_v6->Version && + request_v6->Version == request_v6->RequestBase.Version; + + // Check Base Request + result.PidLengthOK = checkPidLength(&((RESPONSE_V6*) response)->ResponseBase); + result.TimeStampOK = !memcmp(&response_v6->ResponseBase.ClientTime, &request_v6->RequestBase.ClientTime, sizeof(FILETIME)); + result.ClientMachineIDOK = IsEqualGUID(&response_v6->ResponseBase.CMID, &request_v6->RequestBase.CMID); + + // Rebuild Random Key and Sha256 Hash + BYTE HashVerify[sizeof(response_v6->Hash)]; + BYTE RandomKey[sizeof(response_v6->RandomXoredIVs)]; + + memcpy(RandomKey, request_v6->IV, sizeof(RandomKey)); + XorBlock(response_v6->RandomXoredIVs, RandomKey); + Sha256(RandomKey, sizeof(RandomKey), HashVerify); + + result.HashOK = !memcmp(response_v6->Hash, HashVerify, sizeof(HashVerify)); + + // size before encryption (padding not included) + result.correctResponseSize = + (v6 ? sizeof(RESPONSE_V6) : sizeof(RESPONSE_V5)) + - sizeof(response_v6->ResponseBase.KmsPID) + + LE32(response_v6->ResponseBase.PIDSize); + + // Version specific stuff + if (v6) + { + // Copy the HwId + memcpy(hwid, response_v6->HwId, sizeof(response_v6->HwId)); + + // Verify the V6 specific part of the response + result = VerifyResponseV6(result, &Ctx, response_v6, request_v6, response); + } + else // V5 + { + // Verify the V5 specific part of the response + result = VerifyResponseV5(result, request_v6, (RESPONSE_V5*)response_v6); + } + + // padded size after encryption + result.correctResponseSize += (~(result.correctResponseSize - sizeof(response_v6->ResponseBase.Version)) & 0xf) + 1; + + return result; +} + diff --git a/kms.h b/kms.h new file mode 100644 index 0000000..c4542e9 --- /dev/null +++ b/kms.h @@ -0,0 +1,287 @@ +#ifndef __kms_h +#define __kms_h + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include +#include +#include "types.h" +// +// REQUEST... types are actually fixed size +// RESPONSE... size may vary, defined here is max possible size +// + +#define MAX_RESPONSE_SIZE 384 +#define PID_BUFFER_SIZE 64 +#define MAX_REQUEST_SIZE sizeof(REQUEST_V6) +#define WORKSTATION_NAME_BUFFER 64 + +// Constants for V6 time stamp interval +#define TIME_C1 0x00000022816889BDULL +#define TIME_C2 0x000000208CBAB5EDULL +#define TIME_C3 0x3156CD5AC628477AULL + +#define VERSION_INFO union \ +{ \ + DWORD Version;\ + struct { \ + WORD MinorVer; \ + WORD MajorVer; \ + } /*__packed*/; \ +} /*__packed*/ + +// Aliases for various KMS struct members +#define IsClientVM VMInfo +#define GraceTime BindingExpiration +#define MinutesRemaingInCurrentStatus BindingExpiration +#define ID ActID +#define ApplicationID AppID +#define SkuId ActID +#define KmsId KMSID +#define ClientMachineId CMID +#define MinimumClients N_Policy +#define TimeStamp ClientTime +#define PreviousCLientMachineId CMID_prev +#define Salt IV +#define XorSalt XoredIVs +#define ActivationInterval VLActivationInterval +#define RenewalInterval VLRenewalInterval + + +typedef struct { + VERSION_INFO; + DWORD VMInfo; // 0 = client is bare metal / 1 = client is VM + DWORD LicenseStatus; // 0 = Unlicensed, 1 = Licensed (Activated), 2 = OOB grace, 3 = OOT grace, 4 = NonGenuineGrace, 5 = Notification, 6 = extended grace + DWORD BindingExpiration; // Expiration of the current status in minutes (e.g. when KMS activation or OOB grace expires). + GUID AppID; // Can currently be Windows, Office2010 or Office2013 (see kms.c, table AppList). + GUID ActID; // Most detailed product list. One product key per ActID (see kms.c, table ExtendedProductList). Is ignored by KMS server. + GUID KMSID; // This is actually what the KMS server uses to grant or refuse activation (see kms.c, table BasicProductList). + GUID CMID; // Client machine id. Used by the KMS server for counting minimum clients. + DWORD N_Policy; // Minimum clients required for activation. + FILETIME ClientTime; // Current client time. + GUID CMID_prev; // previous client machine id. All zeros, if it never changed. + WCHAR WorkstationName[64]; // Workstation name. FQDN if available, NetBIOS otherwise. +} /*__packed*/ REQUEST; + +typedef struct { + VERSION_INFO; + DWORD PIDSize; // Size of PIDData in bytes. + WCHAR KmsPID[PID_BUFFER_SIZE]; // ePID (must include terminating zero) + GUID CMID; // Client machine id. Must be the same as in request. + FILETIME ClientTime; // Current client time. Must be the same as in request. + DWORD Count; // Current activated machines. KMS server counts up to N_Policy << 1 then stops + DWORD VLActivationInterval; // Time in minutes when clients should retry activation if it was unsuccessful (default 2 hours) + DWORD VLRenewalInterval; // Time in minutes when clients should renew KMS activation (default 7 days) +} /*__packed*/ RESPONSE; + +#ifdef _DEBUG +typedef struct { + VERSION_INFO; + DWORD PIDSize; + WCHAR KmsPID[49]; // Set this to the ePID length you want to debug + GUID CMID; + FILETIME ClientTime; + DWORD Count; + DWORD VLActivationInterval; + DWORD VLRenewalInterval; +} __packed RESPONSE_DEBUG; +#endif + + +typedef struct { + REQUEST RequestBase; // Base request + BYTE MAC[16]; // Aes 160 bit CMAC +} /*__packed*/ REQUEST_V4; + +typedef struct { + RESPONSE ResponseBase; // Base response + BYTE MAC[16]; // Aes 160 bit CMAC +} /*__packed*/ RESPONSE_V4; + + +typedef struct { + VERSION_INFO; // unencrypted version info + BYTE IV[16]; // IV + REQUEST RequestBase; // Base Request + BYTE Pad[4]; // since this struct is fixed, we use fixed PKCS pad bytes +} /*__packed*/ REQUEST_V5; + +typedef REQUEST_V5 REQUEST_V6; // v5 and v6 requests are identical + +typedef struct { + VERSION_INFO; + BYTE IV[16]; + RESPONSE ResponseBase; + BYTE RandomXoredIVs[16]; // If RequestIV was used for decryption: Random ^ decrypted Request IV ^ ResponseIV. If NULL IV was used for decryption: Random ^ decrypted Request IV + BYTE Hash[32]; // SHA256 of Random used in RandomXoredIVs + BYTE HwId[8]; // HwId from the KMS server + BYTE XoredIVs[16]; // If RequestIV was used for decryption: decrypted Request IV ^ ResponseIV. If NULL IV was used for decryption: decrypted Request IV. + BYTE HMAC[16]; // V6 Hmac (low 16 bytes only), see kms.c CreateV6Hmac + //BYTE Pad[10]; // Pad is variable sized. So do not include in struct +} /*__packed*/ RESPONSE_V6; + +typedef struct { // not used except for sizeof(). Fields are the same as RESPONSE_V6 + VERSION_INFO; + BYTE IV[16]; + RESPONSE ResponseBase; + BYTE RandomXoredIVs[16]; + BYTE Hash[32]; +} /*__packed*/ RESPONSE_V5; + +#ifdef _DEBUG +typedef struct { // Debug structure for direct casting of RPC data in debugger + VERSION_INFO; + BYTE IV[16]; + RESPONSE_DEBUG ResponseBase; + BYTE RandomXoredIVs[16]; + BYTE MAC[32]; + BYTE Unknown[8]; + BYTE XorSalts[16]; + BYTE HMAC[16]; + BYTE Pad[16]; +} __packed RESPONSE_V6_DEBUG; +#endif + +#define V4_PRE_EPID_SIZE ( \ + sizeof(((RESPONSE*)0)->Version) + \ + sizeof(((RESPONSE*)0)->PIDSize) \ + ) + +#define V4_POST_EPID_SIZE ( \ + sizeof(((RESPONSE*)0)->CMID) + \ + sizeof(((RESPONSE*)0)->ClientTime) + \ + sizeof(((RESPONSE*)0)->Count) + \ + sizeof(((RESPONSE*)0)->VLActivationInterval) + \ + sizeof(((RESPONSE*)0)->VLRenewalInterval) \ + ) + +#define V6_DECRYPT_SIZE ( \ + sizeof(((REQUEST_V6*)0)->IV) + \ + sizeof(((REQUEST_V6*)0)->RequestBase) + \ + sizeof(((REQUEST_V6*)0)->Pad) \ + ) + +#define V6_UNENCRYPTED_SIZE ( \ + sizeof(((RESPONSE_V6*)0)->Version) + \ + sizeof(((RESPONSE_V6*)0)->IV) \ + ) + +#define V6_PRE_EPID_SIZE ( \ + V6_UNENCRYPTED_SIZE + \ + sizeof(((RESPONSE*)0)->Version) + \ + sizeof(((RESPONSE*)0)->PIDSize) \ + ) + +#define V5_POST_EPID_SIZE ( \ + V4_POST_EPID_SIZE + \ + sizeof(((RESPONSE_V6*)0)->RandomXoredIVs) + \ + sizeof(((RESPONSE_V6*)0)->Hash) \ + ) + +#define V6_POST_EPID_SIZE ( \ + V5_POST_EPID_SIZE + \ + sizeof(((RESPONSE_V6*)0)->HwId) + \ + sizeof(((RESPONSE_V6*)0)->XoredIVs) + \ + sizeof(((RESPONSE_V6*)0)->HMAC) \ + ) + +#define RESPONSE_RESULT_OK ((1 << 10) - 1) //(9 bits) +typedef union +{ + DWORD mask; + struct + { + BOOL HashOK : 1; + BOOL TimeStampOK : 1; + BOOL ClientMachineIDOK : 1; + BOOL VersionOK : 1; + BOOL IVsOK : 1; + BOOL DecryptSuccess : 1; + BOOL HmacSha256OK : 1; + BOOL PidLengthOK : 1; + BOOL RpcOK : 1; + BOOL IVnotSuspicious : 1; + BOOL reserved3 : 1; + BOOL reserved4 : 1; + BOOL reserved5 : 1; + BOOL reserved6 : 1; + uint32_t effectiveResponseSize : 9; + uint32_t correctResponseSize : 9; + }; +} RESPONSE_RESULT; + +typedef BYTE hwid_t[8]; + +typedef struct +{ + GUID guid; + const char* name; + const char* pid; + uint8_t AppIndex; + uint8_t KmsIndex; +} KmsIdList; + +#define KMS_PARAM_MAJOR AppIndex +#define KMS_PARAM_REQUIREDCOUNT KmsIndex + +#define APP_ID_WINDOWS 0 +#define APP_ID_OFFICE2010 1 +#define APP_ID_OFFICE2013 2 + +#define KMS_ID_VISTA 0 +#define KMS_ID_WIN7 1 +#define KMS_ID_WIN8_VL 2 +#define KMS_ID_WIN_BETA 3 +#define KMS_ID_WIN8_RETAIL 4 +#define KMS_ID_WIN81_VL 5 +#define KMS_ID_WIN81_RETAIL 6 +#define KMS_ID_WIN2008A 7 +#define KMS_ID_WIN2008B 8 +#define KMS_ID_WIN2008C 9 +#define KMS_ID_WIN2008R2A 10 +#define KMS_ID_WIN2008R2B 11 +#define KMS_ID_WIN2008R2C 12 +#define KMS_ID_WIN2012 13 +#define KMS_ID_WIN2012R2 14 +#define KMS_ID_OFFICE2010 15 +#define KMS_ID_OFFICE2013 16 +#define KMS_ID_WIN_SRV_BETA 17 +#define KMS_ID_OFFICE2016 18 +#define KMS_ID_WIN10_VL 19 +#define KMS_ID_WIN10_RETAIL 20 + +#define PWINGUID &AppList[APP_ID_WINDOWS].guid +#define POFFICE2010GUID &AppList[APP_ID_OFFICE2010].guid +#define POFFICE2013GUID &AppList[APP_ID_OFFICE2013].guid + +typedef BOOL(__stdcall *RequestCallback_t)(const REQUEST *const baseRequest, RESPONSE *const baseResponse, BYTE *const hwId, const char* const ipstr); + +size_t CreateResponseV4(REQUEST_V4 *const Request, BYTE *const response_data, const char* const ipstr); +size_t CreateResponseV6(REQUEST_V6 *restrict Request, BYTE *const response_data, const char* const ipstr); +BYTE *CreateRequestV4(size_t *size, const REQUEST* requestBase); +BYTE *CreateRequestV6(size_t *size, const REQUEST* requestBase); +void randomPidInit(); +void get16RandomBytes(void* ptr); +RESPONSE_RESULT DecryptResponseV6(RESPONSE_V6* Response_v6, int responseSize, BYTE* const response, const BYTE* const request, BYTE* hwid); +RESPONSE_RESULT DecryptResponseV4(RESPONSE_V4* Response_v4, const int responseSize, BYTE* const response, const BYTE* const request); +void getUnixTimeAsFileTime(FILETIME *const ts); +__pure int64_t fileTimeToUnixTime(const FILETIME *const ts); +const char* getProductNameHE(const GUID *const guid, const KmsIdList *const List, ProdListIndex_t *const i); +const char* getProductNameLE(const GUID *const guid, const KmsIdList *const List, ProdListIndex_t *const i); +__pure ProdListIndex_t getExtendedProductListSize(); +__pure ProdListIndex_t getAppListSize(void); + +extern const KmsIdList ProductList[]; +extern const KmsIdList AppList[]; +extern const KmsIdList ExtendedProductList[]; + +extern RequestCallback_t CreateResponseBase; + +#ifdef _PEDANTIC +uint16_t IsValidLcid(const uint16_t Lcid); +#endif // _PEDANTIC + +#endif // __kms_h diff --git a/libkms-test.c b/libkms-test.c new file mode 100644 index 0000000..a808f03 --- /dev/null +++ b/libkms-test.c @@ -0,0 +1,35 @@ +#include +#include +#include + +#include "libkms.h" +#include "kms.h" +#include "endian.h" + +static const char ePID[] = { 'T', 0, 'E', 0, 'S', 0, 'T', 0, 0, 0 }; + +__stdcall BOOL KmsCallBack(const REQUEST *const baseRequest, RESPONSE *const baseResponse, BYTE *const hwId, const char* const ipstr) +{ + printf("libvlmcs-test.c: Entered KmsCallBack for client %s\n", ipstr); + + memcpy(&baseResponse->CMID, &baseRequest->CMID, sizeof(GUID)); + memcpy(&baseResponse->ClientTime, &baseRequest->ClientTime, sizeof(FILETIME)); + memcpy(&baseResponse->KmsPID, ePID, sizeof(ePID)); + + baseResponse->Version = baseRequest->Version; + baseResponse->Count = LE32(LE32(baseRequest->N_Policy) << 1); + baseResponse->PIDSize = sizeof(ePID); + baseResponse->VLActivationInterval = LE32(120); + baseResponse->VLRenewalInterval = LE32(10080); + + if (hwId && baseResponse->MajorVer > 5) memcpy(hwId, "\x01\x02\x03\x04\x05\x06\x07\x08", 8); + + return TRUE; +} + +int main(int argc, char** argv) +{ + printf("libvlmcs-test.c: Program start\n"); + StartKmsServer(1688, KmsCallBack); + return 0; +} diff --git a/libkms.c b/libkms.c new file mode 100644 index 0000000..5850131 --- /dev/null +++ b/libkms.c @@ -0,0 +1,117 @@ +/* + * libkms.c + */ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#define EXTERNAL dllexport + +#define DLLVERSION 0x30000 + +#include "libkms.h" +#include "shared_globals.h" +#include "network.h" +#include "helpers.h" + +#ifndef _WIN32 +#include +#include +#include +#include +#include +#endif // WIN32 + +static int_fast8_t IsServerStarted = FALSE; + + +EXTERNC __declspec(EXTERNAL) DWORD __cdecl SendActivationRequest +( + const char* const hostname, + const int port, + RESPONSE* baseResponse, + const REQUEST* const baseRequest, + RESPONSE_RESULT* result, BYTE *hwid +) +{ + return !0; // not yet implemented +} + + +EXTERNC __declspec(EXTERNAL) DWORD __cdecl StartKmsServer(const int port, RequestCallback_t requestCallback) +{ + char listenAddress[64]; + + if (IsServerStarted) return !0; + +# ifdef _WIN32 +# ifndef USE_MSRPC + // Windows Sockets must be initialized + WSADATA wsadata; + int error; + + if ((error = WSAStartup(0x0202, &wsadata))) + { + return error; + } +# endif // USE_MSRPC +# endif // _WIN32 + + CreateResponseBase = requestCallback; + + int maxsockets = 0; + int_fast8_t haveIPv4 = FALSE; + int_fast8_t haveIPv6 = FALSE; + + if (checkProtocolStack(AF_INET)) { haveIPv4 = TRUE; maxsockets++; } + if (checkProtocolStack(AF_INET6)) { haveIPv6 = TRUE; maxsockets++; } + + if(!maxsockets) return !0; + + SocketList = (SOCKET*)vlmcsd_malloc(sizeof(SOCKET) * (size_t)maxsockets); + numsockets = 0; + + if (haveIPv4) + { + snprintf(listenAddress, 64, "0.0.0.0:%u", (unsigned int)port); + addListeningSocket(listenAddress); + } + + if (haveIPv6) + { + snprintf(listenAddress, 64, "[::]:%u", (unsigned int)port); + addListeningSocket(listenAddress); + } + + if (!numsockets) + { + free(SocketList); + return !0; + } + + IsServerStarted = TRUE; + + runServer(); + + IsServerStarted = FALSE; + return 0; +} + + +EXTERNC __declspec(EXTERNAL) DWORD __cdecl StopKmsServer() +{ + if (!IsServerStarted) return !0; + + closeAllListeningSockets(); + if (SocketList) free(SocketList); + return 0; +} + + +EXTERNC __declspec(EXTERNAL) int __cdecl GetLibKmsVersion() +{ + return DLLVERSION; +} + diff --git a/libkms.h b/libkms.h new file mode 100644 index 0000000..2c23cab --- /dev/null +++ b/libkms.h @@ -0,0 +1,33 @@ +/* + * libkms.h + */ + +#ifndef LIBKMS_H_ +#define LIBKMS_H_ + +#include "types.h" +#include "kms.h" +#include "rpc.h" + +#ifdef __cplusplus +#define EXTERNC extern "C" +#else +#define EXTERNC +#endif + +#if !defined(_WIN32) && !__CYGWIN__ +#define __declspec(x) __attribute__((__visibility__("default"))) +#endif + +#if !defined(EXTERNAL) +#define EXTERNAL dllimport +#endif + +EXTERNC __declspec(EXTERNAL) DWORD __cdecl SendActivationRequest(const char* const hostname, const int port, RESPONSE* baseResponse, const REQUEST* const baseRequest, RESPONSE_RESULT* result, BYTE *hwid); +EXTERNC __declspec(EXTERNAL) DWORD __cdecl StartKmsServer(const int port, RequestCallback_t requestCallback); +EXTERNC __declspec(EXTERNAL) DWORD __cdecl StopKmsServer(); +EXTERNC __declspec(EXTERNAL) int __cdecl GetLibKmsVersion(); +//EXTERN_C __declspec(EXTERNAL) unsigned int __cdecl GetRandom32(); + + +#endif /* LIBKMS_H_ */ diff --git a/make_dragonfly b/make_dragonfly new file mode 100644 index 0000000..2af096d --- /dev/null +++ b/make_dragonfly @@ -0,0 +1,31 @@ +#!/usr/local/bin/bash + +export VERBOSE=3 +export DNS_PARSER=OS + +rm -f vlmcsd-* vlmcs-* vlmcsdmulti-* *_all.* 2>/dev/null +rm -f vlmcsdmulti vlmcsd vlmcs 2>/dev/null + +MAKEFLAGS="-B -j12" +REUSEOBJFLAGS="-j12" + +CF="-flto=12 -static-libgcc -pipe -fwhole-program -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +CF45="-static-libgcc -pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +CFCLANG="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +LF="-Wl,-z,norelro -Wl,--hash-style=sysv -Wl,--build-id=none" +LFCLANG="-Wl,-z,norelro -Wl,--hash-style=sysv" + +gmake $MAKEFLAGS PROGRAM_NAME=vlmcsd-DragonFly-x64 CLIENT_NAME=vlmcs-DragonFly-x64 CFLAGS="$CF" LDFLAGS="$LF" +rm vlmcsd.o vlmcs.o +gmake vlmcsdmulti-DragonFly-x64 $REUSEOBJFLAGS CFLAGS="$CF" LDFLAGS="$LF" MULTI_NAME=vlmcsdmulti-DragonFly-x64 + +rm *.o + +strip -s --strip-unneeded --remove-section=.eh_frame_hdr --remove-section=.eh_frame --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag vlmcs-* vlmcsd-* vlmcsdmulti-* +sstrip -z vlmcs-* vlmcsd-* vlmcsdmulti-* + +cp -af vlmcsd-DragonFly-x64 /usr/local/sbin/vlmcsd +cp -af vlmcs-DragonFly-x64 /usr/local/bin/vlmcs + +# Copy everything to distribution server +scp -p vlmcsdmulti-* vlmcsd-* vlmcs-* root@ubuntu64:x/binaries/DragonFly/intel/ diff --git a/make_freebsd b/make_freebsd new file mode 100644 index 0000000..bd4dada --- /dev/null +++ b/make_freebsd @@ -0,0 +1,46 @@ +#!/usr/local/bin/bash + +export VERBOSE=3 +export DNS_PARSER=OS + +rm -f vlmcsd-* vlmcs-* vlmcsdmulti-* *_all.* 2>/dev/null +rm -f vlmcsdmulti vlmcsd vlmcs 2>/dev/null + +MAKEFLAGS="-B -j12" +REUSEOBJFLAGS="-j12" + +CF="-flto=12 -static-libgcc -pipe -fwhole-program -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +CFCLANG="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +LF="-Wl,-z,norelro -Wl,--hash-style=gnu -Wl,--build-id=none" +LFCLANG="-Wl,-z,norelro -Wl,--hash-style=gnu" + +gmake $MAKEFLAGS allmulti CAT=2 MULTI_NAME=vlmcsdmulti-FreeBSD-10.2-x64-gcc CLIENT_NAME=vlmcs-FreeBSD-10.2-x64-gcc PROGRAM_NAME=vlmcsd-FreeBSD-10.2-x64-gcc CC=gcc5 CFLAGS="$CF" LDFLAGS="$LF" + +gmake $MAKEFLAGS CLIENT_NAME=vlmcs-FreeBSD-10.2-x64 PROGRAM_NAME=vlmcsd-FreeBSD-10.2-x64 CC=clang36 CFLAGS="$CFCLANG" LDFLAGS="$LF" +rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* +gmake $REUSEOBJFLAGS vlmcsdmulti-FreeBSD-10.2-x64 MULTI_NAME=vlmcsdmulti-FreeBSD-10.2-x64 CC=clang36 CFLAGS="$CFCLANG" LDFLAGS="$LF" + +gmake $MAKEFLAGS CLIENT_NAME=vlmcs-FreeBSD-10.2-x86 PROGRAM_NAME=vlmcsd-FreeBSD-10.2-x86 CC=clang36 CFLAGS="$CFCLANG -m32" LDFLAGS="$LF" +rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* +gmake $REUSEOBJFLAGS vlmcsdmulti-FreeBSD-10.2-x86 MULTI_NAME=vlmcsdmulti-FreeBSD-10.2-x86 CC=clang36 CFLAGS="$CFCLANG -m32" LDFLAGS="$LF" + +gmake $MAKEFLAGS allmulti CAT=2 MULTI_NAME=vlmcsdmulti-FreeBSD-10.2-x86-gcc CLIENT_NAME=vlmcs-FreeBSD-10.2-x86-gcc PROGRAM_NAME=vlmcsd-FreeBSD-10.2-x86-gcc CC=gcc5 CFLAGS="$CF -m32 -DCOMPAT_32BIT" LDFLAGS="-L/usr/lib32 -B/usr/lib32 $LF" + +gmake $MAKEFLAGS CAT=2 vlmcsd-FreeBSD-10.2-x64-threads-gcc PROGRAM_NAME=vlmcsd-FreeBSD-10.2-x64-threads-gcc THREADS=1 CC=gcc5 CFLAGS="$CF" LDFLAGS="-lpthread $LF" +gmake $MAKEFLAGS vlmcsd-FreeBSD-10.2-x64-threads PROGRAM_NAME=vlmcsd-FreeBSD-10.2-x64-threads THREADS=1 CC=clang36 CFLAGS="$CFCLANG" LDFLAGS="-lpthread $LF" +gmake $MAKEFLAGS vlmcsd-FreeBSD-10.2-x86-threads PROGRAM_NAME=vlmcsd-FreeBSD-10.2-x86-threads THREADS=1 CC=clang36 CFLAGS="$CFCLANG -m32" LDFLAGS="-lpthread $LF" +gmake $MAKEFLAGS CAT=2 vlmcsd-FreeBSD-10.2-x86-threads-gcc PROGRAM_NAME=vlmcsd-FreeBSD-10.2-x86-threads-gcc THREADS=1 CC=gcc5 CFLAGS="$CF -m32 -DCOMPAT_32BIT" LDFLAGS="-lpthread -L/usr/lib32 -B/usr/lib32 $LF" + +gmake $MAKEFLAGS CRYPTO=openssl_with_aes CLIENT_NAME=vlmcs-FreeBSD-10.2-x64-openssl1.0.1-EXPERIMENTAL PROGRAM_NAME=vlmcsd-FreeBSD-10.2-x64-openssl1.0.1-EXPERIMENTAL CC=clang36 CFLAGS="$CFCLANG" LDFLAGS="$LF" +gmake $MAKEFLAGS CRYPTO=openssl_with_aes CLIENT_NAME=vlmcs-FreeBSD-10.2-x86-openssl1.0.1-EXPERIMENTAL PROGRAM_NAME=vlmcsd-FreeBSD-10.2-x86-openssl1.0.1-EXPERIMENTAL CC=clang36 CFLAGS="$CFCLANG -m32" LDFLAGS="$LF" + +rm *.o + +strip -s --strip-unneeded --remove-section=.eh_frame_hdr --remove-section=.eh_frame --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag vlmcs-* vlmcsd-* vlmcsdmulti-* +sstrip -z vlmcs-* vlmcsd-* vlmcsdmulti-* + +sudo cp -af vlmcsd-FreeBSD-10.2-x86-gcc /usr/local/sbin/vlmcsd +sudo cp -af vlmcs-FreeBSD-10.2-x86-gcc /usr/local/bin/vlmcs + +# Copy everything to distribution server +scp -p vlmcsdmulti-* vlmcsd-* vlmcs-* root@ubuntu64:x/binaries/FreeBSD/intel/ diff --git a/make_linux b/make_linux new file mode 100644 index 0000000..6fa2fa4 --- /dev/null +++ b/make_linux @@ -0,0 +1,3511 @@ +#!/bin/bash + +#export VLMCSD_VERSION="svn`svnversion | sed -e 's/:.*//; s/[^0-9]*$//; s/^$/0/'`" + +export VERBOSE=3 +export DNS_PARSER=internal + +MAKEFLAGS="-j`nproc` -B" +REUSEOBJFLAGS="-j" +SMALLCC="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +SMALLLD="-pipe -Wl,--hash-style=sysv -Wl,-z,norelro -Wl,--build-id=none" +SMALL="$SMALLCC $SMALLLD" + + +rm -f vlmcs vlmcsdmulti vlmcsd 2>/dev/null +rm -fr binaries + +mkdir -p binaries/Linux/intel/glibc +mkdir -p binaries/Linux/intel/uclibc +mkdir -p binaries/Linux/intel/static +mkdir -p binaries/Linux/intel/musl + +mkdir -p binaries/Linux/sparc32/glibc + +mkdir -p binaries/Android/arm/bionic +mkdir -p binaries/Android/arm/static +mkdir -p binaries/Android/intel/bionic +mkdir -p binaries/Android/intel/static +mkdir -p binaries/Android/mips/bionic +mkdir -p binaries/Android/mips/static + +mkdir -p binaries/Linux/arm/little-endian/glibc +mkdir -p binaries/Linux/arm/little-endian/musl +mkdir -p binaries/Linux/arm/little-endian/uclibc +mkdir -p binaries/Linux/arm/little-endian/static +mkdir -p binaries/Linux/arm/big-endian/uclibc +mkdir -p binaries/Linux/arm/big-endian/static + +mkdir -p binaries/Linux/mips/little-endian/glibc +mkdir -p binaries/Linux/mips/little-endian/uclibc +mkdir -p binaries/Linux/mips/little-endian/static +mkdir -p binaries/Linux/mips/little-endian/musl +mkdir -p binaries/Linux/mips/big-endian/uclibc +mkdir -p binaries/Linux/mips/big-endian/static +mkdir -p binaries/Linux/mips/big-endian/glibc +mkdir -p binaries/Linux/mips/big-endian/musl + +mkdir -p binaries/Linux/ppc/little-endian/glibc +mkdir -p binaries/Linux/ppc/big-endian/glibc +mkdir -p binaries/Linux/ppc/big-endian/uclibc +mkdir -p binaries/Linux/ppc/big-endian/static + +mkdir -p binaries/MacOSX/intel +mkdir -p binaries/MacOSX/ppc +mkdir -p binaries/iOS/arm + +mkdir -p binaries/FreeBSD/intel +mkdir -p binaries/NetBSD/intel +mkdir -p binaries/OpenBSD/intel +mkdir -p binaries/DragonFly/intel +mkdir -p binaries/Solaris/intel +mkdir -p binaries/Windows/intel +mkdir -p binaries/Minix/intel + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null +export STAGING_DIR=. + +# Windows 32-bit using MingW32-w64 toolchain on Ubuntu Linux +export CLIENT_NAME=binaries/Windows/intel/vlmcs-Windows-x86.exe +export PROGRAM_NAME=binaries/Windows/intel/vlmcsd-Windows-x86.exe +export MULTI_NAME=binaries/Windows/intel/vlmcsdmulti-Windows-x86.exe +export DLL_NAME=binaries/Windows/intel/libkms32.dll +export THREADS=1 +export CFLAGS="$SMALLCC" +export CC=i686-w64-mingw32-gcc +export PLATFORMFLAGS="-march=i686 -mtune=generic -fwhole-program -pipe" +export LDFLAGS="-lws2_32 -Wl,--gc-sections,--force-exe-suffix,--large-address-aware,--nxcompat,--dynamicbase,--tsaware" +export FEATURES=full + +make $MAKEFLAGS CAT=2 all $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME + exit $? +fi + +export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden" +export LDFLAGS="$LDFLAGS -static-libgcc" + +make $MAKEFLAGS FEATURES=minimum $DLL_NAME + +if [ $? != 0 ]; then + echo Error creating $DLL_NAME + exit $? +fi + + + +# Windows 32-bit using MingW32-w64 toolchain on Ubuntu Linux using MS RPC +export CLIENT_NAME=binaries/Windows/intel/vlmcs-Windows-msrpc-x86.exe +export PROGRAM_NAME=binaries/Windows/intel/vlmcsd-Windows-msrpc-x86.exe +export MULTI_NAME=binaries/Windows/intel/vlmcsdmulti-Windows-msrpc-x86.exe +export THREADS=1 +export CFLAGS="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fmerge-all-constants -Wno-unused-variable -Wno-missing-braces" +export CC=i686-w64-mingw32-gcc +export PLATFORMFLAGS="-march=i686 -mtune=generic -pipe" +export LDFLAGS="-Wl,--gc-sections,--force-exe-suffix,--large-address-aware,--nxcompat,--dynamicbase,--tsaware -fwhole-program" +export FEATURES=full + +make $MAKEFLAGS CAT=2 MSRPC=1 all + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +make $MAKEFLAGS MSRPC=1 $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + +# Windows 64-bit using MingW32-w64 toolchain on Ubuntu Linux +export CLIENT_NAME=binaries/Windows/intel/vlmcs-Windows-x64.exe +export PROGRAM_NAME=binaries/Windows/intel/vlmcsd-Windows-x64.exe +export MULTI_NAME=binaries/Windows/intel/vlmcsdmulti-Windows-x64.exe +export DLL_NAME=binaries/Windows/intel/libkms64.dll +export THREADS=1 +export CFLAGS="$SMALLCC" +export CC=x86_64-w64-mingw32-gcc +export PLATFORMFLAGS="-march=nocona -mtune=generic -fwhole-program -pipe" +export LDFLAGS="-lws2_32 -Wl,--gc-sections,--force-exe-suffix,--nxcompat,--dynamicbase,--tsaware" + +make $MAKEFLAGS CAT=2 all $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME + exit $? +fi + +export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden" +export LDFLAGS="$LDFLAGS -static-libgcc" + +make $MAKEFLAGS FEATURES=minimum $DLL_NAME + +if [ $? != 0 ]; then + echo Error creating $DLL_NAME + exit $? +fi + + + + +# Windows 64-bit using MingW32-w64 toolchain on Ubuntu Linux using MS RPC +export CLIENT_NAME=binaries/Windows/intel/vlmcs-Windows-msrpc-x64.exe +export PROGRAM_NAME=binaries/Windows/intel/vlmcsd-Windows-msrpc-x64.exe +export MULTI_NAME=binaries/Windows/intel/vlmcsdmulti-Windows-msrpc-x64.exe +export THREADS=1 +export CFLAGS="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fmerge-all-constants -Wno-unused-variable -Wno-missing-braces" +export CC=x86_64-w64-mingw32-gcc +export PLATFORMFLAGS="-march=nocona -mtune=generic -pipe" +export LDFLAGS="-Wl,--gc-sections,--force-exe-suffix,--nxcompat,--dynamicbase,--tsaware -fwhole-program" + +make $MAKEFLAGS CAT=2 MSRPC=1 all + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +make $MAKEFLAGS MSRPC=1 $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux mips32el with uClibc 0.9.33.2 using gcc 4.9 from OpenWRT toolchain +export CLIENT_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcs-mips32el-openwrt-uclib +export PROGRAM_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsd-mips32el-openwrt-uclibc +export CC=/opt/toolchains/mipsel-openwrt-linux-uclibc/toolchain-mipsel_mips32_gcc-4.9-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc +export CFLAGS="$SMALLCC -DNO_LIMIT" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program" +export LDFLAGS="$SMALLLD" +export THREADS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export CLIENT_NAME=binaries/Linux/mips/little-endian/static/vlmcs-mips32el-openwrt-uclib-static +export PROGRAM_NAME=binaries/Linux/mips/little-endian/static/vlmcsd-mips32el-openwrt-uclibc-static +export MULTI_NAME=binaries/Linux/mips/little-endian/static/vlmcsdmulti-mips32el-openwrt-uclibc-static +export LDFLAGS="$LDFLAGS -static" + +make $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export MULTI_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsdmulti-mips32el-openwrt-uclibc +export LDFLAGS="$SMALLLD" + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux mips16el with uClibc 0.9.33.2 using gcc 4.9 from OpenWRT toolchain with statically linked libgcc for Asus routers, e.g. Asus RT-N66U +export CLIENT_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcs-mips16el-asus-rt-n66u-uclibc +export PROGRAM_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsd-mips16el-asus-rt-n66u-uclibc +export CC=/opt/toolchains/mipsel-openwrt-linux-uclibc/toolchain-mipsel_mips32_gcc-4.9-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc +export CFLAGS="$SMALLCC -static-libgcc -DNO_LIMIT" +export PLATFORMFLAGS="-mips32 -mips16 -flto=jobserver -fwhole-program" +export LDFLAGS="$SMALLLD" +export THREADS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export CLIENT_NAME=binaries/Linux/mips/little-endian/static/vlmcs-mips16el-asus-rt-n66u-uclibc-static +export PROGRAM_NAME=binaries/Linux/mips/little-endian/static/vlmcsd-mips16el-asus-rt-n66u-uclibc-static +export MULTI_NAME=binaries/Linux/mips/little-endian/static/vlmcsdmulti-mips16el-asus-rt-n66u-uclibc-static +export LDFLAGS="$LDFLAGS -static" + +make $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export MULTI_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsdmulti-mips16el-asus-rt-n66u-uclibc +export LDFLAGS="$SMALLLD" + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + + + +# Linux mips16el with uClibc 0.9.33.2 using gcc 4.8 from OpenWRT toolchain +export CLIENT_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcs-mips16el-openwrt-uclibc +export PROGRAM_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsd-mips16el-openwrt-uclibc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16" +export LDFLAGS="$SMALLLD" + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export CLIENT_NAME=binaries/Linux/mips/little-endian/static/vlmcs-mips16el-openwrt-uclib-static +export PROGRAM_NAME=binaries/Linux/mips/little-endian/static/vlmcsd-mips16el-openwrt-uclibc-static +export MULTI_NAME=binaries/Linux/mips/little-endian/static/vlmcsdmulti-mips16el-openwrt-uclibc-static +export LDFLAGS="$LDFLAGS -static" + +make $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export MULTI_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsdmulti-mips16el-openwrt-uclibc +export LDFLAGS="$SMALLLD" + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux mips16el eglibc 2.19 using gcc 4.8 from OpenWRT toolchain +export CLIENT_NAME=binaries/Linux/mips/little-endian/glibc/vlmcs-mips16el-openwrt-glibc +export PROGRAM_NAME=binaries/Linux/mips/little-endian/glibc/vlmcsd-mips16el-openwrt-glibc +export MULTI_NAME=binaries/Linux/mips/little-endian/glibc/vlmcsdmulti-mips16el-openwrt-glibc +export CC=/opt/toolchains/mipsel_74kc+dsp2_gcc-4.9-linaro_eglibc-2.19-mips16/bin/mipsel-openwrt-linux-gnu-gcc-4.9.2 +#export CC=~/openwrt/staging_dir/toolchain-mipsel_mips32_gcc-4.8-linaro_eglibc-2.19/bin/mipsel-openwrt-linux-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=mips32 -mips16" +export LDFLAGS="$SMALLLD" +export THREADS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# PowerPC 64-bit big-endian glibc. +export CLIENT_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcs-ppc64-glibc +export PROGRAM_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcsd-ppc64-glibc +export MULTI_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcsdmulti-ppc64-glibc +export CC=/opt/toolchains/ppc64-glibc2.19-gcc-4.9.1/bin/powerpc64-linux-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program" +export LDFLAGS="$SMALLLD" +export THREADS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# PowerPC 64-bit little-endian glibc. +export CLIENT_NAME=binaries/Linux/ppc/little-endian/glibc/vlmcs-ppc64el-glibc +export PROGRAM_NAME=binaries/Linux/ppc/little-endian/glibc/vlmcsd-ppc64el-glibc +export MULTI_NAME=binaries/Linux/ppc/little-endian/glibc/vlmcsdmulti-ppc64el-glibc +export CC=/opt/toolchains/ppc64el-glibc2.20-gcc-4.9.1/bin/powerpc64le-linux-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program" +export LDFLAGS="$SMALLLD" +export THREADS=0 + +make DNS_PARSER=OS $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# PowerPC glibc. Compiles with gcc 4.8 from OpenWRT toolchain but uses libs from an old DM500 toolchain to be compatible with glibc 2.3 +export CLIENT_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcs-ppc-glibc +export PROGRAM_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcsd-ppc-glibc +export MULTI_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcsdmulti-ppc-glibc +export CC=~/openwrt/staging_dir/toolchain-powerpc_405_gcc-4.8-linaro_eglibc-2.19/bin/powerpc-openwrt-linux-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program --sysroot=/opt/simplebuild/toolchains/powerpc -L/opt/simplebuild/toolchains/powerpc/lib -L/opt/simplebuild/toolchains/powerpc/usr/lib" +export LDFLAGS="$SMALLLD" +export THREADS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Mips 32 glibc compiled with gcc 4.9.2 from OpenWRT toolchain +export CLIENT_NAME=binaries/Linux/mips/big-endian/glibc/vlmcs-mips32-openwrt-glibc +export PROGRAM_NAME=binaries/Linux/mips/big-endian/glibc/vlmcsd-mips32-openwrt-glibc +export MULTI_NAME=binaries/Linux/mips/big-endian/glibc/vlmcsdmulti-mips32-openwrt-glibc +export CC=/opt/toolchains/mips_34kc_gcc-4.9-linaro_eglibc-2.19-mips16/bin/mips-openwrt-linux-gcc +#export CC=~/openwrt/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_eglibc-2.19/bin/mips-openwrt-linux-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32" +export LDFLAGS="$SMALLLD" +export THREADS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + + +# Mips 32 glibc compiled with gcc 4.9.2 from OpenWRT toolchain +export CLIENT_NAME=binaries/Linux/mips/big-endian/glibc/vlmcs-mips16-openwrt-glibc +export PROGRAM_NAME=binaries/Linux/mips/big-endian/glibc/vlmcsd-mips16-openwrt-glibc +export MULTI_NAME=binaries/Linux/mips/big-endian/glibc/vlmcsdmulti-mips16-openwrt-glibc +export CC=/opt/toolchains/mips_34kc_gcc-4.9-linaro_eglibc-2.19-mips16/bin/mips-openwrt-linux-gcc +#export CC=~/openwrt/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_eglibc-2.19/bin/mips-openwrt-linux-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32 -mips16" +export LDFLAGS="$SMALLLD" +export THREADS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + + +# mips32el glibc 2.19 compiled with gcc 4.8 from OpenWRT toolchain +export CLIENT_NAME=binaries/Linux/mips/little-endian/glibc/vlmcs-mips32el-openwrt-glibc +export PROGRAM_NAME=binaries/Linux/mips/little-endian/glibc/vlmcsd-mips32el-openwrt-glibc +export MULTI_NAME=binaries/Linux/mips/little-endian/glibc/vlmcsdmulti-mips32el-openwrt-glibc +export CC=/opt/toolchains/mipsel_74kc+dsp2_gcc-4.9-linaro_eglibc-2.19-mips16/bin/mipsel-openwrt-linux-gnu-gcc-4.9.2 +#export CC=~/openwrt/staging_dir/toolchain-mipsel_mips32_gcc-4.8-linaro_eglibc-2.19/bin/mipsel-openwrt-linux-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32" +export LDFLAGS="$SMALLLD" +export THREADS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# mips1el uclibc with old tomato toolchain gcc 3.2.3 with Broadcom extensions uClibc 0.9.19 +export CLIENT_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcs-mips1el-tomato-uclibc +export PROGRAM_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsd-mips1el-tomato-uclibc +export MULTI_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsdmulti-mips1el-tomato-uclibc +export CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc +export CFLAGS="-DNO_BUILTIN -pipe -fno-common -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +export PLATFORMFLAGS="" +export LDFLAGS="-pipe -Wl,-z,norelro" +export THREADS=0 +#export TERMINAL_WIDTH=80 + +make NO_DNS=1 CAT=2 $MAKEFLAGS $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME + exit $? +fi + +export CLIENT_NAME=binaries/Linux/mips/little-endian/static/vlmcs-mips1el-tomato-uclibc-static +export PROGRAM_NAME=binaries/Linux/mips/little-endian/static/vlmcsd-mips1el-tomato-uclibc-static +export MULTI_NAME=binaries/Linux/mips/little-endian/static/vlmcsdmulti-mips1el-tomato-uclibc-static +export LDFLAGS="$LDFLAGS -static" + +make NO_DNS=1 $REUSEOBJFLAGS $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME CAT=2 + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME + exit $? +fi + + + + +#Android gcc 4.8 with API Level 3 (Android 1.5 cupcake) armv7 + +export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android15-armv7 +export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android15-armv7 +export CC=/opt/toolchains/armelv7-android-3/bin/arm-linux-androideabi-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb" +export THREADS=0 +export LDFLAGS="$SMALLLD" + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android15-armv7-static +export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android15-armv7-static +export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android15-armv7-static +export LDFLAGS="$LDFLAGS -static" + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export LDFLAGS="$SMALLLD" +export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android15-armv7 + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Android gcc 4.8 with API Level 3 (Android 1.5 cupcake) armv5 + +export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android15-armv5 +export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android15-armv5 +export CC=/opt/toolchains/armelv7-android-3/bin/arm-linux-androideabi-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv5te -mthumb" +export THREADS=0 +export LDFLAGS="$SMALLLD" + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android15-armv5-static +export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android15-armv5-static +export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android15-armv5-static +export LDFLAGS="$LDFLAGS -static" + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export LDFLAGS="$SMALLLD" +export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android15-armv5 + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Android gcc 4.8 with API Level 16 (Android 4.1 Jelly Bean) armv7 + +export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android41-armv7 +export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android41-armv7 +export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android41-armv7 +export CC=/opt/toolchains/armelv7-android-16/bin/arm-linux-androideabi-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb -fPIE -pie" +export THREADS=0 +export LDFLAGS="$SMALLLD" + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +##Android gcc 4.8 with API Level 21 (Android 5.0 Lollipop) armv7 +# +#export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android50-armv7 +#export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android50-armv7 +#export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android50-armv7 +#export CC=/opt/toolchains/armelv7-android-21/bin/arm-linux-androideabi-gcc +#export CFLAGS="$SMALLCC" +#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb -fPIE -pie" +#export THREADS=0 +#export LDFLAGS="$SMALLLD" +# +#make NOLPTHREAD=1 $MAKEFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null +# +#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi +# +# +# +# +# +#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) arm64el + +export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android50-arm64v8 +export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android50-arm64v8 +export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android50-arm64v8 +export CC=/opt/toolchains/arm64el-android-21/bin/aarch64-linux-android-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mtune=generic -mfix-cortex-a53-835769 -march=armv8-a -fPIE -pie" +export THREADS=0 +export LDFLAGS="$SMALLLD" + +make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) arm64el STATIC + +export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android50-arm64v8-static +export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android50-arm64v8-static +export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android50-arm64v8-static +export CC=/opt/toolchains/arm64el-android-21/bin/aarch64-linux-android-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mtune=generic -mfix-cortex-a53-835769 -march=armv8-a" +export THREADS=0 +export LDFLAGS="$SMALLLD -static" + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Android gcc 4.8 with API Level 9 (Android 2.3 Gingerbread) x86 + +export CLIENT_NAME=binaries/Android/intel/bionic/vlmcs-android23-x86 +export PROGRAM_NAME=binaries/Android/intel/bionic/vlmcsd-android23-x86 +export CC=/opt/toolchains/x86-android-9/bin/i686-linux-android-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=atom -m32" +export THREADS=1 +export LDFLAGS="$SMALLLD" + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export CLIENT_NAME=binaries/Android/intel/static/vlmcs-android23-x86-static +export PROGRAM_NAME=binaries/Android/intel/static/vlmcsd-android23-x86-static +export MULTI_NAME=binaries/Android/intel/static/vlmcsdmulti-android23-x86-static +export LDFLAGS="$LDFLAGS -static" + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export LDFLAGS="$SMALLLD" +export MULTI_NAME=binaries/Android/intel/bionic/vlmcsdmulti-android23-x86 + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Android gcc 4.8 with API Level 16 (Android 4.1 Jelly Bean) x86 + +export CLIENT_NAME=binaries/Android/intel/bionic/vlmcs-android41-x86 +export PROGRAM_NAME=binaries/Android/intel/bionic/vlmcsd-android41-x86 +export MULTI_NAME=binaries/Android/intel/bionic/vlmcsdmulti-android41-x86 +export CC=/opt/toolchains/x86-android-16/bin/i686-linux-android-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=atom -m32 -fPIE -pie" +export THREADS=1 +export LDFLAGS="$SMALLLD" + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +##Android gcc 4.8 with API Level 21 (Android 5.0 Lollipop) x86 +# +#export CLIENT_NAME=binaries/Android/intel/bionic/vlmcs-android50-x86 +#export PROGRAM_NAME=binaries/Android/intel/bionic/vlmcsd-android50-x86 +#export MULTI_NAME=binaries/Android/intel/bionic/vlmcsdmulti-android50-x86 +#export CC=/opt/toolchains/x86-android-21/bin/i686-linux-android-gcc +#export CFLAGS="$SMALLCC" +#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=atom -m32 -fPIE -pie" +#export THREADS=1 +#export LDFLAGS="$SMALLLD" +# +#make NOLPTHREAD=1 $MAKEFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null +# +#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi + + + + +#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) x64 + +export CLIENT_NAME=binaries/Android/intel/bionic/vlmcs-android50-x64 +export PROGRAM_NAME=binaries/Android/intel/bionic/vlmcsd-android50-x64 +export MULTI_NAME=binaries/Android/intel/bionic/vlmcsdmulti-android50-x64 +export CC=/opt/toolchains/x86_64-android-21/bin/x86_64-linux-android-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=atom -m64 -fPIE -pie" +export THREADS=0 +export LDFLAGS="$SMALLLD" + +make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) x64 STATIC + +export CLIENT_NAME=binaries/Android/intel/static/vlmcs-android50-x64-static +export PROGRAM_NAME=binaries/Android/intel/static/vlmcsd-android50-x64-static +export MULTI_NAME=binaries/Android/intel/static/vlmcsdmulti-android50-x64-static +export CC=/opt/toolchains/x86_64-android-21/bin/x86_64-linux-android-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=nocona -m64" +export THREADS=0 +export LDFLAGS="$SMALLLD -static" + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + + +#Android gcc 4.8 with API Level 9 (Android 2.3 Gingerbread) mips32el + +export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android23-mips32el +export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android23-mips32el +export CC=/opt/toolchains/mipsel-android-9/bin/mipsel-linux-android-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program" +export THREADS=1 +export LDFLAGS="$SMALLLD" + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export CLIENT_NAME=binaries/Android/mips/static/vlmcs-android23-mips32el-static +export PROGRAM_NAME=binaries/Android/mips/static/vlmcsd-android23-mips32el-static +export MULTI_NAME=binaries/Android/mips/static/vlmcsdmulti-android23-mips32el-static +export LDFLAGS="$LDFLAGS -static" + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export LDFLAGS="$SMALLLD" +export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android23-mips32el + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + + +#Android gcc 4.8 with API Level 16 (Android 4.1 Jelly Bean) mips32el + +export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android41-mips32el +export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android41-mips32el +export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android41-mips32el +export CC=/opt/toolchains/mipsel-android-16/bin/mipsel-linux-android-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -fPIE -pie" +export THREADS=1 +export LDFLAGS="$SMALLLD" + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + + +##Android gcc 4.8 with API Level 21 (Android 5.0 Lollipop) mips32el +# +#export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android50-mips32el +#export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android50-mips32el +#export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android50-mips32el +#export CC=/opt/toolchains/mipsel-android-21/bin/mipsel-linux-android-gcc +#export CFLAGS="$SMALLCC" +#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -fPIE -pie" +#export THREADS=1 +#export LDFLAGS="$SMALLLD" +# +#make NOLPTHREAD=1 $MAKEFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null +# +#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi + + + + +##Android gcc 4.8 with API Level 9 (Android 2.3 Gingerbread) mips16el +# +#export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android23-mips16el +#export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android23-mips16el +#export CC=/opt/toolchains/mipsel-android-9/bin/mipsel-linux-android-gcc +#export CFLAGS="$SMALLCC" +#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16" +#export THREADS=1 +#export LDFLAGS="$SMALLLD" +# +#make NOLPTHREAD=1 $MAKEFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +#export CLIENT_NAME=binaries/Android/mips/static/vlmcs-android23-mips16el-static +#export PROGRAM_NAME=binaries/Android/mips/static/vlmcsd-android23-mips16el-static +#export MULTI_NAME=binaries/Android/mips/static/vlmcsdmulti-android23-mips16el-static +#export LDFLAGS="$LDFLAGS -static" +# +#make NOLPTHREAD=1 $REUSEOBJFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null +# +#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi +# +#export LDFLAGS="$SMALLLD" +#export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android23-mips16el +# +#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi +# +# +# +# +# +##Android gcc 4.8 with API Level 16 (Android 4.1 Jelly Bean) mips16el +# +#export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android41-mips16el +#export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android41-mips16el +#export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android41-mips16el +#export CC=/opt/toolchains/mipsel-android-16/bin/mipsel-linux-android-gcc +#export CFLAGS="$SMALLCC" +#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -fPIE -pie -mips16" +#export THREADS=1 +#export LDFLAGS="$SMALLLD" +# +#make NOLPTHREAD=1 $MAKEFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null +# +#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi +# +# +# +# +# +#Android gcc 4.8 with API Level 21 (Android 5.0 Lollipop) mips16el +# +#export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android50-mips16el +#export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android50-mips16el +#export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android50-mips16el +#export CC=/opt/toolchains/mipsel-android-21/bin/mipsel-linux-android-gcc +#export CFLAGS="$SMALLCC" +#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -fPIE -pie -mips16" +#export THREADS=1 +#export LDFLAGS="$SMALLLD" +# +#make NOLPTHREAD=1 $MAKEFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null +# +#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi + + +#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) mips64el + +export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android50-mips64el +export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android50-mips64el +export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android50-mips64el +export CC=/opt/toolchains/mips64el-android-21/bin/mips64el-linux-android-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -fPIE -pie" +export THREADS=0 +export LDFLAGS="$SMALLLD" + +make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) mips64el STATIC + +export CLIENT_NAME=binaries/Android/mips/static/vlmcs-android50-mips64el-static +export PROGRAM_NAME=binaries/Android/mips/static/vlmcsd-android50-mips64el-static +export MULTI_NAME=binaries/Android/mips/static/vlmcsdmulti-android50-mips64el-static +export CC=/opt/toolchains/mips64el-android-21/bin/mips64el-linux-android-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program" +export THREADS=0 +export LDFLAGS="$SMALLLD -static" + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +## Android 5.0+ with Ubuntu toolchain +#export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android5 +#export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android5 +#export CC=arm-linux-androideabi-gcc +#export CFLAGS="$SMALLCC" +#export PLATFORMFLAGS="-flto=jobserver -fwhole-program" +#export LDFLAGS="$SMALLLD -pie -fpie" +#export THREADS=0 +# +#make $MAKEFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +# +# Android 5.0+ with Ubuntu toolchain STATIC +#export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android5-static +#export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android5-static +#export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android5-static +#export LDFLAGS="$LDFLAGS -static" +# +#make $REUSEOBJFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null +# +#make $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi +# +#export LDFLAGS="$SMALLLD -pie -fpie" +#export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android5 +# +#make $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi +# +# +# +# +## Android 5.0+ with Ubuntu toolchain for ARMv7 CPU with thumb2 instruction set +#export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android5-armv7 +#export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android5-armv7 +#export CC=arm-linux-androideabi-gcc +#export CFLAGS="$SMALLCC" +#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mthumb -march=armv7 -mtune=cortex-a9" +#export LDFLAGS="$SMALLLD -pie -fpie" +#export THREADS=0 +# +#make $MAKEFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +#export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android5-armv7-static +#export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android5-armv7-static +#export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android5-armv7-static +#export LDFLAGS="$LDFLAGS -static" +# +#make $REUSEOBJFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null +# +#make $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi +# +#export LDFLAGS="$SMALLLD -pie -fpie" +#export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android5-armv7 +# +#make $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi +# +##unset TERMINAL_WIDTH +# +# +# +# +# +## Android with Ubuntu toolchain +#export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android +#export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android +#export CC=arm-linux-androideabi-gcc +#export CFLAGS="$SMALLCC" +#export PLATFORMFLAGS="-flto=jobserver -fwhole-program" +#export LDFLAGS="$SMALLLD" +#export THREADS=0 +# +#make $MAKEFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +# +## Android with Ubuntu toolchain STATIC +#export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android-static +#export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android-static +#export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android-static +#export LDFLAGS="$LDFLAGS -static" +# +#make $REUSEOBJFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null +# +#make $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi +# +#export LDFLAGS="$SMALLLD" +#export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android +# +#make $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi + + + + +# Android with Ubuntu toolchain for ARMv7 CPU with thumb2 instruction set +#export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android-armv7 +#export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android-armv7 +#export CC=arm-linux-androideabi-gcc +#export CFLAGS="$SMALLCC" +#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mthumb -march=armv7 -mtune=cortex-a9" +#export LDFLAGS="$SMALLLD" +#export THREADS=0 +# +#make $MAKEFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +#export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android-armv7-static +#export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android-armv7-static +#export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android-armv7-static +#export LDFLAGS="$LDFLAGS -static" +# +#make $REUSEOBJFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null +# +#make $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi +# +#export LDFLAGS="$SMALLLD" +#export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android-armv7 +# +#make $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi + + + + +# Linux x86 glibc +export MULTI_NAME=binaries/Linux/intel/glibc/vlmcsdmulti-x86-glibc +export CLIENT_NAME=binaries/Linux/intel/glibc/vlmcs-x86-glibc +export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x86-glibc +export CC=~/openwrt/staging_dir/toolchain-i386_i486_gcc-4.8-linaro_eglibc-2.19/bin/i486-openwrt-linux-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m32 -march=i686 -mtune=generic" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 + +make $MAKEFLAGS binaries/Linux/intel/glibc/vlmcsdmulti-x86-glibc + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + + + + +# Linux x86 glibc minimum standalone version +export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x86-glibc-minimum +export CC=~/openwrt/staging_dir/toolchain-i386_i486_gcc-4.8-linaro_eglibc-2.19/bin/i486-openwrt-linux-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m32 -march=i686 -mtune=generic" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 +export FEATURES=minimum + +make NO_DNS=1 $MAKEFLAGS $PROGRAM_NAME + +if [ $? != 0 ]; then + echo Error creating $PROGRAM_NAME + exit $? +fi + +# Linux x86 glibc minimum inetd version +export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x86-glibc-minimum-inetd +export CFLAGS="$CFLAGS -DNO_SOCKETS" + +make NO_DNS=1 $MAKEFLAGS $PROGRAM_NAME + +if [ $? != 0 ]; then + echo Error creating $PROGRAM_NAME + exit $? +fi + +# Linux x86 glibc threads +export FEATURES=full +export THREADS=1 +export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x86-glibc-threads +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -lpthread" +export CFLAGS="$SMALLCC" + +make $MAKEFLAGS $PROGRAM_NAME + +if [ $? != 0 ]; then + echo Error creating $PROGRAM_NAME + exit $? +fi + + + + +# Linux x86 musl +export FEATURES=full +export MULTI_NAME=binaries/Linux/intel/static/vlmcsdmulti-x86-musl-static +export CLIENT_NAME=binaries/Linux/intel/static/vlmcs-x86-musl-static +export PROGRAM_NAME=binaries/Linux/intel/static/vlmcsd-x86-musl-static +export CC=/opt/toolchains/i386_i486_gcc-4.9-linaro_musl-1.1.6/bin/i486-openwrt-linux-musl-gcc-4.9.2 +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m32 -march=i686 -mtune=generic" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static" +export THREADS=0 +export NOPROCFS=0 +export AUXV=1 + +make $MAKEFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export MULTI_NAME=binaries/Linux/intel/musl/vlmcsdmulti-x86-musl + +make $MAKEFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null +export LDFLAGS="$LDFLAGS -static" + +make $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export CLIENT_NAME=binaries/Linux/intel/musl/vlmcs-x86-musl +export PROGRAM_NAME=binaries/Linux/intel/musl/vlmcsd-x86-musl +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" + +make $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + + + + +# Linux x86 musl static threads +export FEATURES=full +export PROGRAM_NAME=binaries/Linux/intel/static/vlmcsd-x86-musl-static-threads +export CC=/opt/toolchains/i386_i486_gcc-4.9-linaro_musl-1.1.6/bin/i486-openwrt-linux-musl-gcc-4.9.2 +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m32 -march=i686 -mtune=generic" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static" +export THREADS=1 +export NOPROCFS=0 +export AUXV=1 + +make $MAKEFLAGS $PROGRAM_NAME + +if [ $? != 0 ]; then + echo Error creating $PROGRAM_NAME + exit $? +fi + + + + + +# Linux x32 glibc +export FEATURES=full +export MULTI_NAME=binaries/Linux/intel/glibc/vlmcsdmulti-x32-glibc +export CLIENT_NAME=binaries/Linux/intel/glibc/vlmcs-x32-glibc +export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x32-glibc +export CC=gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mx32 -march=nocona -mtune=generic" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 +export NOPROCFS=0 +export AUXV=1 + +make DNS_PARSER=OS $MAKEFLAGS binaries/Linux/intel/glibc/vlmcsdmulti-x32-glibc + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make DNS_PARSER=OS $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + + + + +# Linux x32 glibc threads +export FEATURES=full +export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x32-glibc-threads +export CC=gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mx32 -march=nocona -mtune=generic" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -lpthread" +export THREADS=1 +export NOPROCFS=0 +export AUXV=1 + +make DNS_PARSER=OS $MAKEFLAGS $PROGRAM_NAME + +if [ $? != 0 ]; then + echo Error creating $PROGRAM_NAME + exit $? +fi + + + + +# Linux armv4 little-endian glibc +export FEATURES=full +export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv4el-glibc +export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv4el-glibc +export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv4el-glibc +export CC=/opt/toolchains/armelv5t-glibc-2.20/bin/arm-linux-gcc +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv4 -marm" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 +export NOPROCFS=0 +export AUXV=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux armv4 little-endian glibc thumb instruction set + +export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv4el-glibc-thumb +export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv4el-glibc-thumb +export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv4el-glibc-thumb +export CC=/opt/toolchains/armelv5t-glibc-2.20/bin/arm-linux-gcc +export FEATURES=full +export CFLAGS="$SMALLCC" +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv4t -mthumb" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux armv5 little-endian glibc thumb instruction set +export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv5el-glibc-thumb +export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv5el-glibc-thumb +export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv5el-glibc-thumb +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv5t -mthumb" + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + +# Linux armv5 little-endian glibc +export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv5el-glibc +export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv5el-glibc +export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv5el-glibc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv5 -marm" + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux armv7 little-endian glibc thumb2 instruction set +export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv7el-glibc +export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv7el-glibc +export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv7el-glibc +export CC=/opt/toolchains/armelv7-cortex-a8-glibc-2.18/usr/bin/arm-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux armv4 little-endian openwrt toolchain +export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv4el-openwrt-glibc +export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv4el-openwrt-glibc +export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv4el-openwrt-glibc +export CC=~/openwrt/staging_dir/toolchain-arm_mpcore+vfp_gcc-4.8-linaro_eglibc-2.19_eabi/bin/arm-openwrt-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv4" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + + +# Linux armv7 little-endian openwrt toolchain thumb 2 instruction set +INSTALLDIR=binaries/Linux/arm/little-endian/glibc/ +SUFFIX=-armv7el-openwrt-glibc +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=~/openwrt/staging_dir/toolchain-arm_mpcore+vfp_gcc-4.8-linaro_eglibc-2.19_eabi/bin/arm-openwrt-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + +# Linux armv5 little endian thumb instruction set +INSTALLDIR=binaries/Linux/arm/little-endian/static/ +SUFFIX=-armv5el-musl-thumb +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}-static +export CC=/opt/toolchains/armelv5t-musl/usr/bin/arm-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static" +export THREADS=0 +export NOPROCFS=0 +export AUXV=1 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +INSTALLDIR=binaries/Linux/arm/little-endian/musl/ +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} + +make $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +INSTALLDIR=binaries/Linux/arm/little-endian/static/ +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}-static +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static" + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux armv5 little-endian uclibc thumb instruction set +INSTALLDIR=binaries/Linux/arm/little-endian/uclibc/ +SUFFIX=-armv5el-uclibc-thumb +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/armelv5t-uclibc-0.9.33/usr/bin/arm-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv5t -mthumb" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 +export NOPROCFS=0 +export AUXV=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux armv7 little-endian uclibc thumb 2 instruction set +INSTALLDIR=binaries/Linux/arm/little-endian/ +SUFFIX=-armv7el-uclibc +export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/armelv7-cortex-a8-uclibc-0.9.33/usr/bin/arm-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static" + +make $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux armv4 little-endian uclibc openwrt toolchain +INSTALLDIR=binaries/Linux/arm/little-endian/uclibc/ +SUFFIX=-armv4el-openwrt-uclibc +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=~/openwrt/staging_dir/toolchain-arm_mpcore+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/arm-openwrt-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv4 -marm" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +## Linux armv4 little-endian uclibc openwrt toolchain thumb instruction set +#INSTALLDIR=binaries/Linux/arm/little-endian/uclibc/ +#SUFFIX=-armv4el-openwrt-uclibc-thumb +#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +#export CC=~/openwrt/staging_dir/toolchain-arm_mpcore+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/arm-openwrt-linux-gcc +#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv4t -mthumb" +#export FEATURES=full +#export CFLAGS="$SMALLCC" +#export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +#export THREADS=0 +# +#make $MAKEFLAGS +# +#if [ $? != 0 ]; then +# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME +# exit $? +#fi +# +#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null +# +#make $REUSEOBJFLAGS $MULTI_NAME +# +#if [ $? != 0 ]; then +# echo Error creating $MULTI_NAME +# exit $? +#fi + + + + +# Linux armv7 little-endian uclibc openwrt toolchain thumb 2 instruction set +INSTALLDIR=binaries/Linux/arm/little-endian/uclibc/ +SUFFIX=-armv7el-openwrt-uclibc +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=~/openwrt/staging_dir/toolchain-arm_mpcore+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/arm-openwrt-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Linux armv4 little-endian uclibc +INSTALLDIR=binaries/Linux/arm/little-endian/ +SUFFIX=-armv4el-uclibc +export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export CC=/root/cross-compiler-armv4l/bin/armv4l-gcc +export PLATFORMFLAGS="-pipe" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="-Wl,-z,norelro -fwhole-program" +export THREADS=0 +export NOPROCFS=1 + +make $MAKEFLAGS $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME CAT=2 + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME + exit $? +fi + +export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static +export LDFLAGS="-Wl,-z,norelro -fwhole-program -static" + +make $REUSEOBJFLAGS $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME CAT=2 + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME + exit $? +fi + + + + + +# mips1 little-endian with openssl 0.9.8 support dreambox toolchain +INSTALLDIR=binaries/Linux/mips/little-endian/glibc/ +SUFFIX=-mips1el-glibc-openssl0.9.8-soft-EXPERIMENTAL +export CRYPTO=openssl_with_aes_soft +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/simplebuild/toolchains/mipsoe20/bin/mipsel-unknown-linux-gnu-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export NOPROCFS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# mips1 little-endian dreambox toolchain +INSTALLDIR=binaries/Linux/mips/little-endian/glibc/ +SUFFIX=-mips1el-glibc +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/simplebuild/toolchains/mipsoe20/bin/mipsel-unknown-linux-gnu-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux mips1 little-endian uclibc +INSTALLDIR=binaries/Linux/mips/little-endian/ +SUFFIX=-mips1el-uclibc +export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export CC=/root/cross-compiler-mipsel/bin/mipsel-gcc +export PLATFORMFLAGS="-pipe" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="-Wl,-z,norelro -fwhole-program" +export THREADS=0 +export CRYPTO=internal +export NOPROCFS=1 + +make $MAKEFLAGS CAT=2 $CLIENT_NAME $MULTI_NAME $PROGRAM_NAME + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME + exit $? +fi + +export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static +export LDFLAGS="-Wl,-z,norelro -fwhole-program -static" + +make $REUSEOBJFLAGS CAT=2 $CLIENT_NAME $MULTI_NAME $PROGRAM_NAME + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME + exit $? +fi + + + + +# Linux mips16 little endian glibc +INSTALLDIR=binaries/Linux/mips/little-endian/glibc/ +SUFFIX=-mips16el-glibc +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/mips32el-mips16-glibc-2.18/usr/bin/mipsel-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32 -mips16" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal +export NOPROCFS=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux mips16 little-endian uclibc +INSTALLDIR=binaries/Linux/mips/little-endian/uclibc/ +SUFFIX=-mips16el-uclibc +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/mips32el-mips16-uclibc-0.9.33/bin/mipsel-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32 -mips16" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux PowerPC glibc with SSL support and Dreambox 500 toolchain +INSTALLDIR=binaries/Linux/ppc/big-endian/glibc/ +SUFFIX=-ppc-glibc-openssl0.9.8-soft-EXPERIMENTAL +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/simplebuild/toolchains/powerpc/bin/powerpc-linux-gcc +export PLATFORMFLAGS="-pipe" +export FEATURES=full +export CFLAGS="-fno-common -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +export LDFLAGS="-Wl,--no-gc-sections -Wl,-z,norelro" +export THREADS=0 +export CRYPTO=internal + +make NO_DNS=1 $MAKEFLAGS CAT=2 $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME + exit $? +fi + + + + + + +#Linux PowerPC uclibc OpenWRT toolchain +INSTALLDIR=binaries/Linux/ppc/big-endian/ +SUFFIX=-ppc-uclibc +export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +#export CC=~/openwrt/staging_dir/toolchain-powerpc_405_gcc-4.8-linaro_uClibc-0.9.33.2/bin/powerpc-openwrt-linux-gcc +export CC=/opt/toolchains/ppc-uclibc0.9.33.2-gcc-4.9.1-binutils2.24/bin/powerpc-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -L/root/cross-compiler-powerpc/lib -L/root/cross-compiler-powerpc/usr/lib" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static +export LDFLAGS="$SMALLLD -static" + +make $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export LDFLAGS="$SMALLLD" + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Fritzbox 7170 (mips32r2 little-endian) device specific, May or may not run on other devices +INSTALLDIR=binaries/Linux/mips/little-endian/ +SUFFIX=-mips32r2el-Fritzbox-71xx-72xx-uclibc +export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export CC=/opt/simplebuild/toolchains/fritz71xx/bin/mipsel-linux-uclibc-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=4kec -mtune=4kec" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal + +make NOLRESOLV=1 $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static +export LDFLAGS="$SMALLLD -static" + +make NOLRESOLV=1 $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLRESOLV=1 $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export LDFLAGS="$SMALLLD" + +make NOLRESOLV=1 $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Fritzbox 7370 (mips32r2 big-endian) device specific, May or may not run on other devices +INSTALLDIR=binaries/Linux/mips/big-endian/ +SUFFIX=-mips16-Fritzbox-33xx-73xx-74xx-63xx-64xx-uclibc +export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export CC=/opt/simplebuild/toolchains/fritz73xxOS62/bin/mips-linux-cc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mtune=24kc -mips16 -mdsp" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal + +make NOLRESOLV=1 $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static +export LDFLAGS="$SMALLLD -static" + +make NOLRESOLV=1 $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLRESOLV=1 $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export LDFLAGS="$SMALLLD" + +make NOLRESOLV=1 $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Fritzbox 7370 (mips32r2 big-endian) device specific with _PEDANTIC, May or may not run on other devices +INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/ +SUFFIX=-mips16-Fritzbox-33xx-73xx-74xx-63xx-64xx-uclibc-pedantic +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/simplebuild/toolchains/fritz73xxOS62/bin/mips-linux-cc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mtune=24kc -mips16 -mdsp" +export FEATURES=full +export CFLAGS="$SMALLCC -D_PEDANTIC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal + +make NOLRESOLV=1 $MAKEFLAGS $PROGRAM_NAME + +if [ $? != 0 ]; then + echo Error creating $PROGRAM_NAME + exit $? +fi + + + + +#Fritzbox 7370 (mips32r2 big-endian) device specific inetd start only, May or may not run on other devices +INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/ +SUFFIX=-mips16-Fritzbox-33xx-73xx-74xx-63xx-64xx-uclibc-inetd +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/simplebuild/toolchains/fritz73xxOS62/bin/mips-linux-cc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mtune=24kc -mips16 -mdsp" +export FEATURES=inetd +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal + +make NOLRESOLV=1 $MAKEFLAGS $PROGRAM_NAME + +if [ $? != 0 ]; then + echo Error creating $PROGRAM_NAME + exit $? +fi + + + + +#Fritzbox 7370 (mips32r2 big-endian) device specific with pthreads, May or may not run on other devices +INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/ +SUFFIX=-mips16-Fritzbox-33xx-73xx-74xx-63xx-64xx-uclibc-threads +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/simplebuild/toolchains/fritz73xxOS62/bin/mips-linux-cc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mtune=24kc -mips16 -mdsp" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -lpthread" +export THREADS=1 + +make NOLRESOLV=1 $MAKEFLAGS $PROGRAM_NAME + +if [ $? != 0 ]; then + echo Error creating $PROGRAM_NAME + exit $? +fi + + + + +#Fritzbox 7370 (mips32r2 big-endian) device specific with OpenSSL support, May or may not run on other devices +INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/ +SUFFIX=-mips16-Fritzbox-33xx-73xx-74xx-63xx-64xx-uclibc-openssl0.9.8-soft-EXPERIMENTAL +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/simplebuild/toolchains/fritz73xxOS62/bin/mips-linux-cc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mtune=24kc -mips16 -mdsp" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=openssl_with_aes_soft +export OPENSSL_HMAC=0 + +make NOLRESOLV=1 $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make NOLRESOLV=1 $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +unset OPENSSL_HMAC + + + +#make $MAKEFLAGS CLIENT_NAME=binaries/Linux/mips/big-endian/uclibc/vlmcs-mips32-uclibc CFLAGS="$SMALL -pipe -flto=jobserver -fwhole-program" PROGRAM_NAME=binaries/Linux/mips/big-endian/uclibc/vlmcsd-mips32-uclibc CC=/opt/toolchains/mips32eb-uclibc-0.9.33/usr/bin/mips-linux-cc && \ +# Linux mips32 big-endian uclibc +INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/ +SUFFIX=-mips32-uclibc +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/mips32eb-uclibc-0.9.33/usr/bin/mips-linux-cc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux mips16 big-endian uclibc +INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/ +SUFFIX=-mips16-uclibc +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/mips32eb-uclibc-0.9.33/usr/bin/mips-linux-cc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Atheros ar7xxx/ar9xxx chips with OpenWRT toolchain (mips16 big-endian) device specific, May or may not run on other devices +INSTALLDIR=binaries/Linux/mips/big-endian/ +SUFFIX=-mips16-openwrt-atheros-ar7xxx-ar9xxx-uclibc +export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/mips-openwrt-linux-uclibc/bin/mips-openwrt-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mips16" +export FEATURES=full +export CFLAGS="$SMALLCC -DNO_LIMIT" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + + +#Atheros ar7xxx/ar9xxx chips with OpenWRT toolchain (mips16 big-endian) device specific, May or may not run on other devices +INSTALLDIR=binaries/Linux/mips/big-endian/ +SUFFIX=-mips16-openwrt-atheros-ar7xxx-ar9xxx-musl +export PROGRAM_NAME=${INSTALLDIR}musl/vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}musl/vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/mips_34kc_gcc-4.9-linaro_musl-1.1.6-mips16/bin/mips-openwrt-linux-musl-gcc-4.9.2 +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mips16" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static +export LDFLAGS="$LDFLAGS -static" + +make $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} +export LDFLAGS="$SMALLLD" + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Atheros ar7xxx/ar9xxx chips with OpenWRT toolchain (mips32r2 big-endian) device specific, May or may not run on other devices +INSTALLDIR=binaries/Linux/mips/big-endian/ +SUFFIX=-mips32r2-openwrt-atheros-ar7xxx-ar9xxx-uclibc +export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/mips-openwrt-linux-uclibc/bin/mips-openwrt-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc" +export FEATURES=full +export CFLAGS="$SMALLCC -DNO_LIMIT" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static +export LDFLAGS="$SMALLLD -static" + +make $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export LDFLAGS="$SMALLLD" + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux mips16 big-endian uclibc threads +INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/ +SUFFIX=-mips16-uclibc-threads +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/mips32eb-uclibc-0.9.33/usr/bin/mips-linux-cc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -lpthread" +export THREADS=1 +export CRYPTO=internal + +make $MAKEFLAGS $PROGRAM_NAME + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + + + + +# Linux mips32 big-endian glibc +INSTALLDIR=binaries/Linux/mips/big-endian/glibc/ +SUFFIX=-mips32-glibc +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/mips32eb-glibc-2.19/usr/bin/mips-linux-cc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux mips16 big-endian glibc +INSTALLDIR=binaries/Linux/mips/big-endian/glibc/ +SUFFIX=-mips16-glibc +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/mips32eb-glibc-2.19/usr/bin/mips-linux-cc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Linux mips32 big-endian musl +INSTALLDIR=binaries/Linux/mips/big-endian/ +SUFFIX=-mips32-musl +export PROGRAM_NAME=${INSTALLDIR}musl/vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}musl/vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/mips32eb-musl/usr/bin/mips-linux-cc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal +export NOPROCFS=0 +export AUXV=1 + + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static +export LDFLAGS="$SMALLLD -static" + +make $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} +export LDFLAGS="$SMALLLD" + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Linux mips16 little-endian musl soft-float +INSTALLDIR=binaries/Linux/mips/little-endian/ +SUFFIX=-mips16el-musl +export PROGRAM_NAME=${INSTALLDIR}musl/vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}musl/vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/mips32el-mips16-musl/usr/bin/mipsel-linux-cc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal +export NOPROCFS=0 +export AUXV=1 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static +export LDFLAGS="$SMALLLD -static" + +make $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} +export LDFLAGS="$SMALLLD" + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Linux mips16 little-endian musl fpu +INSTALLDIR=binaries/Linux/mips/little-endian/ +SUFFIX=-mips16el-musl-fpu +export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static +export CC=/opt/toolchains/mips32el-mips16-musl-fpu/usr/bin/mipsel-linux-cc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -static" +export THREADS=0 +export CRYPTO=internal +export NOPROCFS=0 +export AUXV=1 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + +# Linux x86 uclibc +INSTALLDIR=binaries/Linux/intel/uclibc/ +SUFFIX=-x86-uclibc +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/i486-uclibc-0.9.33/bin/i486-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m32 -march=i486 -mtune=generic" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 +export CRYPTO=internal +export NOPROCFS=0 +export AUXV=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + +#make $MAKEFLAGS CLIENT_NAME=binaries/Linux/intel/glibc/vlmcs-x64-glibc LDFLAGS="-Wl,--hash-style=gnu" CFLAGS="$SMALL -pipe -flto=jobserver -fwhole-program" PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x64-glibc CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc PLATFORMFLAGS="-m64 -mtune=generic"&& \ +# Linux x64 glibc +INSTALLDIR=binaries/Linux/intel/glibc/ +SUFFIX=-x64-glibc +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m64 -mtune=generic" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 +export CRYPTO=internal + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Linux Sparc32v7 glibc +INSTALLDIR=binaries/Linux/sparc32/glibc/ +SUFFIX=-sparc32v7-glibc +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/sparc32-glibc-gcc-4.7.4/bin/sparc-buildroot-linux-gnu-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mcpu=v7" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -lpthread" +export THREADS=0 +export CRYPTO=internal + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#make $MAKEFLAGS binaries/Linux/intel/glibc/vlmcsd-x64-glibc-threads CLIENT_NAME=binaries/Linux/intel/glibc/vlmcs-x64-glibc-threads THREADS=1 LDFLAGS="-Wl,--hash-style=gnu -lpthread" CFLAGS="-pipe -flto=jobserver -fwhole-program" PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x64-glibc-threads CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc PLATFORMFLAGS="-m64 -mtune=generic"&& \ +# Linux x64 glibc with threads +INSTALLDIR=binaries/Linux/intel/glibc/ +SUFFIX=-x64-glibc-threads +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m64 -mtune=generic" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -lpthread" +export THREADS=1 +export CRYPTO=internal + +make $MAKEFLAGS $PROGRAM_NAME + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + + + + +#make $MAKEFLAGS LDFLAGS="-Wl,--hash-style=gnu" CLIENT_NAME=binaries/Linux/intel/glibc/vlmcs-x64-glibc-openssl1.0.0-hard-EXPERIMENTAL CRYPTO=openssl_with_aes CFLAGS="$SMALL -pipe -flto=jobserver -fwhole-program" PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x64-glibc-openssl1.0.0-hard-EXPERIMENTAL CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc PLATFORMFLAGS="-m64 -mtune=generic" && \ +# Linux x64 glibc with OpenSSL 1.0.x support +INSTALLDIR=binaries/Linux/intel/glibc/ +SUFFIX=-x64-glibc-openssl1.0.0-hard-EXPERIMENTAL +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m64 -mtune=generic" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 +export CRYPTO=openssl_with_aes + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux x64 musl +INSTALLDIR=binaries/Linux/intel/ +SUFFIX=-x64-musl +export PROGRAM_NAME=${INSTALLDIR}musl/vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}musl/vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/x86_64_gcc-4.9-linaro_musl-1.1.6/bin/x86_64-openwrt-linux-musl-gcc-4.9.2 +#export CC=/opt/toolchains/x86_64-musl/usr/bin/x86_64-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m64 -mtune=generic" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 +export CRYPTO=internal +export NOPROCFS=0 +export AUXV=1 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static" + +make $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#make $MAKEFLAGS CC=/opt/toolchains/x86_64-uclibc-0.9.33/bin/x86_64-linux-gcc LDFLAGS="-Wl,--hash-style=gnu" CLIENT_NAME=binaries/Linux/intel/uclibc/vlmcs-x64-uclibc PROGRAM_NAME=binaries/Linux/intel/uclibc/vlmcsd-x64-uclibc CFLAGS="$SMALL -flto=jobserver -fwhole-program -pipe -fno-stack-protector" && \ +# Linux x64 uclibc +INSTALLDIR=binaries/Linux/intel/uclibc/ +SUFFIX=-x64-uclibc +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/x86_64-uclibc-0.9.33/bin/x86_64-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m64 -mtune=generic" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 +export CRYPTO=internal +export NOPROCFS=0 +export AUXV=0 + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + +# mips32 little-endian DD-WRT toolchain with gcc 4.1.0 +export CC=/opt/simplebuild/toolchains/ddwrt410/bin/mipsel-linux-gcc +INSTALLDIR=binaries/Linux/mips/little-endian/ +SUFFIX=-mips32el-ddwrt-gcc$($CC -dumpversion)-uclibc +export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export PLATFORMFLAGS="-pipe -mips32" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="-fwhole-program" +export THREADS=0 +export CRYPTO=internal + +make $MAKEFLAGS CAT=2 $PROGRAM_NAME $MULTI_NAME $CLIENT_NAME + +if [ $? != 0 ]; then + echo Error creating $PROGRAM_NAME, $MULTI_NAME and/or $CLIENT_NAME + exit $? +fi + +export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static +export LDFLAGS="-fwhole-program -static" + +make $REUSEOBJFLAGS CAT=2 $PROGRAM_NAME $MULTI_NAME $CLIENT_NAME + +if [ $? != 0 ]; then + echo Error creating $PROGRAM_NAME, $MULTI_NAME and/or $CLIENT_NAME + exit $? +fi + + + + + +#Linux mips32 little-endian uclibc +INSTALLDIR=binaries/Linux/mips/little-endian/ +SUFFIX=-mips32el-uclibc +export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/mips32el-uclibc-0.9.33/bin/mipsel-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD" +export THREADS=0 +export CRYPTO=internal + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static +export LDFLAGS="$SMALLLD -static" + +make $REUSEOBJFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export LDFLAGS="$SMALLLD" + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +#Linux armv6 hard-float little-endian. Used on Raspberry Pi with Raspbian. +#The hard-float ABI cannot be combined with thumb. +#You may wish to use armv5el-thumb instead because the binary is smaller +INSTALLDIR=binaries/Linux/arm/little-endian/glibc/ +SUFFIX=-armv6hf-Raspberry-glibc +export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} +export CC=/opt/toolchains/armhfv6-glibc-2.19/bin/arm-linux-gcc +export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv6zk -mfpu=vfp -mfloat-abi=hard -mtune=arm1176jzf-s" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" +export THREADS=0 +export CRYPTO=internal + +make $MAKEFLAGS + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME + exit $? +fi + +rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null + +make $REUSEOBJFLAGS $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $MULTI_NAME + exit $? +fi + + + + +# Linux arm big-endian uclibc +INSTALLDIR=binaries/Linux/arm/big-endian/ +SUFFIX=-armeb-nslu2-uclibc +export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} +export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} +export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} +export CC=/opt/simplebuild/toolchains/nslu2open/bin/armeb-linux-uclibc-gcc +export PLATFORMFLAGS="-pipe" +export FEATURES=full +export CFLAGS="$SMALLCC" +export LDFLAGS="-Wl,-z,norelo" +export THREADS=0 + +make $MAKEFLAGS CAT=2 $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME + exit $? +fi + +export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static +export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static +export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static +export LDFLAGS="-Wl,-z,norelo -static" + +make $REUSEOBJFLAGS CAT=2 $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME + +if [ $? != 0 ]; then + echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME + exit $? +fi + + +# Strip off unnecessary stuff from binaries + +find binaries -xdev -name 'vlmcs*' -exec /opt/toolchains/mips32el-mips16-glibc-2.18/usr/bin/mipsel-linux-strip -s --strip-unneeded --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag {} \; 2>/dev/null +find binaries -xdev -name 'vlmcs*' -exec strip -s --strip-unneeded --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag {} \; 2>/dev/null +find binaries -xdev -name 'vlmcs*' -exec sstrip -z {} \; 2>/dev/null + +make alldocs + +rm *.o + +#cp -p binaries/Linux/intel/glibc/vlmcs-x32-glibc /usr/local/bin/vlmcs + +if [ `lsb_release -is` == "Debian" ]; then + cp -pf binaries/Linux/intel/glibc/vlmcsdmulti-x86-glibc /usr/local/sbin/vlmcsdmulti +else + cp -pf binaries/Linux/intel/glibc/vlmcsdmulti-x32-glibc /usr/local/sbin/vlmcsdmulti +fi + +ln -s vlmcsdmulti /usr/local/sbin/vlmcsd 2>/dev/null +ln -s ../sbin/vlmcsdmulti /usr/local/bin/vlmcs 2>/dev/null +mkdir -p /usr/local/man/man1 2>/dev/null +mkdir -p /usr/local/man/man5 2>/dev/null +mkdir -p /usr/local/man/man8 2>/dev/null +mkdir -p /usr/local/man/man7 2>/dev/null +cp -a vlmcs.1 vlmcsdmulti.1 /usr/local/man/man1/ +cp -a vlmcsd.7 /usr/local/man/man7/ +cp -a vlmcsd.8 /usr/local/man/man8/ +cp -a vlmcsd.ini.5 /usr/local/man/man5/ +pbzip2 -f -9 /usr/local/man/man5/vlmcsd.ini.5 /usr/local/man/man1/vlmcs.1 /usr/local/man/man1/vlmcsdmulti.1 /usr/local/man/man7/vlmcsd.7 /usr/local/man/man8/vlmcsd.8 +#pbzip2 -f /usr/local/man/man7/vlmcsd.7 +#pbzip2 -f /usr/local/man/man8/vlmcsd.8 + +mandb >/dev/null 2>&1 + diff --git a/make_minix b/make_minix new file mode 100644 index 0000000..0414001 --- /dev/null +++ b/make_minix @@ -0,0 +1,25 @@ +#!/bin/sh + +export VLMCSD_VERSION=svn$(ssh root@ubuntu64.internal "cd x; svnversion") +scp -p make_minix root@ubuntu64.internal:x +scp -pr root@ubuntu64.internal:x/* . + + +# Compile vlmcsd binaries for Minix 3 + +SUFFIX=-minix-$(uname -r)-x86 +export CC=clang +export CFLAGS="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +export LDFLAGS="-Wl,--hash-style=sysv -Wl,-z,norelro -Wl,--build-id=none" +export PROGRAM_NAME=vlmcsd$SUFFIX +export CLIENT_NAME=vlmcs$SUFFIX +export MULTI_NAME=vlmcsdmulti$SUFFIX + +gmake clean +gmake -B +rm -f vlmcsd.o vlmcs.o vlmcsdmulti.o +gmake $MULTI_NAME + +strip -s --strip-unneeded --remove-section .eh_frame_hdr --remove-section .eh_frame --remove-section .ident --remove-section .note.minix.ident --remove-section .note.netbsd.pax --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag *$SUFFIX + +scp -p *$SUFFIX root@ubuntu64.internal:x/binaries/Minix/intel/ diff --git a/make_netbsd b/make_netbsd new file mode 100644 index 0000000..bae992e --- /dev/null +++ b/make_netbsd @@ -0,0 +1,35 @@ +#!/usr/pkg/bin/bash + +export VERBOSE=3 +export DNS_PARSER=OS + +rm -f vlmcsd-* vlmcs-* vlmcsdmulti-* *_all.* 2>/dev/null +rm -f vlmcsdmulti vlmcsd vlmcs 2>/dev/null + +MAKEFLAGS="-B -j12" +REUSEOBJFLAGS="-j12" + +CF="-flto=12 -static-libgcc -pipe -fwhole-program -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +CF45="-static-libgcc -pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +CFCLANG="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +LF="-Wl,-z,norelro -Wl,--hash-style=sysv -Wl,--build-id=none" +LFCLANG="-Wl,-z,norelro -Wl,--hash-style=sysv" + +gmake $MAKEFLAGS CC=/usr/pkg/gcc49/bin/gcc PROGRAM_NAME=vlmcsd-NetBSD-x64 CLIENT_NAME=vlmcs-NetBSD-x64 CFLAGS="$CF" LDFLAGS="$LF" +rm vlmcsd.o vlmcs.o +gmake vlmcsdmulti-NetBSD-x64 $REUSEOBJFLAGS CC=/usr/pkg/gcc49/bin/gcc CFLAGS="$CF" LDFLAGS="$LF" MULTI_NAME=vlmcsdmulti-NetBSD-x64 + +gmake allmulti $MAKEFLAGS CAT=2 MULTI_NAME=vlmcsdmulti-NetBSD-x86 PROGRAM_NAME=vlmcsd-NetBSD-x86 CLIENT_NAME=vlmcs-NetBSD-x86 CFLAGS="$CF45 -m32" LDFLAGS="$LF" + +#gmake $MAKEFLAGS CC=clang PROGRAM_NAME=vlmcsd-NetBSD-x64-clang CLIENT_NAME=vlmcs-NetBSD-x64-clang CFLAGS="$CFCLANG" LDFLAGS="$LFCLANG" + +rm *.o + +strip -s --strip-unneeded --remove-section=.eh_frame_hdr --remove-section=.eh_frame --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag vlmcs-* vlmcsd-* vlmcsdmulti-* +#sstrip -z vlmcs-* vlmcsd-* vlmcsdmulti-* + +cp -af vlmcsd-NetBSD-x86 /usr/local/sbin/vlmcsd +cp -af vlmcs-NetBSD-x86 /usr/local/bin/vlmcs + +# Copy everything to distribution server +scp -p vlmcsdmulti-* vlmcsd-* vlmcs-* root@ubuntu64:x/binaries/NetBSD/intel/ diff --git a/make_openbsd b/make_openbsd new file mode 100644 index 0000000..55438ba --- /dev/null +++ b/make_openbsd @@ -0,0 +1,33 @@ +#!/usr/local/bin/bash + +export VERBOSE=3 +export DNS_PARSER=OS + +rm -f vlmcsd-* vlmcs-* vlmcsdmulti-* *_all.* 2>/dev/null +rm -f vlmcsdmulti vlmcsd vlmcs 2>/dev/null + +MAKEFLAGS="-B -j12" +REUSEOBJFLAGS="-j12" + +CF="-static-libgcc -pipe -fwhole-program -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +CF45="-static-libgcc -pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +CFCLANG="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +LF="-Wl,-z,norelro" +LFCLANG="-Wl,-z,norelro" + +gmake allmulti CAT=2 $MAKEFLAGS CC=egcc MULTI_NAME=vlmcsdmulti-OpenBSD-x64 PROGRAM_NAME=vlmcsd-OpenBSD-x64 CLIENT_NAME=vlmcs-OpenBSD-x64 CFLAGS="$CF" LDFLAGS="$LF" + +#gmake allmulti $MAKEFLAGS CAT=2 MULTI_NAME=vlmcsdmulti-OpenBSD-x86 PROGRAM_NAME=vlmcsd-OpenBSD-x86 CLIENT_NAME=vlmcs-OpenBSD-x86 CFLAGS="$CF45 -m32" LDFLAGS="$LF" + +#gmake $MAKEFLAGS CC=clang PROGRAM_NAME=vlmcsd-OpenBSD-x64-clang CLIENT_NAME=vlmcs-OpenBSD-x64-clang CFLAGS="$CFCLANG" LDFLAGS="$LFCLANG" + +rm *.o + +strip -s --strip-unneeded --remove-section=.eh_frame_hdr --remove-section=.eh_frame --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag vlmcs-* vlmcsd-* vlmcsdmulti-* +#sstrip -z vlmcs-* vlmcsd-* vlmcsdmulti-* + +cp -f vlmcsd-OpenBSD-x64 /usr/local/sbin/vlmcsd +cp -f vlmcs-OpenBSD-x64 /usr/local/bin/vlmcs + +# Copy everything to distribution server +scp -p vlmcsdmulti-* vlmcsd-* vlmcs-* root@ubuntu64:x/binaries/OpenBSD/intel/ diff --git a/make_osx b/make_osx new file mode 100644 index 0000000..1fb1615 --- /dev/null +++ b/make_osx @@ -0,0 +1,97 @@ +#!/bin/bash + +export VERBOSE=3 +export DNS_PARSER=OS + +rm vlmcsd-* vlmcs-* vlmcsdmulti-* *_all.* 2>/dev/null +rm vlmcsd vlmcs vlmcsdmulti 2>/dev/null + +MAKEFLAGS="-j -B" +REUSEOBJFLAGS="-j" +CFGCC="-static-libgcc -mdynamic-no-pic -Os -flto=jobserver -fwhole-program -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +CFCLANG="-mdynamic-no-pic -Os -flto -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" +CFGCC42="-static-libgcc -mdynamic-no-pic -Os -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" + +make $MAKEFLAGS CLIENT_NAME=vlmcs-MacOSX-x86 PROGRAM_NAME=vlmcsd-MacOSX-x86 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-m32 -march=core2 -mmacosx-version-min=10.0" && \ +rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* && \ +make $REUSEOBJFLAGS vlmcsdmulti-MacOSX-x86 MULTI_NAME=vlmcsdmulti-MacOSX-x86 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-m32 -march=core2 -mmacosx-version-min=10.0" && \ +make $MAKEFLAGS vlmcsd-MacOSX-x86-threads THREADS=1 PROGRAM_NAME=vlmcsd-MacOSX-x86-threads CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-m32 -march=core2 -mmacosx-version-min=10.0" && \ +make $MAKEFLAGS CLIENT_NAME=vlmcs-MacOSX-x64 PROGRAM_NAME=vlmcsd-MacOSX-x64 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-m64 -march=core2 -mmacosx-version-min=10.0" && \ +rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* && \ +make $REUSEOBJFLAGS vlmcsdmulti-MacOSX-x64 MULTI_NAME=vlmcsdmulti-MacOSX-x64 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-m64 -march=core2 -mmacosx-version-min=10.0" && \ +make $MAKEFLAGS vlmcsd-MacOSX-x64-threads THREADS=1 PROGRAM_NAME=vlmcsd-MacOSX-x64-threads CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-m64 -march=core2 -mmacosx-version-min=10.0" && \ +make $MAKEFLAGS CLIENT_NAME=vlmcs-MacOSX-x86-openssl-EXPERIMENTAL PROGRAM_NAME=vlmcsd-MacOSX-x86-openssl-EXPERIMENTAL CRYPTO=openssl_with_aes_soft CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-m32 -march=core2 -mmacosx-version-min=10.4" && \ +make $MAKEFLAGS CLIENT_NAME=vlmcs-MacOSX-x64-openssl-EXPERIMENTAL PROGRAM_NAME=vlmcsd-MacOSX-x64-openssl-EXPERIMENTAL CRYPTO=openssl_with_aes_soft CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-m64 -march=core2 -mmacosx-version-min=10.4" && \ + +#make $MAKEFLAGS CLIENT_NAME=vlmcs-iOS-7.1-armv7 PROGRAM_NAME=vlmcsd-iOS-7.1-armv7 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-mthumb -m32 -arch armv7 -miphoneos-version-min=1.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk" && \ +rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* && \ +#make $REUSEOBJFLAGS vlmcsdmulti-iOS-7.1-armv7 MULTI_NAME=vlmcsdmulti-iOS-7.1-armv7 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-mthumb -m32 -arch armv7 -miphoneos-version-min=1.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk" && \ + +make $MAKEFLAGS CLIENT_NAME=vlmcs-iOS-8.4-armv7 PROGRAM_NAME=vlmcsd-iOS-8.4-armv7 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-mthumb -m32 -arch armv7 -miphoneos-version-min=1.0 -isysroot ~/toolchains/iPhoneOS8.4.sdk" && \ +rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* && \ +make $REUSEOBJFLAGS vlmcsdmulti-iOS-8.4-armv7 MULTI_NAME=vlmcsdmulti-iOS-8.4-armv7 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-mthumb -m32 -arch armv7 -miphoneos-version-min=1.0 -isysroot ~/toolchains/iPhoneOS8.4.sdk" && \ +make $MAKEFLAGS CLIENT_NAME=vlmcs-iOS-8.4-armv8-aarch64 PROGRAM_NAME=vlmcsd-iOS-8.4-armv8-aarch64 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-m64 -arch arm64 -miphoneos-version-min=7.0 -isysroot ~/toolchains/iPhoneOS8.4.sdk" && \ +rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* && \ +make $REUSEOBJFLAGS vlmcsdmulti-iOS-8.4-armv8-aarch64 MULTI_NAME=vlmcsdmulti-iOS-8.4-armv8-aarch64 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-m64 -arch arm64 -miphoneos-version-min=7.0 -isysroot ~/toolchains/iPhoneOS8.4.sdk" && \ + +make $MAKEFLAGS CLIENT_NAME=vlmcs-iOS-6.1-armv7 PROGRAM_NAME=vlmcsd-iOS-6.1-armv7 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-mthumb -m32 -arch armv7 -miphoneos-version-min=1.0 --sysroot ~/toolchains/iPhoneOS6.1.sdk -isysroot ~/toolchains/iPhoneOS6.1.sdk" && \ +rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* && \ +make $REUSEOBJFLAGS vlmcsdmulti-iOS-6.1-armv7 MULTI_NAME=vlmcsdmulti-iOS-6.1-armv7 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-mthumb -m32 -arch armv7 -miphoneos-version-min=1.0 --sysroot ~/toolchains/iPhoneOS6.1.sdk -isysroot ~/toolchains/iPhoneOS6.1.sdk" && \ + +make $MAKEFLAGS CLIENT_NAME=vlmcs-iOS-5.1-armv7-clang3.4 PROGRAM_NAME=vlmcsd-iOS-5.1-armv7-clang3.4 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-mthumb -m32 -arch armv7 -miphoneos-version-min=1.0 --sysroot ~/toolchains/iPhoneOS5.1.sdk -isysroot ~/toolchains/iPhoneOS5.1.sdk" && \ +rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* && \ +make $REUSEOBJFLAGS vlmcsdmulti-iOS-5.1-armv7-clang3.4 MULTI_NAME=vlmcsdmulti-iOS-5.1-armv7-clang3.4 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-mthumb -m32 -arch armv7 -miphoneos-version-min=1.0 --sysroot ~/toolchains/iPhoneOS5.1.sdk -isysroot ~/toolchains/iPhoneOS5.1.sdk" && \ + +#PATH=~/toolchains/iOS5.1-MacOS-Lion/usr/bin:$PATH clang --version +PATH=~/toolchains/iOS5.1-MacOS-Lion/usr/bin:$PATH make $MAKEFLAGS CLIENT_NAME=vlmcs-iOS-5.1-armv6-clang3.1 PROGRAM_NAME=vlmcsd-iOS-5.1-armv6-clang3.1 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-arch armv6 -miphoneos-version-min=1.0 --sysroot ~/toolchains/iPhoneOS5.1.sdk -isysroot ~/toolchains/iPhoneOS5.1.sdk" && \ +rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* && \ +PATH=~/toolchains/iOS5.1-MacOS-Lion/usr/bin:$PATH make $REUSEOBJFLAGS vlmcsdmulti-iOS-5.1-armv6-clang3.1 MULTI_NAME=vlmcsdmulti-iOS-5.1-armv6-clang3.1 CC=clang CFLAGS="$CFCLANG" PLATFORMFLAGS="-arch armv6 -miphoneos-version-min=1.0 --sysroot ~/toolchains/iPhoneOS5.1.sdk -isysroot ~/toolchains/iPhoneOS5.1.sdk" && \ + +PATH=~/toolchains/gcc4.2/usr/bin/bin:$PATH make $MAKEFLAGS CLIENT_NAME=vlmcs-iOS-4.1-armv6-llvm-gcc4.2 PROGRAM_NAME=vlmcsd-iOS-4.1-armv6-llvm-gcc4.2 CC=llvm-g++-4.2 CFLAGS="$CFGCC42" PLATFORMFLAGS="-arch armv6 -miphoneos-version-min=1.0 --sysroot ~/toolchains/iPhoneOS4.1.sdk -isysroot ~/toolchains/iPhoneOS4.1.sdk" && \ +rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* && \ +PATH=~/toolchains/gcc4.2/usr/bin/bin:$PATH make $REUSEOBJFLAGS vlmcsdmulti-iOS-4.1-armv6-llvm-gcc4.2 MULTI_NAME=vlmcsdmulti-iOS-4.1-armv6-llvm-gcc4.2 CC=llvm-g++-4.2 CFLAGS="$CFGCC42" PLATFORMFLAGS="-arch armv6 -miphoneos-version-min=1.0 --sysroot ~/toolchains/iPhoneOS4.1.sdk -isysroot ~/toolchains/iPhoneOS4.1.sdk" && \ + +#PATH=~/toolchains/gcc4.2/usr/bin:$PATH make $MAKEFLAGS CLIENT_NAME=vlmcs-iOS-4.1-armv7-clang PROGRAM_NAME=vlmcsd-iOS-4.1-armv7-llvm-clang CC=~/toolchains/gcc4.2/usr/bin/bin/clang CFLAGS="$CFGCC42" PLATFORMFLAGS="-mthumb -arch armv7 -miphoneos-version-min=4.1 --sysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.1.sdk -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.1.sdk" && \ +#rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o && \ +#PATH=~/toolchains/gcc4.2/usr/bin:$PATH make $REUSEOBJFLAGS vlmcsdmulti-iOS-4.1-armv7-llvm-clang MULTI_NAME=vlmcsdmulti-iOS-4.1-armv7-llvm-clang CC=~/toolchains/gcc4.2/usr/bin/bin/clang CFLAGS="$CFGCC42" PLATFORMFLAGS="-mthumb -arch armv7 -miphoneos-version-min=4.1 --sysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.1.sdk -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.1.sdk" && \ + + +PATH=~/toolchains/gcc4.2/usr/bin:$PATH make -Bj PROGRAM_NAME=vlmcsd-MacOSX-ppc CLIENT_NAME=vlmcs-MacOSX-ppc CC=gcc CFLAGS="$CFGCC42 -isysroot ~/toolchains/MacOSX10.5.sdk -arch ppc -mmacosx-version-min=10.0" +rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* && \ +PATH=~/toolchains/gcc4.2/usr/bin:$PATH make -j vlmcsdmulti-MacOSX-ppc MULTI_NAME=vlmcsdmulti-MacOSX-ppc CC=gcc CFLAGS="$CFGCC42 -isysroot ~/toolchains/MacOSX10.5.sdk -arch ppc -mmacosx-version-min=10.0" + + +make $MAKEFLAGS CLIENT_NAME=vlmcs-MacOSX-x86-gcc PROGRAM_NAME=vlmcsd-MacOSX-x86-gcc CC=gcc-5 CFLAGS="$CFGCC" PLATFORMFLAGS="-m32 -march=core2 -mmacosx-version-min=10.0" && \ +rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* && \ +make $REUSEOBJFLAGS vlmcsdmulti-MacOSX-x86-gcc MULTI_NAME=vlmcsdmulti-MacOSX-x86-gcc CC=gcc-5 CFLAGS="$CFGCC" PLATFORMFLAGS="-m32 -march=core2 -mmacosx-version-min=10.0" && \ +make $MAKEFLAGS vlmcsd-MacOSX-x86-threads-gcc THREADS=1 PROGRAM_NAME=vlmcsd-MacOSX-x86-threads-gcc CC=gcc-5 CFLAGS="$CFGCC" PLATFORMFLAGS="-m32 -march=core2 -mmacosx-version-min=10.0" && \ +make $MAKEFLAGS CLIENT_NAME=vlmcs-MacOSX-x64-gcc PROGRAM_NAME=vlmcsd-MacOSX-x64-gcc CC=gcc-5 CFLAGS="$CFGCC" PLATFORMFLAGS="-m64 -march=core2 -mmacosx-version-min=10.0" && \ +rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* && \ +make $REUSEOBJFLAGS vlmcsdmulti-MacOSX-x64-gcc MULTI_NAME=vlmcsdmulti-MacOSX-x64-gcc CC=gcc-5 CFLAGS="$CFGCC" PLATFORMFLAGS="-m64 -march=core2 -mmacosx-version-min=10.0" && \ +make $MAKEFLAGS vlmcsd-MacOSX-x64-threads-gcc THREADS=1 PROGRAM_NAME=vlmcsd-MacOSX-x64-threads-gcc CC=gcc-5 CFLAGS="$CFGCC" PLATFORMFLAGS="-m64 -march=core2 -mmacosx-version-min=10.0" && \ + +# Sign the iOS binaries +#ldid -S *iOS* + +#strip vlmcs-* vlmcsd-* vlmcsdmulti-* + +rm -f *.o *_all.* +rm -fr *.dSYM + +sudo cp -p vlmcs-MacOSX-x86-gcc /usr/local/bin/vlmcs +sudo cp -p vlmcsd-MacOSX-x86-gcc /usr/local/bin/vlmcsd + +sudo mkdir -p /usr/local/share/man/man8 +sudo mkdir -p /usr/local/share/man/man1 +sudo mkdir -p /usr/local/share/man/man7 +sudo mkdir -p /usr/local/share/man/man5 + +sudo cp -p vlmcsd.8 /usr/local/share/man/man8 +sudo cp -p vlmcs.1 vlmcsdmulti.1 /usr/local/share/man/man1 +sudo cp -p vlmcsd.7 /usr/local/share/man/man7 +sudo cp -p vlmcsd.ini.5 //usr/local/share/man/man5 + +# Copy the stuff to distribution server +scp -p vlmcsd-MacOSX-x* vlmcs-MacOSX-x* vlmcsdmulti-MacOSX-x* root@ubuntu64:x/binaries/MacOSX/intel +scp -p vlmcsd-MacOSX-ppc* vlmcs-MacOSX-ppc* vlmcsdmulti-MacOSX-ppc* root@ubuntu64:x/binaries/MacOSX/ppc +scp -p vlmcsd-iOS* vlmcs-iOS* vlmcsdmulti-iOS* root@ubuntu64:x/binaries/iOS/arm diff --git a/make_solaris b/make_solaris new file mode 100644 index 0000000..5caf7c4 --- /dev/null +++ b/make_solaris @@ -0,0 +1,57 @@ +#!/bin/sh + +export VERBOSE=3 +export CAT=2 + +if [ `uname -s` != "SunOS" ]; then + echo "This is no SunOS operating system." + exit 3 +fi + +SOLARIS_VERSION=`uname -v` + +rm -f vlmcsd-* vlmcs-* vlmcsdmulti-* *_all.* 2>/dev/null +rm -f vlmcsdmulti vlmcsd vlmcs 2>/dev/null + +MAKEFLAGS="-B -j`nproc`" +REUSEOBJFLAGS="-j`nproc`" + +CF="-fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants -Wno-char-subscripts" +LF="-fwhole-program -Wl,-z,norelro -Wl,--hash-style=sysv -Wl,--build-id=none" + + +# 32 bit +if [ "$CAT" != "" ]; then + gmake $MAKEFLAGS LD_ALTEXEC=/usr/bin/gld vlmcs-Solaris$SOLARIS_VERSION-x86 vlmcsd-Solaris$SOLARIS_VERSION-x86 vlmcsdmulti-Solaris$SOLARIS_VERSION-x86 CLIENT_NAME=vlmcs-Solaris$SOLARIS_VERSION-x86 PROGRAM_NAME=vlmcsd-Solaris$SOLARIS_VERSION-x86 MULTI_NAME=vlmcsdmulti-Solaris$SOLARIS_VERSION-x86 CC=gcc CFLAGS="$CF" LDFLAGS="$LF" +else + gmake $MAKEFLAGS LD_ALTEXEC=/usr/bin/gld CLIENT_NAME=vlmcs-Solaris$SOLARIS_VERSION-x86 PROGRAM_NAME=vlmcsd-Solaris$SOLARIS_VERSION-x86 CC=gcc CFLAGS="$CF" LDFLAGS="$LF" + rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* + gmake $REUSEOBJFLAGS LD_ALTEXEC=/usr/bin/gld vlmcsdmulti-Solaris$SOLARIS_VERSION-x86 MULTI_NAME=vlmcsdmulti-Solaris$SOLARIS_VERSION-x86 CC=gcc CFLAGS="$CF" LDFLAGS="$LF" +fi + +gmake $MAKEFLAGS LD_ALTEXEC=/usr/bin/gld vlmcsd-Solaris$SOLARIS_VERSION-x86-threads PROGRAM_NAME=vlmcsd-Solaris$SOLARIS_VERSION-x86-threads CC=gcc THREADS=1 CFLAGS="$CF" LDFLAGS="-lpthread $LF" +gmake $MAKEFLAGS LD_ALTEXEC=/usr/bin/gld CLIENT_NAME=vlmcs-Solaris$SOLARIS_VERSION-x86-openssl1.0-EXPERIMENTAL CRYPTO=openssl_with_aes PROGRAM_NAME=vlmcsd-Solaris$SOLARIS_VERSION-x86-openssl1.0-EXPERIMENTAL CC=gcc CFLAGS="$CF" LDFLAGS="$LF" + +# 64 bit + +LF="$LF -Wl,-melf_x86_64_sol2" + +if [ "$CAT" != "" ]; then + gmake $MAKEFLAGS LD_ALTEXEC=/usr/bin/gld vlmcsdmulti-Solaris$SOLARIS_VERSION-x64 vlmcs-Solaris$SOLARIS_VERSION-x64 vlmcsd-Solaris$SOLARIS_VERSION-x64 MULTI_NAME=vlmcsdmulti-Solaris$SOLARIS_VERSION-x64 CLIENT_NAME=vlmcs-Solaris$SOLARIS_VERSION-x64 PROGRAM_NAME=vlmcsd-Solaris$SOLARIS_VERSION-x64 CC=gcc CFLAGS="$CF" LDFLAGS="$LF" PLATFORMFLAGS="-m64" +else + gmake $MAKEFLAGS LD_ALTEXEC=/usr/bin/gld CLIENT_NAME=vlmcs-Solaris$SOLARIS_VERSION-x64 PROGRAM_NAME=vlmcsd-Solaris$SOLARIS_VERSION-x64 CC=gcc CFLAGS="$CF" LDFLAGS="$LF" PLATFORMFLAGS="-m64" + rm -f vlmcs.o vlmcsd.o vlmcsdmulti.o *_all.* + gmake $REUSEOBJFLAGS LD_ALTEXEC=/usr/bin/gld vlmcsdmulti-Solaris$SOLARIS_VERSION-x64 MULTI_NAME=vlmcsdmulti-Solaris$SOLARIS_VERSION-x64 CC=gcc CFLAGS="$CF" LDFLAGS="$LF" PLATFORMFLAGS="-m64" +fi + +gmake $MAKEFLAGS LD_ALTEXEC=/usr/bin/gld vlmcsd-Solaris$SOLARIS_VERSION-x64-threads PROGRAM_NAME=vlmcsd-Solaris$SOLARIS_VERSION-x64-threads CC=gcc THREADS=1 CFLAGS="$CF" LDFLAGS="$LF -lpthread" PLATFORMFLAGS="-m64" +gmake $MAKEFLAGS LD_ALTEXEC=/usr/bin/gld CLIENT_NAME=vlmcs-Solaris$SOLARIS_VERSION-x64-openssl1.0-EXPERIMENTAL CRYPTO=openssl_with_aes PROGRAM_NAME=vlmcsd-Solaris$SOLARIS_VERSION-x64-openssl1.0-EXPERIMENTAL CC=gcc CFLAGS="$CF" LDFLAGS="$LF" PLATFORMFLAGS="-m64" + +rm -f *.o *_all.* + +gstrip -s --strip-unneeded --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag vlmcs-* vlmcsd-* +#gstrip -s --strip-unneeded --remove-section=.eh_frame_hdr --remove-section=.eh_frame --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag vlmcs-* vlmcsd-* +#sstrip -z vlmcs-* vlmcsd-* + +# Copy stuff to distribution server +scp -p vlmcsd-* vlmcs-* vlmcsdmulti-* root@ubuntu64:x/binaries/Solaris/intel diff --git a/make_windows b/make_windows new file mode 100644 index 0000000..8666a20 --- /dev/null +++ b/make_windows @@ -0,0 +1,79 @@ +#!/bin/bash + +rm -f cygkms*.dll libkms*.dll vlmcsd-* vlmcs-* vlmcsdmulti-* *_all.* vlmcsd.exe vlmcs.exe vlmcsdmulti.exe 2> /dev/null + +export CAT=2 +export VERBOSE=3 +NUMCPU=`cat /proc/cpuinfo | grep "processor" | wc -l` + +CF="-Wno-missing-braces -fno-common -fno-exceptions -fno-non-call-exceptions -fno-stack-protector -fmerge-all-constants -fno-unwind-tables -fno-asynchronous-unwind-tables -pipe" +CFMSRPC="-Wno-missing-braces -Wno-unused-variable $CF" # -fno-common -fno-stack-protector -fmerge-all-constants -pipe" +PF32="" +PF64="-mpreferred-stack-boundary=4 -march=nocona -mtune=generic" +LFCYG32="-fwhole-program -Wl,--nxcompat,--dynamicbase,--tsaware,--large-address-aware" +LFWIN32="-fwhole-program -lws2_32 -Wl,--nxcompat,--dynamicbase,--tsaware,--large-address-aware" +LFCYG64="-fwhole-program -Wl,--nxcompat,--dynamicbase,--tsaware" +LFWIN64="-fwhole-program -lws2_32 -Wl,--nxcompat,--dynamicbase,--tsaware" + +MAKEFLAGS="-j$NUMCPU -B" +REUSEFLAGS="-j$NUMCPU" + +make $MAKEFLAGS cygkms32.dll FEATURES=minimum THREADS=1 DLL_NAME=cygkms32.dll DNS_PARSER=internal CC=i686-pc-cygwin-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF32" LDFLAGS="$LFCYG32" +make $MAKEFLAGS cygkms64.dll FEATURES=minimum THREADS=1 DLL_NAME=cygkms64.dll DNS_PARSER=internal CC=x86_64-pc-cygwin-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF64" LDFLAGS="$LFCYG64" +make $MAKEFLAGS all vlmcsdmulti-cygwin-x86 THREADS=1 DNS_PARSER=internal CLIENT_NAME=vlmcs-cygwin-x86 PROGRAM_NAME=vlmcsd-cygwin-x86 MULTI_NAME=vlmcsdmulti-cygwin-x86 CC=i686-pc-cygwin-gcc.exe CFLAGS="$CF" PLATFORMFLAGS="$PF32" LDFLAGS="$LFCYG32" +make $MAKEFLAGS all vlmcsdmulti-cygwin-x64 THREADS=1 DNS_PARSER=internal CLIENT_NAME=vlmcs-cygwin-x64 PROGRAM_NAME=vlmcsd-cygwin-x64 MULTI_NAME=vlmcsdmulti-cygwin-x64 CC=x86_64-pc-cygwin-gcc.exe CFLAGS="$CF" PLATFORMFLAGS="$PF64" LDFLAGS="$LFCYG64" +make $MAKEFLAGS MSRPC=1 THREADS=1 DNS_PARSER=internal CLIENT_NAME=vlmcs-cygwin-msrpc-x86 PROGRAM_NAME=vlmcsd-cygwin-msrpc-x86 MULTI_NAME=vlmcsdmulti-cygwin-msrpc-x86 CC=i686-pc-cygwin-gcc.exe CFLAGS="$CF -fasynchronous-unwind-tables" PLATFORMFLAGS="$PF32" LDFLAGS="$LFCYG32" +make $MAKEFLAGS MSRPC=1 THREADS=1 DNS_PARSER=internal CLIENT_NAME=vlmcs-cygwin-msrpc-x64 PROGRAM_NAME=vlmcsd-cygwin-msrpc-x64 MULTI_NAME=vlmcsdmulti-cygwin-msrpc-x64 CC=x86_64-pc-cygwin-gcc.exe CFLAGS="$CFMSRPC" PLATFORMFLAGS="$PF64" LDFLAGS="$LFCYG64" +unset CAT +make $MAKEFLAGS vlmcsdmulti-cygwin-msrpc-x64 MSRPC=1 THREADS=1 DNS_PARSER=internal MULTI_NAME=vlmcsdmulti-cygwin-msrpc-x64 CC=x86_64-pc-cygwin-gcc.exe CFLAGS="$CFMSRPC -flto=jobserver" PLATFORMFLAGS="$PF64" LDFLAGS="$LFCYG64" +make $MAKEFLAGS vlmcsdmulti-cygwin-msrpc-x86 MSRPC=1 THREADS=1 DNS_PARSER=internal MULTI_NAME=vlmcsdmulti-cygwin-msrpc-x86 CC=i686-pc-cygwin-gcc.exe CFLAGS="$CFMSRPC -flto=jobserver" PLATFORMFLAGS="$PF32" LDFLAGS="$LFCYG32" +export CAT=2 + +make $MAKEFLAGS THREADS=1 MSRPC=1 DNS_PARSER=internal CLIENT_NAME=vlmcs-cygwin-msrpc-x86-openssl-EXPERIMENTAL CRYPTO=openssl_with_aes PROGRAM_NAME=vlmcsd-cygwin-x86-openssl-EXPERIMENTAL CC=i686-pc-cygwin-gcc.exe CFLAGS="$CFMSRPC" PLATFORMFLAGS="$PF32" LDFLAGS="$LFCYG32" +make $MAKEFLAGS THREADS=1 MSRPC=1 DNS_PARSER=internal CLIENT_NAME=vlmcs-cygwin-msrpc-x64-openssl-EXPERIMENTAL CRYPTO=openssl_with_aes PROGRAM_NAME=vlmcsd-cygwin-x64-openssl-EXPERIMENTAL CC=x86_64-pc-cygwin-gcc.exe CFLAGS="$CFMSRPC" PLATFORMFLAGS="$PF64" LDFLAGS="$LFCYG64" + +export CAT=2 + +make $MAKEFLAGS libkms32.dll CRYPTO=windows FEATURES=minimum THREADS=1 DLL_NAME=libkms32.dll CC=i686-w64-MingW32-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF32" LDFLAGS="-static-libgcc $LFWIN32" +make $MAKEFLAGS libkms64.dll CRYPTO=windows FEATURES=minimum THREADS=1 DLL_NAME=libkms64.dll CC=x86_64-w64-MingW32-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF64" LDFLAGS="-static-libgcc $LFWIN64" +make $MAKEFLAGS all vlmcsdmulti-Windows-x86 THREADS=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-x86 PROGRAM_NAME=vlmcsd-Windows-x86 MULTI_NAME=vlmcsdmulti-Windows-x86 CC=i686-w64-MingW32-gcc.exe CFLAGS="$CF" PLATFORMFLAGS="$PF32" LDFLAGS="$LFWIN32" +make $MAKEFLAGS all vlmcsdmulti-Windows-x64 THREADS=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-x64 PROGRAM_NAME=vlmcsd-Windows-x64 MULTI_NAME=vlmcsdmulti-Windows-x64 CC=x86_64-w64-MingW32-gcc.exe CFLAGS="$CF" PLATFORMFLAGS="$PF64" LDFLAGS="$LFWIN64" +make -Bj MSRPC=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-msrpc-x86 PROGRAM_NAME=vlmcsd-Windows-msrpc-x86 MULTI_NAME=vlmcsdmulti-Windows-msrpc-x86 CC=i686-w64-MingW32-gcc.exe CFLAGS="$CFMSRPC" PLATFORMFLAGS="$PF32" LDFLAGS="-Wl,--nxcompat,--dynamicbase,--tsaware,--large-address-aware" +make $MAKEFLAGS THREADS=1 MSRPC=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-msrpc-x64 PROGRAM_NAME=vlmcsd-Windows-msrpc-x64 MULTI_NAME=vlmcsdmulti-Windows-msrpc-x64 CC=x86_64-w64-MingW32-gcc.exe CFLAGS="$CFMSRPC" PLATFORMFLAGS="$PF64" LDFLAGS="$LFCYG64" +unset CAT +make $MAKEFLAGS vlmcsdmulti-Windows-msrpc-x86 THREADS=1 MSRPC=1 CRYPTO=windows MULTI_NAME=vlmcsdmulti-Windows-msrpc-x86 CC=i686-w64-MingW32-gcc.exe CFLAGS="$CFMSRPC" PLATFORMFLAGS="$PF32" LDFLAGS="-Wl,--nxcompat,--dynamicbase,--tsaware,--large-address-aware" +make $MAKEFLAGS vlmcsdmulti-Windows-msrpc-x64 THREADS=1 MSRPC=1 CRYPTO=windows MULTI_NAME=vlmcsdmulti-Windows-msrpc-x64 CC=x86_64-w64-MingW32-gcc.exe CFLAGS="$CFMSRPC" PLATFORMFLAGS="$PF64" LDFLAGS="$LFCYG64" +export CAT=2 + +rm -f *_all.* *.o 2> /dev/null & + +echo "" +echo "Installing binaries" + +cp -p vlmcs-cygwin-x64.exe /usr/local/bin/vlmcs & +cp -p vlmcsd-cygwin-x64.exe /usr/local/bin/vlmcsd & +cp -p cygkms64.dll /usr/local/bin/cygkms.dll & + +cp -p libkms32.dll /cygdrive/c/nttools/x86 & +cp -p libkms64.dll /cygdrive/c/nttools/x64 & +cp -p vlmcsdmulti-Windows-x86.exe /cygdrive/c/nttools/x86/vlmcsdmulti.exe + +cmd /C mklink c:\\nttools\\x86\\vlmcsd.exe vlmcsdmulti.exe 2> /dev/null & +cmd /C mklink c:\\nttools\\x86\\vlmcs.exe vlmcsdmulti.exe 2> /dev/null & + +echo "Installing man pages" + +mkdir -p /usr/share/man/man8 +mkdir -p /usr/share/man/man1 +mkdir -p /usr/share/man/man7 +mkdir -p /usr/share/man/man5 + +cp -p vlmcsd.7 /usr/share/man/man7 +cp -p vlmcsd.8 /usr/share/man/man8 +cp -p vlmcsd.ini.5 /usr/share/man/man5 +cp -p vlmcs.1 vlmcsdmulti.1 /usr/share/man/man1 + +bzip2 -f /usr/share/man/man5/vlmcsd.ini.5 /usr/share/man/man7/vlmcsd.7 /usr/share/man/man8/vlmcsd.8 /usr/share/man/man1/vlmcs.1 /usr/share/man/man1/vlmcsdmulti.1 & + +# Copy stuff to distribution server +scp -p vlmcsd-* vlmcs-* vlmcsdmulti-* *.dll root@ubuntu64:x/binaries/Windows/intel diff --git a/make_windows_native b/make_windows_native new file mode 100644 index 0000000..8c07db7 --- /dev/null +++ b/make_windows_native @@ -0,0 +1,17 @@ +#!/bin/bash + +# +# To use on x64 hosted native multilib compiler toolchain +# + +rm vlmcsd-* +rm vlmcsd + +MAKEFLAGS="-j -B" + +make $MAKEFLAGS PROGRAM_NAME=vlmcsd-mingw64-x86 CC=x86_64-w64-mingw32-gcc.exe CFLAGS="-flto -m32" "PLATFORMFLAGS=-march=i686 -mtune=generic" "LDFLAGS=-lcrypto -lz -lkernel32 -ladvapi32 -lws2_32 -lgdi32" +make $MAKEFLAGS PROGRAM_NAME=vlmcsd-mingw64-x64 CC=x86_64-w64-mingw32-gcc.exe CFLAGS="-flto" "PLATFORMFLAGS=-mtune=generic" "LDFLAGS=-lcrypto -lz -lkernel32 -ladvapi32 -lws2_32 -lgdi32" +make $MAKEFLAGS CRYPTO=openssl_with_aes PROGRAM_NAME=vlmcsd-mingw64-x86-openssl CC=x86_64-w64-mingw32-gcc.exe CFLAGS="-flto -m32" "PLATFORMFLAGS=-march=i686 -mtune=generic" "LDFLAGS=-lcrypto -lz -lkernel32 -ladvapi32 -lws2_32 -lgdi32" +make $MAKEFLAGS CRYPTO=openssl_with_aes PROGRAM_NAME=vlmcsd-mingw64-x64-openssl CC=x86_64-w64-mingw32-gcc.exe CFLAGS="-flto" "PLATFORMFLAGS=-mtune=generic" "LDFLAGS=-lcrypto -lz -lkernel32 -ladvapi32 -lws2_32 -lgdi32" + +rm *.o diff --git a/msrpc-client.c b/msrpc-client.c new file mode 100644 index 0000000..aee5695 --- /dev/null +++ b/msrpc-client.c @@ -0,0 +1,191 @@ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifdef USE_MSRPC + +#if !defined(_WIN32) && !defined(__CYGWIN__) +#error MSRPC is only available with native Windows or Cygwin +#endif + +#include "msrpc-client.h" +#include +#include "output.h" +#include "helpers.h" + +#if __amd64 || defined(_M_AMD64) // 64-bit + +#ifndef _M_AMD64 +#define _M_AMD64 +#endif // _M_AMD64 + +#include "KMSServer_c_x64_mingw_gcc.c" + +#else // 32-bit + +#include "KMSServer_c_mingw_gcc.c" + +#endif // 32-bit + +static RPC_CSTR stringBinding; +jmp_buf jmp; +RPC_STATUS PreviousRpcCallFailed = RPC_S_OK; + + +/* + * Creates an RPC string binding that is used to connect to the server. + * Input is host:port, e.g. "[::1]:1688" or "127.0.0.1:1688" + * Output is for example "ncacn_ip_tcp:127.0.0.1[endpoint=1688]" + */ +#if !__amd64 +#pragma GCC optimize("O0") ////TODO: Find out why gcc needs -O0 for RPC handling +#endif + +static RPC_STATUS createStringBinding(char *const addr, RPC_CSTR* stringBinding) +{ + char *szHost, *szPort; + + parseAddress(addr, &szHost, &szPort); + + return RpcStringBindingComposeA + ( + NULL, /* UUID */ + (RPC_CSTR)"ncacn_ip_tcp", /* use TCP */ + (RPC_CSTR)szHost, /* host name or IP address */ + (RPC_CSTR)szPort, /* endpoint (TCP port here) */ + NULL, /* options */ + stringBinding /* resulting string binding */ + ); +} + + +/* + * This does not actually connect to a TCP port because MS RPC doesn't connect + * before the actual RPC call is made. So this a stub + */ +RpcCtx connectToAddress(char *const addr, const int AddressFamily_unused, int_fast8_t showHostName_unused) +{ + RPC_STATUS status; + + printf("Connecting to %s ... ", addr); + + if ((status = createStringBinding(addr, &stringBinding)) != RPC_S_OK) + { + errorout("%s\n", win_strerror(status)); + return !0; + } + + if (PreviousRpcCallFailed) + { + errorout("%s\n", win_strerror(PreviousRpcCallFailed)); + return !0; + } + + printf("successful\n"); + return 0; +} + + +/* + * Does not do RPC binding on the wire. Just initializes the interface + */ +RpcStatus rpcBindClient(const RpcCtx handle, const int_fast8_t verbose) +{ + RPC_STATUS status; + + if ((status = RpcBindingFromStringBindingA(stringBinding, &KMSServer_v1_0_c_ifspec)) != RPC_S_OK) + { + errorout("\n%s\n", win_strerror(status)); + } + + return status; +} + + +/* + * You never know if you have a TCP connection or not + * This returns true if the previous RPC call failed + */ +int_fast8_t isDisconnected(const RpcCtx handle) +{ + return PreviousRpcCallFailed; +} + + +/* + * This is the exception handler because the RPC call may + * throw an SEH exception and gcc does not support + * __try / __except as MSVC does. + */ +static LONG WINAPI rpcException (LPEXCEPTION_POINTERS exception_pointers) +{ + DWORD exception = exception_pointers->ExceptionRecord->ExceptionCode; + if (!exception) exception = (DWORD)~0; + longjmp(jmp, exception_pointers->ExceptionRecord->ExceptionCode); + return EXCEPTION_EXECUTE_HANDLER; +} + +/* + * This actually calls the RPC server + */ +#define try SetUnhandledExceptionFilter(rpcException); RPC_STATUS exception = setjmp(jmp); if (!exception) +#define catch else +RpcStatus rpcSendRequest(const RpcCtx handle, BYTE* KmsRequest, const size_t requestSize, BYTE **KmsResponse, size_t* responseSize) +{ + *KmsResponse = NULL; // Let midl_user_allocate do the job + + try + { + exception = RequestActivation(KMSServer_v1_0_c_ifspec, (int)requestSize, KmsRequest, (int*)responseSize, KmsResponse); + } + catch + { + errorout("\n%s", win_strerror(exception)); + } + + PreviousRpcCallFailed = exception; + SetUnhandledExceptionFilter(NULL); + + return exception; + +} +#undef catch +#undef try + + +/* + * Only frees local handles. Cannot close the TCP connection + */ +RpcStatus closeRpc(const RpcCtx handle) +{ + RPC_STATUS status; + + if ((status = RpcBindingFree(&KMSServer_v1_0_c_ifspec)) != RPC_S_OK) return status; + status = RpcStringFreeA(&stringBinding); + //Ctx = INVALID_RPCCTX; + return status; +} + + +#if !MULTI_CALL_BINARY +// Memory allocation function for RPC. +void *__RPC_USER midl_user_allocate(SIZE_T len) +{ + return vlmcsd_malloc(len); +} + + +// Memory deallocation function for RPC. +void __RPC_USER midl_user_free(void __RPC_FAR *ptr) +{ + if (ptr) free(ptr); + ptr = NULL; +} + +#endif // !MULTI_CALL_BINARY + + +#endif // USE_MSRPC + + diff --git a/msrpc-client.h b/msrpc-client.h new file mode 100644 index 0000000..bfb6dba --- /dev/null +++ b/msrpc-client.h @@ -0,0 +1,22 @@ +/* + * msrpc-client.h + */ + +#ifndef MSRPC_CLIENT_H_ +#define MSRPC_CLIENT_H_ + +#include "types.h" +#include + +typedef int_fast8_t RpcCtx; +typedef RPC_STATUS RpcStatus; + +RpcCtx connectToAddress(char *const addr, const int AddressFamily_unused, int_fast8_t showHostName); +int_fast8_t isDisconnected(const RpcCtx handle); +RpcStatus rpcBindClient(const RpcCtx handle, const int_fast8_t verbose); +RpcStatus rpcSendRequest(const RpcCtx handle, BYTE* KmsRequest, size_t requestSize, BYTE **KmsResponse, size_t *responseSize); +RpcStatus closeRpc(RpcCtx s); + +#define INVALID_RPCCTX ((RpcCtx)~0) + +#endif /* MSRPC_CLIENT_H_ */ diff --git a/msrpc-server.c b/msrpc-server.c new file mode 100644 index 0000000..610eb58 --- /dev/null +++ b/msrpc-server.c @@ -0,0 +1,219 @@ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifdef USE_MSRPC + +#if !defined(_WIN32) && !defined(__CYGWIN__) +#error MSRPC is only available with native Windows or Cygwin +#endif + +#include "msrpc-server.h" +#include "output.h" +#include "kms.h" +#include "helpers.h" +#include "shared_globals.h" +#include "ntservice.h" +#include "endian.h" +#include "types.h" + +#if __amd64 || defined(_M_AMD64) // 64-bit + +#ifndef _M_AMD64 +#define _M_AMD64 +#endif // _M_AMD64 + +#include "KMSServer_s2_x64_mingw_gcc.c" + +#else // 32-bit + +#include "KMSServer_s2_mingw_gcc.c" + +#endif // 32-bit + + +#if !defined(NO_LIMIT) +#define MAXCALLS MaxTasks +#else // defined(NO_LIMIT) +#define MAXCALLS RPC_C_LISTEN_MAX_CALLS_DEFAULT +#endif + + + + +/* + * This is the main run loop for the KMS server + * We actually just setup things (must be after Cygwin fork) and then sleep + */ +int runServer() +{ +# if !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) + + // The RPC setup survives a Cygwin exec without problems but no daemonizing + // SIGHUP is currently disabled for Cygwin. So this code should never compile + + if (IsRestarted) + { +# ifndef NO_LOG + logger("vlmcsd %s started successfully\n", Version); +# endif // NO_LOG + } + else +# endif // !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) + { + RPC_STATUS status; + + // Endpoint is actually a TCP port for "ncacn_ip_tcp" + status = RpcServerUseProtseqEpA + ( + (RPC_CSTR)"ncacn_ip_tcp", + RPC_C_PROTSEQ_MAX_REQS_DEFAULT, + (RPC_CSTR)defaultport, + NULL + ); + + if (status) + { + printerrorf("Fatal: Cannot bind to port %s: %s\n", defaultport, win_strerror(status)); + return status; + } + +# ifndef NO_LOG + logger("Listening on port %s\n", defaultport); +# endif // NO_LOG + + // Registers the KMSServer interface. + status = RpcServerRegisterIf2 + ( + KMSServer_v1_0_s_ifspec, + NULL, + NULL, + RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH | RPC_IF_AUTOLISTEN, + MAXCALLS, + MAX_RESPONSE_SIZE, // currently set to sizeof(RESPONSE_V6) + NULL + ); + + if (status) + { + printerrorf("Fatal: Cannot register RPC interface: %s\n", win_strerror(status)); + return status; + } + +# ifndef NO_LOG + logger("vlmcsd %s started successfully\n", Version); +# endif // NO_LOG + + if (IsNTService) ReportServiceStatus(SERVICE_RUNNING, NO_ERROR, 200); + } + + // We could run RpcServerListen here but we need something + // that can be signaled from Cygwin. So we just sleep 24h (POSIX sleep, no Windows Sleep), + // wake up for some nanoseconds and sleep again. + + while(TRUE) sleep(86400); // Sleep one day +} + + + +/* + * Get's the IP address from an RPC_BINDING_HANDLE. Caller must call RpcStringFreeA to + * release memory allocated in *ipAddress + */ +#ifndef NO_LOG +RPC_STATUS getClientIp(const RPC_BINDING_HANDLE clientBinding, RPC_CSTR *ipAddress) +{ + RPC_STATUS result; + RPC_CSTR stringBinding; + RPC_BINDING_HANDLE serverBinding; + + // Fix for wine (disabled by default, because vlmcsd runs natively on all platforms where wine runs) + // Feel free to #define SUPPORT_WINE if you really want to run the Windows version with MS RPC (Wine RPC in this case) + #ifdef SUPPORT_WINE + HMODULE h = GetModuleHandleA("kernel32.dll"); + + if (h) + { + // Since wine simply terminates the thread when RpcBindingServerFromClient is called, we exit with an error + if (GetProcAddress(h, "wine_get_unix_file_name")) return RPC_S_CANNOT_SUPPORT; + } + #endif // SUPPORT_WINE + + if ((result = RpcBindingServerFromClient(clientBinding, &serverBinding)) != RPC_S_OK) return result; + + if ((result = RpcBindingToStringBindingA(serverBinding, &stringBinding)) != RPC_S_OK) + { + RpcBindingFree(&serverBinding); + return result; + } + + result = RpcStringBindingParseA(stringBinding, NULL, NULL, ipAddress, NULL, NULL); + RpcStringFreeA(&stringBinding); + RpcBindingFree(&serverBinding); + + return result; +} +#endif // NO_LOG + + + +/* + * This is the callback function for the RPC request as defined in KMSServer.idl + * Output from the MIDL compiler has been modified manually to support gcc (and compatible compilers) + * as well as Cygwin and MingW-w64 toolchains. + */ +int ProcessActivationRequest(handle_t IDL_handle, int requestSize, unsigned char *request, int *responseSize, unsigned char **response) +{ + RPC_CSTR clientIpAddress; + RPC_STATUS result; + int status = RPC_S_OK; + + result = getClientIp(IDL_handle, &clientIpAddress); + +# ifndef NO_LOG + + logger("RPC connection accepted: %s\n", !result ? (const char*)clientIpAddress : "Unknown IP"); + +# endif // NO_LOG + + // Discard any packet smaller than a v4 request + if (requestSize < (int)sizeof(REQUEST_V4)) return RPC_S_CANNOT_SUPPORT; + + *response = (uint8_t *)midl_user_allocate(MAX_RESPONSE_SIZE); + + switch(LE16(((REQUEST*)(request))->MajorVer)) + { + case 4: + *responseSize = CreateResponseV4((REQUEST_V4 *)request, *response, (char*)clientIpAddress); + break; + case 5: + case 6: + *responseSize = CreateResponseV6((REQUEST_V6 *) request, *response, (char*)clientIpAddress); + break; + default: + status = RPC_S_INVALID_ARG; + break; + } + + if (!result) RpcStringFreeA(&clientIpAddress); + return status; +} + + +// Memory allocation function for RPC. +void *__RPC_USER midl_user_allocate(SIZE_T len) +{ + return vlmcsd_malloc(len); +} + + +// Memory deallocation function for RPC. +void __RPC_USER midl_user_free(void __RPC_FAR *ptr) +{ + if (ptr) free(ptr); + ptr = NULL; +} + + +#endif // USE_MSRPC diff --git a/msrpc-server.h b/msrpc-server.h new file mode 100644 index 0000000..cae9c4d --- /dev/null +++ b/msrpc-server.h @@ -0,0 +1,10 @@ +/* + * msrpc-server.h + */ + +#ifndef MSRPC_SERVER_H_ +#define MSRPC_SERVER_H_ + +int runServer(); + +#endif /* MSRPC_SERVER_H_ */ diff --git a/nameser.h b/nameser.h new file mode 100644 index 0000000..a774798 --- /dev/null +++ b/nameser.h @@ -0,0 +1,569 @@ +/* $NetBSD: nameser.h,v 1.19 2005/12/26 19:01:47 perry Exp $ */ + +/* + * Copyright (c) 1983, 1989, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") + * Copyright (c) 1996-1999 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * Id: nameser.h,v 1.2.2.4.4.1 2004/03/09 08:33:30 marka Exp + */ + +#ifndef _ARPA_NAMESER_H_ +#define _ARPA_NAMESER_H_ + +#define BIND_4_COMPAT + +#include +#include + +/* + * Revision information. This is the release date in YYYYMMDD format. + * It can change every day so the right thing to do with it is use it + * in preprocessor commands such as "#if (__NAMESER > 19931104)". Do not + * compare for equality; rather, use it to determine whether your libbind.a + * contains a new enough lib/nameser/ to support the feature you need. + */ + +#define __NAMESER 19991006 /* New interface version stamp. */ + +/* + * Define constants based on RFC 883, RFC 1034, RFC 1035 + */ +#define NS_PACKETSZ 512 /* default UDP packet size */ +#define NS_MAXDNAME 1025 /* maximum domain name */ +#define NS_MAXMSG 65535 /* maximum message size */ +#define NS_MAXCDNAME 255 /* maximum compressed domain name */ +#define NS_MAXLABEL 63 /* maximum length of domain label */ +#define NS_HFIXEDSZ 12 /* #/bytes of fixed data in header */ +#define NS_QFIXEDSZ 4 /* #/bytes of fixed data in query */ +#define NS_RRFIXEDSZ 10 /* #/bytes of fixed data in r record */ +#define NS_INT32SZ 4 /* #/bytes of data in a uint32_t */ +#define NS_INT16SZ 2 /* #/bytes of data in a uint16_t */ +#define NS_INT8SZ 1 /* #/bytes of data in a uint8_t */ +#define NS_INADDRSZ 4 /* IPv4 T_A */ +#define NS_IN6ADDRSZ 16 /* IPv6 T_AAAA */ +#define NS_CMPRSFLGS 0xc0 /* Flag bits indicating name compression. */ +#define NS_DEFAULTPORT 53 /* For both TCP and UDP. */ + +/* + * These can be expanded with synonyms, just keep ns_parse.c:ns_parserecord() + * in synch with it. + */ +typedef enum __ns_sect { + ns_s_qd = 0, /* Query: Question. */ + ns_s_zn = 0, /* Update: Zone. */ + ns_s_an = 1, /* Query: Answer. */ + ns_s_pr = 1, /* Update: Prerequisites. */ + ns_s_ns = 2, /* Query: Name servers. */ + ns_s_ud = 2, /* Update: Update. */ + ns_s_ar = 3, /* Query|Update: Additional records. */ + ns_s_max = 4 +} ns_sect; + +/* + * This is a message handle. It is caller allocated and has no dynamic data. + * This structure is intended to be opaque to all but ns_parse.c, thus the + * leading _'s on the member names. Use the accessor functions, not the _'s. + */ +typedef struct __ns_msg { + const u_char *_msg, *_eom; + uint16_t _id, _flags, _counts[ns_s_max]; + const u_char *_sections[ns_s_max]; + ns_sect _sect; + int _rrnum; + const u_char *_msg_ptr; +} ns_msg; + +/* Private data structure - do not use from outside library. */ +struct _ns_flagdata { int mask, shift; }; +extern const struct _ns_flagdata _ns_flagdata[]; + +/* Accessor macros - this is part of the public interface. */ + +#define ns_msg_id(handle) ((handle)._id + 0) +#define ns_msg_base(handle) ((handle)._msg + 0) +#define ns_msg_end(handle) ((handle)._eom + 0) +#define ns_msg_size(handle) ((size_t)((handle)._eom - (handle)._msg)) +#define ns_msg_count(handle, section) ((handle)._counts[section] + 0) + +/* + * This is a parsed record. It is caller allocated and has no dynamic data. + */ +typedef struct __ns_rr { + char name[NS_MAXDNAME]; + uint16_t type; + uint16_t rr_class; + uint32_t ttl; + uint16_t rdlength; + const u_char * rdata; +} ns_rr; + +/* Accessor macros - this is part of the public interface. */ +#define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".") +#define ns_rr_type(rr) ((ns_type)((rr).type + 0)) +#define ns_rr_class(rr) ((ns_class)((rr).rr_class + 0)) +#define ns_rr_ttl(rr) ((u_long)(rr).ttl + 0) +#define ns_rr_rdlen(rr) ((size_t)(rr).rdlength + 0) +#define ns_rr_rdata(rr) ((rr).rdata + 0) + +/* + * These don't have to be in the same order as in the packet flags word, + * and they can even overlap in some cases, but they will need to be kept + * in synch with ns_parse.c:ns_flagdata[]. + */ +typedef enum __ns_flag { + ns_f_qr, /* Question/Response. */ + ns_f_opcode, /* Operation code. */ + ns_f_aa, /* Authoritative Answer. */ + ns_f_tc, /* Truncation occurred. */ + ns_f_rd, /* Recursion Desired. */ + ns_f_ra, /* Recursion Available. */ + ns_f_z, /* MBZ. */ + ns_f_ad, /* Authentic Data (DNSSEC). */ + ns_f_cd, /* Checking Disabled (DNSSEC). */ + ns_f_rcode, /* Response code. */ + ns_f_max +} ns_flag; + +/* + * Currently defined opcodes. + */ +typedef enum __ns_opcode { + ns_o_query = 0, /* Standard query. */ + ns_o_iquery = 1, /* Inverse query (deprecated/unsupported). */ + ns_o_status = 2, /* Name server status query (unsupported). */ + /* Opcode 3 is undefined/reserved. */ + ns_o_notify = 4, /* Zone change notification. */ + ns_o_update = 5, /* Zone update message. */ + ns_o_max = 6 +} ns_opcode; + +/* + * Currently defined response codes. + */ +typedef enum __ns_rcode { + ns_r_noerror = 0, /* No error occurred. */ + ns_r_formerr = 1, /* Format error. */ + ns_r_servfail = 2, /* Server failure. */ + ns_r_nxdomain = 3, /* Name error. */ + ns_r_notimpl = 4, /* Unimplemented. */ + ns_r_refused = 5, /* Operation refused. */ + /* these are for BIND_UPDATE */ + ns_r_yxdomain = 6, /* Name exists */ + ns_r_yxrrset = 7, /* RRset exists */ + ns_r_nxrrset = 8, /* RRset does not exist */ + ns_r_notauth = 9, /* Not authoritative for zone */ + ns_r_notzone = 10, /* Zone of record different from zone section */ + ns_r_max = 11, + /* The following are EDNS extended rcodes */ + ns_r_badvers = 16, + /* The following are TSIG errors */ + ns_r_badsig = 16, + ns_r_badkey = 17, + ns_r_badtime = 18 +} ns_rcode; + +/* BIND_UPDATE */ +typedef enum __ns_update_operation { + ns_uop_delete = 0, + ns_uop_add = 1, + ns_uop_max = 2 +} ns_update_operation; + +/* + * This structure is used for TSIG authenticated messages + */ +struct ns_tsig_key { + char name[NS_MAXDNAME], alg[NS_MAXDNAME]; + unsigned char *data; + int len; +}; +typedef struct ns_tsig_key ns_tsig_key; + +/* + * This structure is used for TSIG authenticated TCP messages + */ +struct ns_tcp_tsig_state { + int counter; + struct dst_key *key; + void *ctx; + unsigned char sig[NS_PACKETSZ]; + int siglen; +}; +typedef struct ns_tcp_tsig_state ns_tcp_tsig_state; + +#define NS_TSIG_FUDGE 300 +#define NS_TSIG_TCP_COUNT 100 +#define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT" + +#define NS_TSIG_ERROR_NO_TSIG -10 +#define NS_TSIG_ERROR_NO_SPACE -11 +#define NS_TSIG_ERROR_FORMERR -12 + +/* + * Currently defined type values for resources and queries. + */ +typedef enum __ns_type { + ns_t_invalid = 0, /* Cookie. */ + ns_t_a = 1, /* Host address. */ + ns_t_ns = 2, /* Authoritative server. */ + ns_t_md = 3, /* Mail destination. */ + ns_t_mf = 4, /* Mail forwarder. */ + ns_t_cname = 5, /* Canonical name. */ + ns_t_soa = 6, /* Start of authority zone. */ + ns_t_mb = 7, /* Mailbox domain name. */ + ns_t_mg = 8, /* Mail group member. */ + ns_t_mr = 9, /* Mail rename name. */ + ns_t_null = 10, /* Null resource record. */ + ns_t_wks = 11, /* Well known service. */ + ns_t_ptr = 12, /* Domain name pointer. */ + ns_t_hinfo = 13, /* Host information. */ + ns_t_minfo = 14, /* Mailbox information. */ + ns_t_mx = 15, /* Mail routing information. */ + ns_t_txt = 16, /* Text strings. */ + ns_t_rp = 17, /* Responsible person. */ + ns_t_afsdb = 18, /* AFS cell database. */ + ns_t_x25 = 19, /* X_25 calling address. */ + ns_t_isdn = 20, /* ISDN calling address. */ + ns_t_rt = 21, /* Router. */ + ns_t_nsap = 22, /* NSAP address. */ + ns_t_nsap_ptr = 23, /* Reverse NSAP lookup (deprecated). */ + ns_t_sig = 24, /* Security signature. */ + ns_t_key = 25, /* Security key. */ + ns_t_px = 26, /* X.400 mail mapping. */ + ns_t_gpos = 27, /* Geographical position (withdrawn). */ + ns_t_aaaa = 28, /* Ip6 Address. */ + ns_t_loc = 29, /* Location Information. */ + ns_t_nxt = 30, /* Next domain (security). */ + ns_t_eid = 31, /* Endpoint identifier. */ + ns_t_nimloc = 32, /* Nimrod Locator. */ + ns_t_srv = 33, /* Server Selection. */ + ns_t_atma = 34, /* ATM Address */ + ns_t_naptr = 35, /* Naming Authority PoinTeR */ + ns_t_kx = 36, /* Key Exchange */ + ns_t_cert = 37, /* Certification record */ + ns_t_a6 = 38, /* IPv6 address (deprecates AAAA) */ + ns_t_dname = 39, /* Non-terminal DNAME (for IPv6) */ + ns_t_sink = 40, /* Kitchen sink (experimentatl) */ + ns_t_opt = 41, /* EDNS0 option (meta-RR) */ + ns_t_apl = 42, /* Address prefix list (RFC 3123) */ + ns_t_tkey = 249, /* Transaction key */ + ns_t_tsig = 250, /* Transaction signature. */ + ns_t_ixfr = 251, /* Incremental zone transfer. */ + ns_t_axfr = 252, /* Transfer zone of authority. */ + ns_t_mailb = 253, /* Transfer mailbox records. */ + ns_t_maila = 254, /* Transfer mail agent records. */ + ns_t_any = 255, /* Wildcard match. */ + ns_t_zxfr = 256, /* BIND-specific, nonstandard. */ + ns_t_max = 65536 +} ns_type; + +/* Exclusively a QTYPE? (not also an RTYPE) */ +#define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \ + (t) == ns_t_mailb || (t) == ns_t_maila) +/* Some kind of meta-RR? (not a QTYPE, but also not an RTYPE) */ +#define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt) +/* Exclusively an RTYPE? (not also a QTYPE or a meta-RR) */ +#define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t)) +#define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr) +#define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \ + (t) == ns_t_zxfr) + +/* + * Values for class field + */ +typedef enum __ns_class { + ns_c_invalid = 0, /* Cookie. */ + ns_c_in = 1, /* Internet. */ + ns_c_2 = 2, /* unallocated/unsupported. */ + ns_c_chaos = 3, /* MIT Chaos-net. */ + ns_c_hs = 4, /* MIT Hesiod. */ + /* Query class values which do not appear in resource records */ + ns_c_none = 254, /* for prereq. sections in update requests */ + ns_c_any = 255, /* Wildcard match. */ + ns_c_max = 65536 +} ns_class; + +/* DNSSEC constants. */ + +typedef enum __ns_key_types { + ns_kt_rsa = 1, /* key type RSA/MD5 */ + ns_kt_dh = 2, /* Diffie Hellman */ + ns_kt_dsa = 3, /* Digital Signature Standard (MANDATORY) */ + ns_kt_private = 254 /* Private key type starts with OID */ +} ns_key_types; + +typedef enum __ns_cert_types { + cert_t_pkix = 1, /* PKIX (X.509v3) */ + cert_t_spki = 2, /* SPKI */ + cert_t_pgp = 3, /* PGP */ + cert_t_url = 253, /* URL private type */ + cert_t_oid = 254 /* OID private type */ +} ns_cert_types; + +/* Flags field of the KEY RR rdata. */ +#define NS_KEY_TYPEMASK 0xC000 /* Mask for "type" bits */ +#define NS_KEY_TYPE_AUTH_CONF 0x0000 /* Key usable for both */ +#define NS_KEY_TYPE_CONF_ONLY 0x8000 /* Key usable for confidentiality */ +#define NS_KEY_TYPE_AUTH_ONLY 0x4000 /* Key usable for authentication */ +#define NS_KEY_TYPE_NO_KEY 0xC000 /* No key usable for either; no key */ +/* The type bits can also be interpreted independently, as single bits: */ +#define NS_KEY_NO_AUTH 0x8000 /* Key unusable for authentication */ +#define NS_KEY_NO_CONF 0x4000 /* Key unusable for confidentiality */ +#define NS_KEY_RESERVED2 0x2000 /* Security is *mandatory* if bit=0 */ +#define NS_KEY_EXTENDED_FLAGS 0x1000 /* reserved - must be zero */ +#define NS_KEY_RESERVED4 0x0800 /* reserved - must be zero */ +#define NS_KEY_RESERVED5 0x0400 /* reserved - must be zero */ +#define NS_KEY_NAME_TYPE 0x0300 /* these bits determine the type */ +#define NS_KEY_NAME_USER 0x0000 /* key is assoc. with user */ +#define NS_KEY_NAME_ENTITY 0x0200 /* key is assoc. with entity eg host */ +#define NS_KEY_NAME_ZONE 0x0100 /* key is zone key */ +#define NS_KEY_NAME_RESERVED 0x0300 /* reserved meaning */ +#define NS_KEY_RESERVED8 0x0080 /* reserved - must be zero */ +#define NS_KEY_RESERVED9 0x0040 /* reserved - must be zero */ +#define NS_KEY_RESERVED10 0x0020 /* reserved - must be zero */ +#define NS_KEY_RESERVED11 0x0010 /* reserved - must be zero */ +#define NS_KEY_SIGNATORYMASK 0x000F /* key can sign RR's of same name */ +#define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \ + NS_KEY_RESERVED4 | \ + NS_KEY_RESERVED5 | \ + NS_KEY_RESERVED8 | \ + NS_KEY_RESERVED9 | \ + NS_KEY_RESERVED10 | \ + NS_KEY_RESERVED11 ) +#define NS_KEY_RESERVED_BITMASK2 0xFFFF /* no bits defined here */ + +/* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */ +#define NS_ALG_MD5RSA 1 /* MD5 with RSA */ +#define NS_ALG_DH 2 /* Diffie Hellman KEY */ +#define NS_ALG_DSA 3 /* DSA KEY */ +#define NS_ALG_DSS NS_ALG_DSA +#define NS_ALG_EXPIRE_ONLY 253 /* No alg, no security */ +#define NS_ALG_PRIVATE_OID 254 /* Key begins with OID giving alg */ + +/* Protocol values */ +/* value 0 is reserved */ +#define NS_KEY_PROT_TLS 1 +#define NS_KEY_PROT_EMAIL 2 +#define NS_KEY_PROT_DNSSEC 3 +#define NS_KEY_PROT_IPSEC 4 +#define NS_KEY_PROT_ANY 255 + +/* Signatures */ +#define NS_MD5RSA_MIN_BITS 512 /* Size of a mod or exp in bits */ +#define NS_MD5RSA_MAX_BITS 4096 + /* Total of binary mod and exp */ +#define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3) + /* Max length of text sig block */ +#define NS_MD5RSA_MAX_BASE64 (((NS_MD5RSA_MAX_BYTES+2)/3)*4) +#define NS_MD5RSA_MIN_SIZE ((NS_MD5RSA_MIN_BITS+7)/8) +#define NS_MD5RSA_MAX_SIZE ((NS_MD5RSA_MAX_BITS+7)/8) + +#define NS_DSA_SIG_SIZE 41 +#define NS_DSA_MIN_SIZE 213 +#define NS_DSA_MAX_BYTES 405 + +/* Offsets into SIG record rdata to find various values */ +#define NS_SIG_TYPE 0 /* Type flags */ +#define NS_SIG_ALG 2 /* Algorithm */ +#define NS_SIG_LABELS 3 /* How many labels in name */ +#define NS_SIG_OTTL 4 /* Original TTL */ +#define NS_SIG_EXPIR 8 /* Expiration time */ +#define NS_SIG_SIGNED 12 /* Signature time */ +#define NS_SIG_FOOT 16 /* Key footprint */ +#define NS_SIG_SIGNER 18 /* Domain name of who signed it */ + +/* How RR types are represented as bit-flags in NXT records */ +#define NS_NXT_BITS 8 +#define NS_NXT_BIT_SET( n,p) (p[(n)/NS_NXT_BITS] |= (0x80>>((n)%NS_NXT_BITS))) +#define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS))) +#define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] & (0x80>>((n)%NS_NXT_BITS))) +#define NS_NXT_MAX 127 + +/* + * EDNS0 extended flags, host order. + */ +#define NS_OPT_DNSSEC_OK 0x8000U + +/* + * Inline versions of get/put short/long. Pointer is advanced. + */ +#define NS_GET16(s, cp) do { \ + const u_char *t_cp = (const u_char *)(cp); \ + (s) = ((uint16_t)t_cp[0] << 8) \ + | ((uint16_t)t_cp[1]) \ + ; \ + (cp) += NS_INT16SZ; \ +} while (/*CONSTCOND*/0) + +#define NS_GET32(l, cp) do { \ + const u_char *t_cp = (const u_char *)(cp); \ + (l) = ((uint32_t)t_cp[0] << 24) \ + | ((uint32_t)t_cp[1] << 16) \ + | ((uint32_t)t_cp[2] << 8) \ + | ((uint32_t)t_cp[3]) \ + ; \ + (cp) += NS_INT32SZ; \ +} while (/*CONSTCOND*/0) + +#define NS_PUT16(s, cp) do { \ + uint32_t t_s = (uint32_t)(s); \ + u_char *t_cp = (u_char *)(cp); \ + *t_cp++ = t_s >> 8; \ + *t_cp = t_s; \ + (cp) += NS_INT16SZ; \ +} while (/*CONSTCOND*/0) + +#define NS_PUT32(l, cp) do { \ + uint32_t t_l = (uint32_t)(l); \ + u_char *t_cp = (u_char *)(cp); \ + *t_cp++ = t_l >> 24; \ + *t_cp++ = t_l >> 16; \ + *t_cp++ = t_l >> 8; \ + *t_cp = t_l; \ + (cp) += NS_INT32SZ; \ +} while (/*CONSTCOND*/0) + +/* + * ANSI C identifier hiding for bind's lib/nameser. + */ +#define ns_msg_getflag __ns_msg_getflag +#define ns_get16 __ns_get16 +#define ns_get32 __ns_get32 +#define ns_put16 __ns_put16 +#define ns_put32 __ns_put32 +#define ns_initparse __ns_initparse +#define ns_skiprr __ns_skiprr +#define ns_parserr __ns_parserr +#define ns_sprintrr __ns_sprintrr +#define ns_sprintrrf __ns_sprintrrf +#define ns_format_ttl __ns_format_ttl +#define ns_parse_ttl __ns_parse_ttl +#define ns_datetosecs __ns_datetosecs +#define ns_name_ntol __ns_name_ntol +#define ns_name_ntop __ns_name_ntop +#define ns_name_pton __ns_name_pton +#define ns_name_unpack __ns_name_unpack +#define ns_name_pack __ns_name_pack +#define ns_name_compress __ns_name_compress +#define ns_name_uncompress __ns_name_uncompress +#define ns_name_skip __ns_name_skip +#define ns_name_rollback __ns_name_rollback +#define ns_sign __ns_sign +#define ns_sign2 __ns_sign2 +#define ns_sign_tcp __ns_sign_tcp +#define ns_sign_tcp2 __ns_sign_tcp2 +#define ns_sign_tcp_init __ns_sign_tcp_init +#define ns_find_tsig __ns_find_tsig +#define ns_verify __ns_verify +#define ns_verify_tcp __ns_verify_tcp +#define ns_verify_tcp_init __ns_verify_tcp_init +#define ns_samedomain __ns_samedomain +#define ns_subdomain __ns_subdomain +#define ns_makecanon __ns_makecanon +#define ns_samename __ns_samename + +__BEGIN_DECLS +int ns_msg_getflag(ns_msg, int); +uint16_t ns_get16(const u_char *); +uint32_t ns_get32(const u_char *); +void ns_put16(uint16_t, u_char *); +void ns_put32(uint32_t, u_char *); +int ns_initparse(const u_char *, int, ns_msg *); +int ns_skiprr(const u_char *, const u_char *, ns_sect, int); +int ns_parserr(ns_msg *, ns_sect, int, ns_rr *); +int ns_sprintrr(const ns_msg *, const ns_rr *, + const char *, const char *, char *, size_t); +int ns_sprintrrf(const u_char *, size_t, const char *, + ns_class, ns_type, u_long, const u_char *, + size_t, const char *, const char *, + char *, size_t); +int ns_format_ttl(u_long, char *, size_t); +int ns_parse_ttl(const char *, u_long *); +uint32_t ns_datetosecs(const char *cp, int *errp); +int ns_name_ntol(const u_char *, u_char *, size_t); +int ns_name_ntop(const u_char *, char *, size_t); +int ns_name_pton(const char *, u_char *, size_t); +int ns_name_unpack(const u_char *, const u_char *, + const u_char *, u_char *, size_t); +int ns_name_pack(const u_char *, u_char *, int, + const u_char **, const u_char **); +int ns_name_uncompress(const u_char *, const u_char *, + const u_char *, char *, size_t); +int ns_name_compress(const char *, u_char *, size_t, + const u_char **, const u_char **); +int ns_name_skip(const u_char **, const u_char *); +void ns_name_rollback(const u_char *, const u_char **, + const u_char **); +int ns_sign(u_char *, int *, int, int, void *, + const u_char *, int, u_char *, int *, time_t); +int ns_sign2(u_char *, int *, int, int, void *, + const u_char *, int, u_char *, int *, time_t, + u_char **, u_char **); +int ns_sign_tcp(u_char *, int *, int, int, + ns_tcp_tsig_state *, int); +int ns_sign_tcp2(u_char *, int *, int, int, + ns_tcp_tsig_state *, int, + u_char **, u_char **); +int ns_sign_tcp_init(void *, const u_char *, int, + ns_tcp_tsig_state *); +u_char *ns_find_tsig(u_char *, u_char *); +int ns_verify(u_char *, int *, void *, + const u_char *, int, u_char *, int *, + time_t *, int); +int ns_verify_tcp(u_char *, int *, ns_tcp_tsig_state *, int); +int ns_verify_tcp_init(void *, const u_char *, int, + ns_tcp_tsig_state *); +int ns_samedomain(const char *, const char *); +int ns_subdomain(const char *, const char *); +int ns_makecanon(const char *, char *, size_t); +int ns_samename(const char *, const char *); +__END_DECLS + +#ifdef BIND_4_COMPAT +#include "nameser_compat.h" +#endif + +#endif /* !_ARPA_NAMESER_H_ */ diff --git a/nameser_compat.h b/nameser_compat.h new file mode 100644 index 0000000..f2bdefd --- /dev/null +++ b/nameser_compat.h @@ -0,0 +1,236 @@ +/* $NetBSD: nameser_compat.h,v 1.1.1.2 2004/11/07 01:28:27 christos Exp $ */ + +/* Copyright (c) 1983, 1989 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * from nameser.h 8.1 (Berkeley) 6/2/93 + * Id: nameser_compat.h,v 1.1.2.3.4.2 2004/07/01 04:43:41 marka Exp + */ + +#ifndef _ARPA_NAMESER_COMPAT_ +#define _ARPA_NAMESER_COMPAT_ + +#define __BIND 19950621 /* (DEAD) interface version stamp. */ + +#include + +#ifndef BYTE_ORDER +#if (BSD >= 199103) +# include +#else +#ifdef __linux +# include +#else +#define LITTLE_ENDIAN 1234 /* least-significant byte first (vax, pc) */ +#define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */ +#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long (pdp)*/ + +#if defined(vax) || defined(ns32000) || defined(sun386) || defined(i386) || \ + defined(MIPSEL) || defined(_MIPSEL) || defined(BIT_ZERO_ON_RIGHT) || \ + defined(__alpha__) || defined(__alpha) || \ + (defined(__Lynx__) && defined(__x86__)) +#define BYTE_ORDER LITTLE_ENDIAN +#endif + +#if defined(sel) || defined(pyr) || defined(mc68000) || defined(sparc) || \ + defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \ + defined(MIPSEB) || defined(_MIPSEB) || defined(_IBMR2) || defined(DGUX) ||\ + defined(apollo) || defined(__convex__) || defined(_CRAY) || \ + defined(__hppa) || defined(__hp9000) || \ + defined(__hp9000s300) || defined(__hp9000s700) || \ + defined(__hp3000s900) || defined(__hpux) || defined(MPE) || \ + defined (BIT_ZERO_ON_LEFT) || defined(m68k) || defined(__sparc) || \ + (defined(__Lynx__) && \ + (defined(__68k__) || defined(__sparc__) || defined(__powerpc__))) +#define BYTE_ORDER BIG_ENDIAN +#endif +#endif /* __linux */ +#endif /* BSD */ +#endif /* BYTE_ORDER */ + +#if !defined(BYTE_ORDER) || \ + (BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN && \ + BYTE_ORDER != PDP_ENDIAN) + /* you must determine what the correct bit order is for + * your compiler - the next line is an intentional error + * which will force your compiles to bomb until you fix + * the above macros. + */ + #error "Undefined or invalid BYTE_ORDER"; +#endif + +/* + * Structure for query header. The order of the fields is machine- and + * compiler-dependent, depending on the byte/bit order and the layout + * of bit fields. We use bit fields only in int variables, as this + * is all ANSI requires. This requires a somewhat confusing rearrangement. + */ + +typedef struct { + unsigned id :16; /* query identification number */ +#if BYTE_ORDER == BIG_ENDIAN + /* fields in third byte */ + unsigned qr: 1; /* response flag */ + unsigned opcode: 4; /* purpose of message */ + unsigned aa: 1; /* authoritive answer */ + unsigned tc: 1; /* truncated message */ + unsigned rd: 1; /* recursion desired */ + /* fields in fourth byte */ + unsigned ra: 1; /* recursion available */ + unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */ + unsigned ad: 1; /* authentic data from named */ + unsigned cd: 1; /* checking disabled by resolver */ + unsigned rcode :4; /* response code */ +#endif +#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN + /* fields in third byte */ + unsigned rd :1; /* recursion desired */ + unsigned tc :1; /* truncated message */ + unsigned aa :1; /* authoritive answer */ + unsigned opcode :4; /* purpose of message */ + unsigned qr :1; /* response flag */ + /* fields in fourth byte */ + unsigned rcode :4; /* response code */ + unsigned cd: 1; /* checking disabled by resolver */ + unsigned ad: 1; /* authentic data from named */ + unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */ + unsigned ra :1; /* recursion available */ +#endif + /* remaining bytes */ + unsigned qdcount :16; /* number of question entries */ + unsigned ancount :16; /* number of answer entries */ + unsigned nscount :16; /* number of authority entries */ + unsigned arcount :16; /* number of resource entries */ +} HEADER; + +#define PACKETSZ NS_PACKETSZ +#define MAXDNAME NS_MAXDNAME +#define MAXCDNAME NS_MAXCDNAME +#define MAXLABEL NS_MAXLABEL +#define HFIXEDSZ NS_HFIXEDSZ +#define QFIXEDSZ NS_QFIXEDSZ +#define RRFIXEDSZ NS_RRFIXEDSZ +#define INT32SZ NS_INT32SZ +#define INT16SZ NS_INT16SZ +#define INT8SZ NS_INT8SZ +#define INADDRSZ NS_INADDRSZ +#define IN6ADDRSZ NS_IN6ADDRSZ +#define INDIR_MASK NS_CMPRSFLGS +#define NAMESERVER_PORT NS_DEFAULTPORT + +#define S_ZONE ns_s_zn +#define S_PREREQ ns_s_pr +#define S_UPDATE ns_s_ud +#define S_ADDT ns_s_ar + +#define QUERY ns_o_query +#define IQUERY ns_o_iquery +#define STATUS ns_o_status +#define NS_NOTIFY_OP ns_o_notify +#define NS_UPDATE_OP ns_o_update + +#define NOERROR ns_r_noerror +#define FORMERR ns_r_formerr +#define SERVFAIL ns_r_servfail +#define NXDOMAIN ns_r_nxdomain +#define NOTIMP ns_r_notimpl +#define REFUSED ns_r_refused +#define YXDOMAIN ns_r_yxdomain +#define YXRRSET ns_r_yxrrset +#define NXRRSET ns_r_nxrrset +#define NOTAUTH ns_r_notauth +#define NOTZONE ns_r_notzone +/*#define BADSIG ns_r_badsig*/ +/*#define BADKEY ns_r_badkey*/ +/*#define BADTIME ns_r_badtime*/ + + +#define DELETE ns_uop_delete +#define ADD ns_uop_add + +#define T_A ns_t_a +#define T_NS ns_t_ns +#define T_MD ns_t_md +#define T_MF ns_t_mf +#define T_CNAME ns_t_cname +#define T_SOA ns_t_soa +#define T_MB ns_t_mb +#define T_MG ns_t_mg +#define T_MR ns_t_mr +#define T_NULL ns_t_null +#define T_WKS ns_t_wks +#define T_PTR ns_t_ptr +#define T_HINFO ns_t_hinfo +#define T_MINFO ns_t_minfo +#define T_MX ns_t_mx +#define T_TXT ns_t_txt +#define T_RP ns_t_rp +#define T_AFSDB ns_t_afsdb +#define T_X25 ns_t_x25 +#define T_ISDN ns_t_isdn +#define T_RT ns_t_rt +#define T_NSAP ns_t_nsap +#define T_NSAP_PTR ns_t_nsap_ptr +#define T_SIG ns_t_sig +#define T_KEY ns_t_key +#define T_PX ns_t_px +#define T_GPOS ns_t_gpos +#define T_AAAA ns_t_aaaa +#define T_LOC ns_t_loc +#define T_NXT ns_t_nxt +#define T_EID ns_t_eid +#define T_NIMLOC ns_t_nimloc +#define T_SRV ns_t_srv +#define T_ATMA ns_t_atma +#define T_NAPTR ns_t_naptr +#define T_A6 ns_t_a6 +#define T_TSIG ns_t_tsig +#define T_IXFR ns_t_ixfr +#define T_AXFR ns_t_axfr +#define T_MAILB ns_t_mailb +#define T_MAILA ns_t_maila +#define T_ANY ns_t_any + +#define C_IN ns_c_in +#define C_CHAOS ns_c_chaos +#define C_HS ns_c_hs +/* BIND_UPDATE */ +#define C_NONE ns_c_none +#define C_ANY ns_c_any + +#define GETSHORT NS_GET16 +#define GETLONG NS_GET32 +#define PUTSHORT NS_PUT16 +#define PUTLONG NS_PUT32 + +#endif /* _ARPA_NAMESER_COMPAT_ */ diff --git a/network.c b/network.c new file mode 100644 index 0000000..69cdcbe --- /dev/null +++ b/network.c @@ -0,0 +1,675 @@ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef USE_MSRPC + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include +#ifndef _WIN32 +#include +#include +#include +#include +#include +#endif // WIN32 + +#include "network.h" +#include "endian.h" +#include "output.h" +#include "helpers.h" +#include "shared_globals.h" +#include "rpc.h" + + +#ifndef _WIN32 +typedef ssize_t (*sendrecv_t)(int, void*, size_t, int); +#else +typedef int (WINAPI *sendrecv_t)(SOCKET, void*, int, int); +#endif + + +// Send or receive a fixed number of bytes regardless if received in one or more chunks +int_fast8_t sendrecv(SOCKET sock, BYTE *data, int len, int_fast8_t do_send) +{ + int n; + sendrecv_t f = do_send + ? (sendrecv_t) send + : (sendrecv_t) recv; + + do + { + n = f(sock, data, len, 0); + } + while ( + ( n < 0 && socket_errno == VLMCSD_EINTR ) || ( n > 0 && ( data += n, (len -= n) > 0 ) )); + + return ! len; +} + + +static int_fast8_t ip2str(char *restrict result, const size_t resultLength, const struct sockaddr *const restrict socketAddress, const socklen_t socketLength) +{ + static const char *const fIPv4 = "%s:%s"; + static const char *const fIPv6 = "[%s]:%s"; + char ipAddress[64], portNumber[8]; + + if (getnameinfo + ( + socketAddress, + socketLength, + ipAddress, + sizeof(ipAddress), + portNumber, + sizeof(portNumber), + NI_NUMERICHOST | NI_NUMERICSERV + )) + { + return FALSE; + } + + if ((unsigned int)snprintf(result, resultLength, socketAddress->sa_family == AF_INET6 ? fIPv6 : fIPv4, ipAddress, portNumber) > resultLength) return FALSE; + return TRUE; +} + + +static int_fast8_t getSocketList(struct addrinfo **saList, const char *const addr, const int flags, const int AddressFamily) +{ + int status; + char *szHost, *szPort; + size_t len = strlen(addr) + 1; + + // Don't alloca too much + if (len > 264) return FALSE; + + char *addrcopy = (char*)alloca(len); + memcpy(addrcopy, addr, len); + + parseAddress(addrcopy, &szHost, &szPort); + + struct addrinfo hints; + + memset(&hints, 0, sizeof(struct addrinfo)); + + hints.ai_family = AddressFamily; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + hints.ai_flags = flags; + + if ((status = getaddrinfo(szHost, szPort, &hints, saList))) + { + printerrorf("Warning: %s: %s\n", addr, gai_strerror(status)); + return FALSE; + } + + return TRUE; +} + + +static int_fast8_t setBlockingEnabled(SOCKET fd, int_fast8_t blocking) +{ + if (fd == INVALID_SOCKET) return FALSE; + + #ifdef _WIN32 + + unsigned long mode = blocking ? 0 : 1; + return (ioctlsocket(fd, FIONBIO, &mode) == 0) ? TRUE : FALSE; + + #else // POSIX + + int flags = fcntl(fd, F_GETFL, 0); + + if (flags < 0) return FALSE; + + flags = blocking ? (flags & ~O_NONBLOCK) : (flags | O_NONBLOCK); + return (fcntl(fd, F_SETFL, flags) == 0) ? TRUE : FALSE; + + #endif // POSIX +} + + +int_fast8_t isDisconnected(const SOCKET s) +{ + char buffer[1]; + + if (!setBlockingEnabled(s, FALSE)) return TRUE; + + int n = recv(s, buffer, 1, MSG_PEEK); + + if (!setBlockingEnabled(s, TRUE)) return TRUE; + if (n == 0) return TRUE; + + return FALSE; +} + + +// Connect to TCP address addr (e.g. "kms.example.com:1688") and return an +// open socket for the connection if successful or INVALID_SOCKET otherwise +SOCKET connectToAddress(const char *const addr, const int AddressFamily, int_fast8_t showHostName) +{ + struct addrinfo *saList, *sa; + SOCKET s = INVALID_SOCKET; + char szAddr[128]; + + if (!getSocketList(&saList, addr, 0, AddressFamily)) return INVALID_SOCKET; + + for (sa = saList; sa; sa = sa->ai_next) + { + // struct sockaddr_in* addr4 = (struct sockaddr_in*)sa->ai_addr; + // struct sockaddr_in6* addr6 = (struct sockaddr_in6*)sa->ai_addr; + + if (ip2str(szAddr, sizeof(szAddr), sa->ai_addr, sa->ai_addrlen)) + { + if (showHostName) + printf("Connecting to %s (%s) ... ", addr, szAddr); + else + printf("Connecting to %s ... ", szAddr); + + fflush(stdout); + } + + s = socket(sa->ai_family, SOCK_STREAM, IPPROTO_TCP); + +# if !defined(NO_TIMEOUT) && !__minix__ +# ifndef _WIN32 // Standard Posix timeout structure + + struct timeval to; + to.tv_sec = 10; + to.tv_usec = 0; + +# else // Windows requires a DWORD with milliseconds + + DWORD to = 10000; + +# endif // _WIN32 + + setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (sockopt_t)&to, sizeof(to)); + setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, (sockopt_t)&to, sizeof(to)); +# endif // !defined(NO_TIMEOUT) && !__minix__ + + if (!connect(s, sa->ai_addr, sa->ai_addrlen)) + { + printf("successful\n"); + break; + } + + errorout("%s\n", socket_errno == VLMCSD_EINPROGRESS ? "Timed out" : vlmcsd_strerror(socket_errno)); + + socketclose(s); + s = INVALID_SOCKET; + } + + freeaddrinfo(saList); + return s; +} + + +#ifndef NO_SOCKETS + +// Create a Listening socket for addrinfo sa and return socket s +// szHost and szPort are for logging only +static int listenOnAddress(const struct addrinfo *const ai, SOCKET *s) +{ + int error; + char ipstr[64]; + + ip2str(ipstr, sizeof(ipstr), ai->ai_addr, ai->ai_addrlen); + + //*s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); + *s = socket(ai->ai_family, SOCK_STREAM, IPPROTO_TCP); + + if (*s == INVALID_SOCKET) + { + error = socket_errno; + printerrorf("Warning: %s error. %s\n", ai->ai_family == AF_INET6 ? cIPv6 : cIPv4, vlmcsd_strerror(error)); + return error; + } + +# if !defined(_WIN32) && !defined(NO_SIGHUP) + + int flags = fcntl(*s, F_GETFD, 0); + + if (flags != -1) + { + flags |= FD_CLOEXEC; + fcntl(*s, F_SETFD, flags); + } +# ifdef _PEDANTIC + else + { + printerrorf("Warning: Could not set FD_CLOEXEC flag on %s: %s\n", ipstr, vlmcsd_strerror(errno)); + } +# endif // _PEDANTIC + +# endif // !defined(_WIN32) && !defined(NO_SIGHUP) + + BOOL socketOption = TRUE; + + // fix for lame tomato toolchain +# ifndef IPV6_V6ONLY +# ifdef __linux__ +# define IPV6_V6ONLY (26) +# endif // __linux__ +# endif // IPV6_V6ONLY + +# ifdef IPV6_V6ONLY + if (ai->ai_family == AF_INET6) setsockopt(*s, IPPROTO_IPV6, IPV6_V6ONLY, (sockopt_t)&socketOption, sizeof(socketOption)); +# endif + +# ifndef _WIN32 + setsockopt(*s, SOL_SOCKET, SO_REUSEADDR, (sockopt_t)&socketOption, sizeof(socketOption)); +# endif + + if (bind(*s, ai->ai_addr, ai->ai_addrlen) || listen(*s, SOMAXCONN)) + { + error = socket_errno; + printerrorf("Warning: %s: %s\n", ipstr, vlmcsd_strerror(error)); + socketclose(*s); + return error; + } + +# ifndef NO_LOG + logger("Listening on %s\n", ipstr); +# endif + + return 0; +} + + +// Adds a listening socket for an address string, +// e.g. 127.0.0.1:1688 or [2001:db8:dead:beef::1]:1688 +BOOL addListeningSocket(const char *const addr) +{ + struct addrinfo *aiList, *ai; + int result = FALSE; + SOCKET *s = SocketList + numsockets; + + if (getSocketList(&aiList, addr, AI_PASSIVE | AI_NUMERICHOST, AF_UNSPEC)) + { + for (ai = aiList; ai; ai = ai->ai_next) + { + // struct sockaddr_in* addr4 = (struct sockaddr_in*)sa->ai_addr; + // struct sockaddr_in6* addr6 = (struct sockaddr_in6*)sa->ai_addr; + + if (numsockets >= FD_SETSIZE) + { + #ifdef _PEDANTIC // Do not report this error in normal builds to keep file size low + printerrorf("Warning: Cannot listen on %s. Your OS only supports %u listening sockets in an FD_SET.\n", addr, FD_SETSIZE); + #endif + break; + } + + if (!listenOnAddress(ai, s)) + { + numsockets++; + result = TRUE; + } + } + + freeaddrinfo(aiList); + } + return result; +} + + +// Just create some dummy sockets to see if we have a specific protocol (IPv4 or IPv6) +__pure int_fast8_t checkProtocolStack(const int addressfamily) +{ + SOCKET s; // = INVALID_SOCKET; + + s = socket(addressfamily, SOCK_STREAM, 0); + int_fast8_t success = (s != INVALID_SOCKET); + + socketclose(s); + return success; +} + + +// Build an fd_set of all listening socket then use select to wait for an incoming connection +static SOCKET network_accept_any() +{ + fd_set ListeningSocketsList; + SOCKET maxSocket, sock; + int i; + int status; + + FD_ZERO(&ListeningSocketsList); + maxSocket = 0; + + for (i = 0; i < numsockets; i++) + { + FD_SET(SocketList[i], &ListeningSocketsList); + if (SocketList[i] > maxSocket) maxSocket = SocketList[i]; + } + + status = select(maxSocket + 1, &ListeningSocketsList, NULL, NULL, NULL); + + if (status < 0) return INVALID_SOCKET; + + sock = INVALID_SOCKET; + + for (i = 0; i < numsockets; i++) + { + if (FD_ISSET(SocketList[i], &ListeningSocketsList)) + { + sock = SocketList[i]; + break; + } + } + + if (sock == INVALID_SOCKET) + return INVALID_SOCKET; + else + return accept(sock, NULL, NULL); +} + + +void closeAllListeningSockets() +{ + int i; + + for (i = 0; i < numsockets; i++) + { + shutdown(SocketList[i], VLMCSD_SHUT_RDWR); + socketclose(SocketList[i]); + } +} +#endif // NO_SOCKETS + + +static void serveClient(const SOCKET s_client, const DWORD RpcAssocGroup) +{ +# if !defined(NO_TIMEOUT) && !__minix__ + +# ifndef _WIN32 // Standard Posix timeout structure + + struct timeval to; + to.tv_sec = ServerTimeout; + to.tv_usec = 0; + + #else // Windows requires a DWORD with milliseconds + + DWORD to = ServerTimeout * 1000; + +# endif // _WIN32 + +# if !defined(NO_LOG) && defined(_PEDANTIC) + + int result = + setsockopt(s_client, SOL_SOCKET, SO_RCVTIMEO, (sockopt_t)&to, sizeof(to)) || + setsockopt(s_client, SOL_SOCKET, SO_SNDTIMEO, (sockopt_t)&to, sizeof(to)); + + if (result) logger("Warning: Set timeout failed: %s\n", vlmcsd_strerror(socket_errno)); + +# else // !(!defined(NO_LOG) && defined(_PEDANTIC)) + + setsockopt(s_client, SOL_SOCKET, SO_RCVTIMEO, (sockopt_t)&to, sizeof(to)); + setsockopt(s_client, SOL_SOCKET, SO_SNDTIMEO, (sockopt_t)&to, sizeof(to)); + +# endif // !(!defined(NO_LOG) && defined(_PEDANTIC)) + +# endif // !defined(NO_TIMEOUT) && !__minix__ + + char ipstr[64]; + socklen_t len; + struct sockaddr_storage addr; + + len = sizeof addr; + + if (getpeername(s_client, (struct sockaddr*)&addr, &len) || + !ip2str(ipstr, sizeof(ipstr), (struct sockaddr*)&addr, len)) + { +# if !defined(NO_LOG) && defined(_PEDANTIC) + logger("Fatal: Cannot determine client's IP address: %s\n", vlmcsd_strerror(errno)); +# endif // !defined(NO_LOG) && defined(_PEDANTIC) + socketclose(s_client); + return; + } + + +# ifndef NO_LOG + const char *const connection_type = addr.ss_family == AF_INET6 ? cIPv6 : cIPv4; + static const char *const cAccepted = "accepted"; + static const char *const cClosed = "closed"; + static const char *const fIP = "%s connection %s: %s.\n"; + + logger(fIP, connection_type, cAccepted, ipstr); + #endif // NO_LOG + + rpcServer(s_client, RpcAssocGroup, ipstr); + +# ifndef NO_LOG + logger(fIP, connection_type, cClosed, ipstr); +# endif // NO_LOG + + socketclose(s_client); +} + + +#ifndef NO_SOCKETS +static void post_sem(void) +{ + #if !defined(NO_LIMIT) && !__minix__ + if (!InetdMode && MaxTasks != SEM_VALUE_MAX) + { + semaphore_post(Semaphore); + } + #endif // !defined(NO_LIMIT) && !__minix__ +} + + +static void wait_sem(void) +{ + #if !defined(NO_LIMIT) && !__minix__ + if (!InetdMode && MaxTasks != SEM_VALUE_MAX) + { + semaphore_wait(Semaphore); + } + #endif // !defined(NO_LIMIT) && !__minix__ +} +#endif // NO_SOCKETS + +#if defined(USE_THREADS) && !defined(NO_SOCKETS) + +#if defined(_WIN32) || defined(__CYGWIN__) // Win32 Threads +static DWORD WINAPI serveClientThreadProc(PCLDATA clData) +#else // Posix threads +static void *serveClientThreadProc (PCLDATA clData) +#endif // Thread proc is identical in WIN32 and Posix threads +{ + serveClient(clData->socket, clData->RpcAssocGroup); + free(clData); + post_sem(); + + return 0; +} + +#endif // USE_THREADS + + +#ifndef NO_SOCKETS + +#if defined(USE_THREADS) && (defined(_WIN32) || defined(__CYGWIN__)) // Windows Threads +static int serveClientAsyncWinThreads(const PCLDATA thr_CLData) +{ + wait_sem(); + + HANDLE h = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)serveClientThreadProc, thr_CLData, 0, NULL); + + if (h) + CloseHandle(h); + else + { + socketclose(thr_CLData->socket); + free(thr_CLData); + post_sem(); + return GetLastError(); + } + + return NO_ERROR; +} +#endif // defined(USE_THREADS) && defined(_WIN32) // Windows Threads + + +#if defined(USE_THREADS) && !defined(_WIN32) && !defined(__CYGWIN__) // Posix Threads +static int ServeClientAsyncPosixThreads(const PCLDATA thr_CLData) +{ + pthread_t p_thr; + pthread_attr_t attr; + + wait_sem(); + + // Must set detached state to avoid memory leak + if (pthread_attr_init(&attr) || + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) || + pthread_create(&p_thr, &attr, (void * (*)(void *))serveClientThreadProc, thr_CLData)) + { + socketclose(thr_CLData->socket); + free(thr_CLData); + post_sem(); + return !0; + } + + return 0; +} +#endif // defined(USE_THREADS) && !defined(_WIN32) // Posix Threads + +#ifndef USE_THREADS // fork() implementation +static void ChildSignalHandler(const int signal) +{ + if (signal == SIGHUP) return; + + post_sem(); + + #ifndef NO_LOG + logger("Warning: Child killed/crashed by %s\n", strsignal(signal)); + #endif // NO_LOG + + exit(!0); +} + +static int ServeClientAsyncFork(const SOCKET s_client, const DWORD RpcAssocGroup) +{ + int pid; + wait_sem(); + + if ((pid = fork()) < 0) + { + return errno; + } + else if ( pid ) + { + // Parent process + socketclose(s_client); + return 0; + } + else + { + // Child process + + // Setup a Child Handler for most common termination signals + struct sigaction sa; + + sa.sa_flags = 0; + sa.sa_handler = ChildSignalHandler; + + static int signallist[] = { SIGHUP, SIGINT, SIGTERM, SIGSEGV, SIGILL, SIGFPE, SIGBUS }; + + if (!sigemptyset(&sa.sa_mask)) + { + uint_fast8_t i; + + for (i = 0; i < _countof(signallist); i++) + { + sigaction(signallist[i], &sa, NULL); + } + } + + serveClient(s_client, RpcAssocGroup); + post_sem(); + exit(0); + } +} +#endif + + +int serveClientAsync(const SOCKET s_client, const DWORD RpcAssocGroup) +{ + #ifndef USE_THREADS // fork() implementation + + return ServeClientAsyncFork(s_client, RpcAssocGroup); + + #else // threads implementation + + PCLDATA thr_CLData = (PCLDATA)vlmcsd_malloc(sizeof(CLDATA)); + thr_CLData->socket = s_client; + thr_CLData->RpcAssocGroup = RpcAssocGroup; + + #if defined(_WIN32) || defined (__CYGWIN__) // Windows threads + + return serveClientAsyncWinThreads(thr_CLData); + + #else // Posix Threads + + return ServeClientAsyncPosixThreads(thr_CLData); + + #endif // Posix Threads + + #endif // USE_THREADS +} + +#endif // NO_SOCKETS + + +int runServer() +{ + DWORD RpcAssocGroup = rand32(); + + // If compiled for inetd-only mode just serve the stdin socket + #ifdef NO_SOCKETS + serveClient(STDIN_FILENO, RpcAssocGroup); + return 0; + #else + // In inetd mode just handle the stdin socket + if (InetdMode) + { + serveClient(STDIN_FILENO, RpcAssocGroup); + return 0; + } + + // Standalone mode + for (;;) + { + int error; + SOCKET s_client; + + if ( (s_client = network_accept_any()) == INVALID_SOCKET ) + { + error = socket_errno; + + if (error == VLMCSD_EINTR || error == VLMCSD_ECONNABORTED) continue; + + #ifdef _NTSERVICE + if (ServiceShutdown) return 0; + #endif + + #ifndef NO_LOG + logger("Fatal: %s\n",vlmcsd_strerror(error)); + #endif + + return error; + } + + RpcAssocGroup++; + serveClientAsync(s_client, RpcAssocGroup); + } + #endif // NO_SOCKETS + + return 0; +} + +#endif // USE_MSRPC diff --git a/network.h b/network.h new file mode 100644 index 0000000..7c56038 --- /dev/null +++ b/network.h @@ -0,0 +1,34 @@ +#ifndef INCLUDED_NETWORK_H +#define INCLUDED_NETWORK_H + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include "types.h" + + + +int_fast8_t sendrecv(SOCKET sock, BYTE *data, int len, int_fast8_t do_send); + +#define _recv(s, d, l) sendrecv(s, (BYTE *)d, l, 0) +#define _send(s, d, l) sendrecv(s, (BYTE *)d, l, !0) + +#ifndef NO_SOCKETS + +void closeAllListeningSockets(); +BOOL addListeningSocket(const char *const addr); +__pure int_fast8_t checkProtocolStack(const int addressfamily); + +#endif // NO_SOCKETS + +int runServer(); +SOCKET connectToAddress(const char *const addr, const int AddressFamily, int_fast8_t showHostName); +int_fast8_t isDisconnected(const SOCKET s); + +#endif // INCLUDED_NETWORK_H diff --git a/ns_name.c b/ns_name.c new file mode 100644 index 0000000..6bdff56 --- /dev/null +++ b/ns_name.c @@ -0,0 +1,355 @@ +/* + * Copyright (c) 1996,1999 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +/* + * Modified by Hotbird64 for use with vlmcs. + */ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifdef DNS_PARSER_INTERNAL +#ifndef NO_DNS + +#include +#include +#include +#include +#include +#include +#include + +#include "types.h" +#include "ns_name.h" + +#ifdef SPRINTF_CHAR +# define SPRINTF(x) strlen(sprintf/**/x) +#else +# define SPRINTF(x) ((size_t)sprintf x) +#endif + +#define NS_TYPE_ELT 0x40 /* EDNS0 extended label type */ +#define DNS_LABELTYPE_BITSTRING 0x41 + +#define NS_MAXCDNAME 255 +#define NS_CMPRSFLGS 0xc0 + +/* Data. */ + +static char digits[] = "0123456789"; + + +/* Forward. */ + +static int special_vlmcsd(int); +static int printable_vlmcsd(int); +static int labellen_vlmcsd(const uint8_t *); +static int decode_bitstring_vlmcsd(const char **, char *, const char *); + +/* + * ns_name_ntop(src, dst, dstsiz) + * Convert an encoded domain name to printable ascii as per RFC1035. + * return: + * Number of bytes written to buffer, or -1 (with errno set) + * notes: + * The root is returned as "." + * All other domains are returned in non absolute form + */ +static int +ns_name_ntop_vlmcsd(const uint8_t *src, char *dst, size_t dstsiz) +{ + const uint8_t *cp; + char *dn, *eom; + uint8_t c; + uint32_t n; + int l; + + cp = src; + dn = dst; + eom = dst + dstsiz; + + while ((n = *cp++) != 0) { + if ((n & NS_CMPRSFLGS) == NS_CMPRSFLGS) { + /* Some kind of compression pointer. */ + errno = EMSGSIZE; + return (-1); + } + if (dn != dst) { + if (dn >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = '.'; + } + if ((l = labellen_vlmcsd(cp - 1)) < 0) { + errno = EMSGSIZE; /* XXX */ + return(-1); + } + if (dn + l >= eom) { + errno = EMSGSIZE; + return (-1); + } + if ((n & NS_CMPRSFLGS) == NS_TYPE_ELT) { + int m; + + if (n != DNS_LABELTYPE_BITSTRING) { + /* XXX: labellen should reject this case */ + errno = EINVAL; + return(-1); + } + if ((m = decode_bitstring_vlmcsd((const char **)&cp, dn, eom)) < 0) + { + errno = EMSGSIZE; + return(-1); + } + dn += m; + continue; + } + for ((void)NULL; l > 0; l--) { + c = *cp++; + if (special_vlmcsd(c)) { + if (dn + 1 >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = '\\'; + *dn++ = (char)c; + } else if (!printable_vlmcsd(c)) { + if (dn + 3 >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = '\\'; + *dn++ = digits[c / 100]; + *dn++ = digits[(c % 100) / 10]; + *dn++ = digits[c % 10]; + } else { + if (dn >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = (char)c; + } + } + } + if (dn == dst) { + if (dn >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = '.'; + } + if (dn >= eom) { + errno = EMSGSIZE; + return (-1); + } + *dn++ = '\0'; + return (dn - dst); +} + +static int +ns_name_unpack_vlmcsd(const uint8_t *msg, const uint8_t *eom, const uint8_t *src, + uint8_t *dst, size_t dstsiz) +{ + const uint8_t *srcp, *dstlim; + uint8_t *dstp; + int n, len, checked, l; + + len = -1; + checked = 0; + dstp = dst; + srcp = src; + dstlim = dst + dstsiz; + if (srcp < msg || srcp >= eom) { + errno = EMSGSIZE; + return (-1); + } + /* Fetch next label in domain name. */ + while ((n = *srcp++) != 0) { + /* Check for indirection. */ + switch (n & NS_CMPRSFLGS) { + case 0: + case NS_TYPE_ELT: + /* Limit checks. */ + if ((l = labellen_vlmcsd(srcp - 1)) < 0) { + errno = EMSGSIZE; + return(-1); + } + if (dstp + l + 1 >= dstlim || srcp + l >= eom) { + errno = EMSGSIZE; + return (-1); + } + checked += l + 1; + *dstp++ = n; + memcpy(dstp, srcp, l); + dstp += l; + srcp += l; + break; + + case NS_CMPRSFLGS: + if (srcp >= eom) { + errno = EMSGSIZE; + return (-1); + } + if (len < 0) + len = srcp - src + 1; + srcp = msg + (((n & 0x3f) << 8) | (*srcp & 0xff)); + if (srcp < msg || srcp >= eom) { /* Out of range. */ + errno = EMSGSIZE; + return (-1); + } + checked += 2; + /* + * Check for loops in the compressed name; + * if we've looked at the whole message, + * there must be a loop. + */ + if (checked >= eom - msg) { + errno = EMSGSIZE; + return (-1); + } + break; + + default: + errno = EMSGSIZE; + return (-1); /* flag error */ + } + } + *dstp = '\0'; + if (len < 0) + len = srcp - src; + return (len); +} + + +/* + * ns_name_uncompress_vlmcsd(msg, eom, src, dst, dstsiz) + * Expand compressed domain name to presentation format. + * return: + * Number of bytes read out of `src', or -1 (with errno set). + * note: + * Root domain returns as "." not "". + */ +int +ns_name_uncompress_vlmcsd(const uint8_t *msg, const uint8_t *eom, const uint8_t *src, + char *dst, size_t dstsiz) +{ + uint8_t tmp[NS_MAXCDNAME]; + int n; + + if ((n = ns_name_unpack_vlmcsd(msg, eom, src, tmp, sizeof tmp)) == -1) + return (-1); + if (ns_name_ntop_vlmcsd(tmp, dst, dstsiz) == -1) + return (-1); + return (n); +} + +/* + * special(ch) + * Thinking in noninternationalized USASCII (per the DNS spec), + * is this characted special ("in need of quoting") ? + * return: + * boolean. + */ +static int +special_vlmcsd(int ch) { + switch (ch) { + case 0x22: /* '"' */ + case 0x2E: /* '.' */ + case 0x3B: /* ';' */ + case 0x5C: /* '\\' */ + case 0x28: /* '(' */ + case 0x29: /* ')' */ + /* Special modifiers in zone files. */ + case 0x40: /* '@' */ + case 0x24: /* '$' */ + return (1); + default: + return (0); + } +} + +/* + * printable(ch) + * Thinking in noninternationalized USASCII (per the DNS spec), + * is this character visible and not a space when printed ? + * return: + * boolean. + */ +static int +printable_vlmcsd(int ch) { + return (ch > 0x20 && ch < 0x7f); +} + +static int +decode_bitstring_vlmcsd(const char **cpp, char *dn, const char *eom) +{ + const char *cp = *cpp; + char *beg = dn, tc; + int b, blen, plen; + + if ((blen = (*cp & 0xff)) == 0) + blen = 256; + plen = (blen + 3) / 4; + plen += sizeof("\\[x/]") + (blen > 99 ? 3 : (blen > 9) ? 2 : 1); + if (dn + plen >= eom) + return(-1); + + cp++; + dn += SPRINTF((dn, "\\[x")); + for (b = blen; b > 7; b -= 8, cp++) + dn += SPRINTF((dn, "%02x", *cp & 0xff)); + if (b > 4) { + tc = *cp++; + dn += SPRINTF((dn, "%02x", tc & (0xff << (8 - b)))); + } else if (b > 0) { + tc = *cp++; + dn += SPRINTF((dn, "%1x", + ((tc >> 4) & 0x0f) & (0x0f << (4 - b)))); + } + dn += SPRINTF((dn, "/%d]", blen)); + + *cpp = cp; + return(dn - beg); +} + +static int +labellen_vlmcsd(const uint8_t *lp) +{ + int bitlen; + uint8_t l = *lp; + + if ((l & NS_CMPRSFLGS) == NS_CMPRSFLGS) { + /* should be avoided by the caller */ + return(-1); + } + + if ((l & NS_CMPRSFLGS) == NS_TYPE_ELT) { + if (l == DNS_LABELTYPE_BITSTRING) { + if ((bitlen = *(lp + 1)) == 0) + bitlen = 256; + return((bitlen + 7 ) / 8 + 1); + } + return(-1); /* unknwon ELT */ + } + return(l); +} + +#endif // !NO_DNS +#endif // DNS_PARSER_INTERNAL diff --git a/ns_name.h b/ns_name.h new file mode 100644 index 0000000..f9a839a --- /dev/null +++ b/ns_name.h @@ -0,0 +1,9 @@ + +#ifndef NS_NAME_H_ +#define NS_NAME_H_ + +int +ns_name_uncompress_vlmcsd(const uint8_t *msg, const uint8_t *eom, const uint8_t *src, + char *dst, size_t dstsiz); + +#endif /* NS_NAME_H_ */ diff --git a/ns_parse.c b/ns_parse.c new file mode 100644 index 0000000..b0874c1 --- /dev/null +++ b/ns_parse.c @@ -0,0 +1,206 @@ +/* + * Copyright (c) 1996,1999 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +/* + * Modified by Hotbird64 for use with vlmcs. + */ + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifdef DNS_PARSER_INTERNAL +#ifndef NO_DNS + +/* Import. */ + +#include +#include +#include + +#include "types.h" +#include "endian.h" +#include "ns_name.h" +#include "ns_parse.h" + +/* Macros. */ + +#define NS_GET16_VLMCSD(s, cp) do { \ + (s) = GET_UA16BE(cp); \ + (cp) += NS_INT16SZ; \ +} while (0) + +#define NS_GET32_VLMCSD(l, cp) do { \ + (l) = GET_UA32BE(cp); \ + (cp) += NS_INT32SZ; \ +} while (0) + +#define RETERR(err) do { errno = (err); return (-1); } while (0) + +/* Forward. */ + +static void setsection_vlmcsd(ns_msg_vlmcsd *msg, ns_sect_vlmcsd sect); + + +static int dn_skipname_vlmcsd(const unsigned char *s, const unsigned char *end) +{ + const unsigned char *p; + for (p=s; p=192) + {if (p+1 0; count--) { + int b, rdlength; + + b = dn_skipname_vlmcsd(ptr, eom); + if (b < 0) + RETERR(EMSGSIZE); + ptr += b/*Name*/ + NS_INT16SZ/*Type*/ + NS_INT16SZ/*Class*/; + if (section != ns_s_qd_vlmcsd) { + if (ptr + NS_INT32SZ + NS_INT16SZ > eom) + RETERR(EMSGSIZE); + ptr += NS_INT32SZ/*TTL*/; + NS_GET16_VLMCSD(rdlength, ptr); + ptr += rdlength/*RData*/; + } + } + if (ptr > eom) + RETERR(EMSGSIZE); + return (ptr - optr); +} + +int +ns_initparse_vlmcsd(const uint8_t *msg, int msglen, ns_msg_vlmcsd *handle) { + const uint8_t *eom = msg + msglen; + int i; + + memset(handle, 0x5e, sizeof *handle); + handle->_msg = msg; + handle->_eom = eom; + if (msg + NS_INT16SZ > eom) + RETERR(EMSGSIZE); + NS_GET16_VLMCSD(handle->_id, msg); + if (msg + NS_INT16SZ > eom) + RETERR(EMSGSIZE); + NS_GET16_VLMCSD(handle->_flags, msg); + for (i = 0; i < ns_s_max_vlmcsd; i++) { + if (msg + NS_INT16SZ > eom) + RETERR(EMSGSIZE); + NS_GET16_VLMCSD(handle->_counts[i], msg); + } + for (i = 0; i < ns_s_max_vlmcsd; i++) + if (handle->_counts[i] == 0) + handle->_sections[i] = NULL; + else { + int b = ns_skiprr_vlmcsd(msg, eom, (ns_sect_vlmcsd)i, + handle->_counts[i]); + + if (b < 0) + return (-1); + handle->_sections[i] = msg; + msg += b; + } + if (msg > eom) + RETERR(EMSGSIZE); + handle->_eom = msg; + setsection_vlmcsd(handle, ns_s_max_vlmcsd); + return (0); +} + +int +ns_parserr_vlmcsd(ns_msg_vlmcsd *handle, ns_sect_vlmcsd section, int rrnum, ns_rr_vlmcsd *rr) { + int b; + + /* Make section right. */ + if (section >= ns_s_max_vlmcsd) + RETERR(ENODEV); + if (section != handle->_sect) + setsection_vlmcsd(handle, section); + + /* Make rrnum right. */ + if (rrnum == -1) + rrnum = handle->_rrnum; + if (rrnum < 0 || rrnum >= handle->_counts[(int)section]) + RETERR(ENODEV); + if (rrnum < handle->_rrnum) + setsection_vlmcsd(handle, section); + if (rrnum > handle->_rrnum) { + b = ns_skiprr_vlmcsd(handle->_msg_ptr, handle->_eom, section, + rrnum - handle->_rrnum); + + if (b < 0) + return (-1); + handle->_msg_ptr += b; + handle->_rrnum = rrnum; + } + + /* Do the parse. */ + b = ns_name_uncompress_vlmcsd(handle->_msg, handle->_eom, + handle->_msg_ptr, rr->name, NS_MAXDNAME); + if (b < 0) + return (-1); + handle->_msg_ptr += b; + if (handle->_msg_ptr + NS_INT16SZ + NS_INT16SZ > handle->_eom) + RETERR(EMSGSIZE); + NS_GET16_VLMCSD(rr->type, handle->_msg_ptr); + NS_GET16_VLMCSD(rr->rr_class, handle->_msg_ptr); + if (section == ns_s_qd_vlmcsd) { + rr->ttl = 0; + rr->rdlength = 0; + rr->rdata = NULL; + } else { + if (handle->_msg_ptr + NS_INT32SZ + NS_INT16SZ > handle->_eom) + RETERR(EMSGSIZE); + NS_GET32_VLMCSD(rr->ttl, handle->_msg_ptr); + NS_GET16_VLMCSD(rr->rdlength, handle->_msg_ptr); + if (handle->_msg_ptr + rr->rdlength > handle->_eom) + RETERR(EMSGSIZE); + rr->rdata = handle->_msg_ptr; + handle->_msg_ptr += rr->rdlength; + } + if (++handle->_rrnum > handle->_counts[(int)section]) + setsection_vlmcsd(handle, (ns_sect_vlmcsd)((int)section + 1)); + + /* All done. */ + return (0); +} + +/* Private. */ + +static void +setsection_vlmcsd(ns_msg_vlmcsd *msg, ns_sect_vlmcsd sect) { + msg->_sect = sect; + if (sect == ns_s_max_vlmcsd) { + msg->_rrnum = -1; + msg->_msg_ptr = NULL; + } else { + msg->_rrnum = 0; + msg->_msg_ptr = msg->_sections[(int)sect]; + } +} + +#endif // !NO_DNS +#endif // DNS_PARSER_INTERNAL diff --git a/ns_parse.h b/ns_parse.h new file mode 100644 index 0000000..7bf4b6a --- /dev/null +++ b/ns_parse.h @@ -0,0 +1,73 @@ + +#ifndef NS_PARSE_H_ +#define NS_PARSE_H_ + +#ifndef NS_INT16SZ +#define NS_INT16SZ (sizeof(uint16_t)) +#endif // NS_INT16SZ + +#ifndef NS_INT32SZ +#define NS_INT32SZ (sizeof(uint32_t)) +#endif // NS_INT32SZ + +#ifndef NS_MAXDNAME +#define NS_MAXDNAME 1025 +#endif + +#define ns_msg_id_vlmcsd(handle) ((handle)._id + 0) +#define ns_msg_base_vlmcsd(handle) ((handle)._msg + 0) +#define ns_msg_end_vlmcsd(handle) ((handle)._eom + 0) +#define ns_msg_size_vlmcsd(handle) ((handle)._eom - (handle)._msg) +#define ns_msg_count_vlmcsd(handle, section) ((handle)._counts[section] + 0) + +#define ns_rr_name_vlmcsd(rr) (((rr).name[0] != '\0') ? (rr).name : ".") +#define ns_rr_type_vlmcsd(rr) ((ns_type)((rr).type + 0)) +#define ns_rr_class_vlmcsd(rr) ((ns_class)((rr).rr_class + 0)) +#define ns_rr_ttl_vlmcsd(rr) ((rr).ttl + 0) +#define ns_rr_rdlen_vlmcsd(rr) ((rr).rdlength + 0) +#define ns_rr_rdata_vlmcsd(rr) ((rr).rdata + 0) + +#define ns_msg_id_vlmcsd(handle) ((handle)._id + 0) +#define ns_msg_base_vlmcsd(handle) ((handle)._msg + 0) +#define ns_msg_end_vlmcsd(handle) ((handle)._eom + 0) +#define ns_msg_size_vlmcsd(handle) ((handle)._eom - (handle)._msg) +#define ns_msg_count_vlmcsd(handle, section) ((handle)._counts[section] + 0) + + +typedef enum __ns_sect_vlmcsd { + ns_s_qd_vlmcsd = 0, /*%< Query: Question. */ + ns_s_zn_vlmcsd = 0, /*%< Update: Zone. */ + ns_s_an_vlmcsd = 1, /*%< Query: Answer. */ + ns_s_pr_vlmcsd = 1, /*%< Update: Prerequisites. */ + ns_s_ns_vlmcsd = 2, /*%< Query: Name servers. */ + ns_s_ud_vlmcsd = 2, /*%< Update: Update. */ + ns_s_ar_vlmcsd = 3, /*%< Query|Update: Additional records. */ + ns_s_max_vlmcsd = 4 +} ns_sect_vlmcsd; + +typedef struct __ns_msg_vlmcsd { + const uint8_t *_msg, *_eom; + uint16_t _id, _flags, _counts[ns_s_max_vlmcsd]; + const uint8_t *_sections[ns_s_max_vlmcsd]; + ns_sect_vlmcsd _sect; + int _rrnum; + const uint8_t *_msg_ptr; +} ns_msg_vlmcsd; + + +typedef struct __ns_rr_vlmcsd { + char name[NS_MAXDNAME]; + uint16_t type; + uint16_t rr_class; + uint32_t ttl; + uint16_t rdlength; + const uint8_t * rdata; +} ns_rr_vlmcsd; + +int ns_initparse_vlmcsd(const uint8_t *msg, int msglen, ns_msg_vlmcsd *handle); + +int ns_parserr_vlmcsd(ns_msg_vlmcsd *handle, ns_sect_vlmcsd section, int rrnum, ns_rr_vlmcsd *rr); + + + +#endif /* NS_PARSE_H_ */ diff --git a/ntservice.c b/ntservice.c new file mode 100644 index 0000000..6eb021e --- /dev/null +++ b/ntservice.c @@ -0,0 +1,346 @@ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "ntservice.h" +#include "shared_globals.h" +#include "vlmcsd.h" +#include "output.h" +#include "helpers.h" + +#ifdef _NTSERVICE + +SERVICE_STATUS gSvcStatus; +SERVICE_STATUS_HANDLE gSvcStatusHandle; + +static VOID WINAPI ServiceCtrlHandler(const DWORD dwCtrl) +{ + // Handle the requested control code. + + switch(dwCtrl) + { + case SERVICE_CONTROL_STOP: + case SERVICE_CONTROL_SHUTDOWN: + + ServiceShutdown = TRUE; + ReportServiceStatus(SERVICE_STOP_PENDING, NO_ERROR, 0); + + // Remove PID file and free ressources + cleanup(); +# ifdef USE_MSRPC + ReportServiceStatus(SERVICE_STOPPED, NO_ERROR, 0); +# endif // !USE_MSRPC + return; + + /*case SERVICE_CONTROL_INTERROGATE: + break;*/ + + default: + break; + } +} + +static VOID WINAPI ServiceMain(const int argc_unused, CARGV argv_unused) +{ + // Register the handler function for the service + + gSvcStatusHandle = RegisterServiceCtrlHandler( + NT_SERVICE_NAME, + ServiceCtrlHandler + ); + + if(!gSvcStatusHandle) + { + //ServiceReportEvent(RegisterServiceCtrlHandler); + return; + } + + // These SERVICE_STATUS members remain as set here + + gSvcStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; + gSvcStatus.dwServiceSpecificExitCode = 0; + + // Run the actual program + ReportServiceStatus(SERVICE_STOPPED, newmain(), 3000); +} + +SERVICE_TABLE_ENTRY NTServiceDispatchTable[] = { + { + (LPSTR)NT_SERVICE_NAME, + (LPSERVICE_MAIN_FUNCTION) ServiceMain + }, + { + NULL, + NULL + } +}; + +VOID ReportServiceStatus(const DWORD dwCurrentState, const DWORD dwWin32ExitCode, const DWORD dwWaitHint) +{ + static DWORD dwCheckPoint = 1; + + // Fill in the SERVICE_STATUS structure. + + gSvcStatus.dwCurrentState = dwCurrentState; + gSvcStatus.dwWin32ExitCode = dwWin32ExitCode; + gSvcStatus.dwWaitHint = dwWaitHint; + + if (dwCurrentState == SERVICE_START_PENDING) + gSvcStatus.dwControlsAccepted = 0; + else + gSvcStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP; + + if ( (dwCurrentState == SERVICE_RUNNING) || + (dwCurrentState == SERVICE_STOPPED) ) + gSvcStatus.dwCheckPoint = 0; + else + gSvcStatus.dwCheckPoint = dwCheckPoint++; + + // Report the status of the service to the SCM. + SetServiceStatus(gSvcStatusHandle, &gSvcStatus); +} + +/*VOID ServiceReportEvent(char *szFunction) +{ + HANDLE hEventSource; + const char *eventStrings[2]; + TCHAR Buffer[80]; + + hEventSource = RegisterEventSource(NULL, NT_SERVICE_NAME); + + if (hEventSource) + { + snprintf(Buffer, 80, "%s failed with %d", szFunction, GetLastError()); + + eventStrings[0] = NT_SERVICE_NAME; + eventStrings[1] = Buffer; + + ReportEvent(hEventSource, // event log handle + EVENTLOG_ERROR_TYPE, // event type + 0, // event category + 00, // event identifier + NULL, // no security identifier + 2, // size of lpszStrings array + 0, // no binary data + eventStrings, // array of strings + NULL); // no binary data + + DeregisterEventSource(hEventSource); + } +}*/ + +//Returns 0=Error, 1=Success, 2=Doesn't exist + + +static uint_fast8_t OpenAndRemoveService(DWORD *dwPreviousState, SC_HANDLE *schSCManager) +{ + SERVICE_STATUS status; + uint_fast8_t i; + SC_HANDLE installedService; + uint_fast8_t result = 1; + BOOL closeManager = FALSE; + + // Allow NULL for both Arguments + if (!dwPreviousState) dwPreviousState = (DWORD*)alloca(sizeof(*dwPreviousState)); + if (!schSCManager) + { + schSCManager = (SC_HANDLE*)alloca(sizeof(*schSCManager)); + closeManager = TRUE; + } + + *schSCManager = OpenSCManager( + NULL, // local computer + NULL, // ServicesActive database + SC_MANAGER_ALL_ACCESS); // full access rights + + if (!*schSCManager) return 0; + + if (!(installedService = OpenService(*schSCManager, NT_SERVICE_NAME, SERVICE_ALL_ACCESS))) + { + result = 2; + } + else + { + *dwPreviousState = SERVICE_STOPPED; + if (QueryServiceStatus(installedService, &status)) *dwPreviousState = status.dwCurrentState; + + ControlService(installedService, SERVICE_CONTROL_STOP, &status); + + for (i = 0; i < 10; i++) + { + QueryServiceStatus(installedService, &status); + // Give it 100 ms after it reported SERVICE_STOPPED. Subsequent CreateService will fail otherwise + Sleep(100); + if (status.dwCurrentState == SERVICE_STOPPED) break; + } + + if (!DeleteService(installedService)) result = 0; + CloseServiceHandle(installedService); + } + + if (closeManager) CloseServiceHandle(*schSCManager); + return result; +} + +static VOID ServiceInstaller(const char *restrict ServiceUser, const char *const ServicePassword) +{ + SC_HANDLE schSCManager; + SC_HANDLE schService; + char szPath[MAX_PATH] = "\""; + + if (!GetModuleFileName(NULL, szPath + sizeof(char), MAX_PATH - 1)) + { + errorout("Cannot install service (%d)\n", (uint32_t)GetLastError()); + return; + } + + strcat(szPath,"\""); + + int i; + for (i = 1; i < global_argc; i ++) + { + // Strip unneccessary parameters, especially the password + if (!strcmp(global_argv[i], "-s")) continue; + + if (!strcmp(global_argv[i], "-W") || + !strcmp(global_argv[i], "-U")) + { + i++; + continue; + } + + strcat(szPath, " "); + + if (strchr(global_argv[i], ' ')) + { + strcat(szPath, "\""); + strcat(szPath, global_argv[i]); + strcat(szPath, "\""); + } + else + strcat(szPath, global_argv[i]); + } + + // Get a handle to the SCM database. + + SERVICE_STATUS status; + DWORD dwPreviousState; + + if (!OpenAndRemoveService(&dwPreviousState, &schSCManager)) + { + errorout("Service removal failed (%d)\n", (uint32_t)GetLastError()); + return; + } + + char *tempUser = NULL; + + if (ServiceUser) + { + // Shortcuts for some well known users + if (!strcasecmp(ServiceUser, "/l")) ServiceUser="NT AUTHORITY\\LocalService"; + if (!strcasecmp(ServiceUser, "/n")) ServiceUser="NT AUTHORITY\\NetworkService"; + + // Allow Local Users without .\ , e.g. "johndoe" instead of ".\johndoe" + if (!strchr(ServiceUser, '\\')) + { + tempUser = (char*)vlmcsd_malloc(strlen(ServiceUser) + 3); + strcpy(tempUser, ".\\"); + strcat(tempUser, ServiceUser); + ServiceUser = tempUser; + } + } + + schService = CreateService( + schSCManager, // SCM database + NT_SERVICE_NAME, // name of service + NT_SERVICE_DISPLAY_NAME, // service name to display + SERVICE_ALL_ACCESS, // desired access + SERVICE_WIN32_OWN_PROCESS, // service type + SERVICE_AUTO_START, // start type + SERVICE_ERROR_NORMAL, // error control type + szPath, // path to service's binary + NULL, // no load ordering group + NULL, // no tag identifier + "tcpip\0", // depends on TCP/IP + ServiceUser, // LocalSystem account + ServicePassword); // no password + +# if __clang__ && (__CYGWIN__ || __MINGW64__ ) + // Workaround for clang not understanding some GCC asm syntax used in + ZeroMemory((char*)ServicePassword, strlen(ServicePassword)); +# else + SecureZeroMemory((char*)ServicePassword, strlen(ServicePassword)); +# endif + if (tempUser) free(tempUser); + + if (schService == NULL) + { + errorout("CreateService failed (%u)\n", (uint32_t)GetLastError()); + CloseServiceHandle(schSCManager); + return; + } + else + { + errorout("Service installed successfully\n"); + + if (dwPreviousState == SERVICE_RUNNING) + { + printf("Restarting " NT_SERVICE_NAME " service => "); + status.dwCurrentState = SERVICE_STOPPED; + + if (StartService(schService, 0, NULL)) + { + for (i = 0; i < 10; i++) + { + if (!QueryServiceStatus(schService, &status) || status.dwCurrentState != SERVICE_START_PENDING) break; + Sleep(100); + } + + if (status.dwCurrentState == SERVICE_RUNNING) + printf("Success\n"); + else if (status.dwCurrentState == SERVICE_START_PENDING) + printf("Not ready within a second\n"); + else + errorout("Error\n"); + } + else + errorout("Error %u\n", (uint32_t)GetLastError()); + } + } + + CloseServiceHandle(schService); + CloseServiceHandle(schSCManager); +} + +int NtServiceInstallation(const int_fast8_t installService, const char *restrict ServiceUser, const char *const ServicePassword) +{ + if (IsNTService) return 0; + + if (installService == 1) // Install + { + ServiceInstaller(ServiceUser, ServicePassword); + return(0); + } + + if (installService == 2) // Remove + { + switch(OpenAndRemoveService(NULL, NULL)) + { + case 0: + errorout("Error removing service %s\n", NT_SERVICE_NAME); + return(!0); + case 1: + printf("Service %s removed successfully\n", NT_SERVICE_NAME); + return(0); + default: + errorout("Service %s does not exist.\n", NT_SERVICE_NAME); + return(!0); + } + } + + // Do nothing + + return(0); +} +#endif // _NTSERVICE diff --git a/ntservice.h b/ntservice.h new file mode 100644 index 0000000..d3cac75 --- /dev/null +++ b/ntservice.h @@ -0,0 +1,28 @@ +#ifndef INCLUDED_NTSERVICE_H +#define INCLUDED_NTSERVICE_H + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "types.h" +#ifdef _NTSERVICE + +//#include + +#define NT_SERVICE_NAME "vlmcsd" +#define NT_SERVICE_DISPLAY_NAME "Key Management Server" + +extern SERVICE_TABLE_ENTRY NTServiceDispatchTable[]; + +VOID ReportServiceStatus(const DWORD, const DWORD, const DWORD); +int NtServiceInstallation(const int_fast8_t installService, const char *restrict ServiceUser, const char *const ServicePassword); + +#else // !_NTSERVICE + +#define ReportServiceStatus(x,y,z) + +#endif // _NTSERVICE + +#endif // INCLUDED_NTSERVICE_H diff --git a/output.c b/output.c new file mode 100644 index 0000000..22599ed --- /dev/null +++ b/output.c @@ -0,0 +1,240 @@ +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE +#endif // _DEFAULT_SOURCE + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "output.h" +#include "shared_globals.h" +#include "endian.h" +#include "helpers.h" + +#ifndef NO_LOG +static void vlogger(const char *message, va_list args) +{ + FILE *log; + + #ifdef _NTSERVICE + if (!IsNTService && logstdout) log = stdout; + #else + if (logstdout) log = stdout; + #endif + else + { + if (fn_log == NULL) return; + + #ifndef _WIN32 + if (!strcmp(fn_log, "syslog")) + { + openlog("vlmcsd", LOG_CONS | LOG_PID, LOG_USER); + + ////PORTABILITY: vsyslog is not in Posix but virtually all Unixes have it + vsyslog(LOG_INFO, message, args); + + closelog(); + return; + } + #endif // _WIN32 + + log = fopen(fn_log, "a"); + if ( !log ) return; + } + + time_t now = time(0); + + #ifdef USE_THREADS + char mbstr[2048]; + #else + char mbstr[24]; + #endif + + strftime(mbstr, sizeof(mbstr), "%Y-%m-%d %X", localtime(&now)); + + #ifndef USE_THREADS + + fprintf(log, "%s: ", mbstr); + vfprintf(log, message, args); + fflush(log); + + #else // USE_THREADS + + // We write everything to a string before we really log inside the critical section + // so formatting the output can be concurrent + strcat(mbstr, ": "); + int len = strlen(mbstr); + vsnprintf(mbstr + len, sizeof(mbstr) - len, message, args); + + lock_mutex(&logmutex); + fputs(mbstr, log); + fflush(log); + unlock_mutex(&logmutex); + + #endif // USE_THREADS + if (log != stdout) fclose(log); +} + + +// Always sends to log output +int logger(const char *const fmt, ...) +{ + va_list args; + + va_start(args, fmt); + vlogger(fmt, args); + va_end(args); + return 0; +} + +#endif //NO_LOG + + +// Output to stderr if it is available or to log otherwise (e.g. if running as daemon/service) +void printerrorf(const char *const fmt, ...) +{ + va_list arglist; + + va_start(arglist, fmt); + + #ifndef NO_LOG + #ifdef _NTSERVICE + if (InetdMode || IsNTService) + #else // !_NTSERVICE + if (InetdMode) + #endif // NTSERVIICE + vlogger(fmt, arglist); + else + #endif //NO_LOG + { + vfprintf(stderr, fmt, arglist); + fflush(stderr); + } + + va_end(arglist); +} + + +// Always output to stderr +int errorout(const char* fmt, ...) +{ + va_list args; + + va_start(args, fmt); + int i = vfprintf(stderr, fmt, args); + va_end(args); + fflush(stderr); + + return i; +} + + +static const char *LicenseStatusText[] = +{ + "Unlicensed", "Licensed", "OOB grace", "OOT grace", "Non-Genuine", "Notification", "Extended grace" +}; + + +void uuid2StringLE(const GUID *const guid, char *const string) +{ + sprintf(string, + #ifdef _WIN32 + "%08x-%04x-%04x-%04x-%012I64x", + #else + "%08x-%04x-%04x-%04x-%012llx", + #endif + (unsigned int)LE32( guid->Data1 ), + (unsigned int)LE16( guid->Data2 ), + (unsigned int)LE16( guid->Data3 ), + (unsigned int)BE16( *(uint16_t*)guid->Data4 ), + (unsigned long long)BE64(*(uint64_t*)(guid->Data4)) & 0xffffffffffffLL + ); +} + + +void logRequestVerbose(const REQUEST *const Request, const PRINTFUNC p) +{ + char guidBuffer[GUID_STRING_LENGTH + 1]; + char WorkstationBuffer[3 * WORKSTATION_NAME_BUFFER]; + const char *productName; + ProdListIndex_t index; + + p("Protocol version : %u.%u\n", LE16(Request->MajorVer), LE16(Request->MinorVer)); + p("Client is a virtual machine : %s\n", LE32(Request->VMInfo) ? "Yes" : "No"); + p("Licensing status : %u (%s)\n", (uint32_t)LE32(Request->LicenseStatus), LE32(Request->LicenseStatus) < _countof(LicenseStatusText) ? LicenseStatusText[LE32(Request->LicenseStatus)] : "Unknown"); + p("Remaining time (0 = forever) : %i minutes\n", (uint32_t)LE32(Request->BindingExpiration)); + + uuid2StringLE(&Request->AppID, guidBuffer); + productName = getProductNameLE(&Request->AppID, AppList, &index); + p("Application ID : %s (%s)\n", guidBuffer, productName); + + uuid2StringLE(&Request->ActID, guidBuffer); + + #ifndef NO_EXTENDED_PRODUCT_LIST + productName = getProductNameLE(&Request->ActID, ExtendedProductList, &index); + #else + productName = "Unknown"; + #endif + + p("Activation ID (Product) : %s (%s)\n", guidBuffer, productName); + + uuid2StringLE(&Request->KMSID, guidBuffer); + + #ifndef NO_BASIC_PRODUCT_LIST + productName = getProductNameLE(&Request->KMSID, ProductList, &index); + #else + productName = "Unknown"; + #endif + + p("Key Management Service ID : %s (%s)\n", guidBuffer, productName); + + uuid2StringLE(&Request->CMID, guidBuffer); + p("Client machine ID : %s\n", guidBuffer); + + uuid2StringLE(&Request->CMID_prev, guidBuffer); + p("Previous client machine ID : %s\n", guidBuffer); + + + char mbstr[64]; + time_t st; + st = fileTimeToUnixTime(&Request->ClientTime); + strftime(mbstr, sizeof(mbstr), "%Y-%m-%d %X", gmtime(&st)); + p("Client request timestamp (UTC) : %s\n", mbstr); + + ucs2_to_utf8(Request->WorkstationName, WorkstationBuffer, WORKSTATION_NAME_BUFFER, sizeof(WorkstationBuffer)); + + p("Workstation name : %s\n", WorkstationBuffer); + p("N count policy (minimum clients): %u\n", (uint32_t)LE32(Request->N_Policy)); +} + + +void logResponseVerbose(const char *const ePID, const BYTE *const hwid, const RESPONSE *const response, const PRINTFUNC p) +{ + char guidBuffer[GUID_STRING_LENGTH + 1]; + //SYSTEMTIME st; + + p("Protocol version : %u.%u\n", (uint32_t)LE16(response->MajorVer), (uint32_t)LE16(response->MinorVer)); + p("KMS host extended PID : %s\n", ePID); + if (LE16(response->MajorVer) > 5) +# ifndef _WIN32 + p("KMS host Hardware ID : %016llX\n", (unsigned long long)BE64(*(uint64_t*)hwid)); +# else // _WIN32 + p("KMS host Hardware ID : %016I64X\n", (unsigned long long)BE64(*(uint64_t*)hwid)); +# endif // WIN32 + + uuid2StringLE(&response->CMID, guidBuffer); + p("Client machine ID : %s\n", guidBuffer); + + char mbstr[64]; + time_t st; + + st = fileTimeToUnixTime(&response->ClientTime); + strftime(mbstr, sizeof(mbstr), "%Y-%m-%d %X", gmtime(&st)); + p("Client request timestamp (UTC) : %s\n", mbstr); + + p("KMS host current active clients : %u\n", (uint32_t)LE32(response->Count)); + p("Renewal interval policy : %u\n", (uint32_t)LE32(response->VLRenewalInterval)); + p("Activation interval policy : %u\n", (uint32_t)LE32(response->VLActivationInterval)); +} + diff --git a/output.h b/output.h new file mode 100644 index 0000000..77b3783 --- /dev/null +++ b/output.h @@ -0,0 +1,27 @@ +#ifndef INCLUDED_OUTPUT_H +#define INCLUDED_OUTPUT_H + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "kms.h" + +typedef int (*PRINTFUNC)(const char *const fmt, ...); + +void printerrorf(const char *const fmt, ...); +int errorout(const char* fmt, ...); +void logRequestVerbose(const REQUEST *const Request, const PRINTFUNC p); +void logResponseVerbose(const char *const ePID, const BYTE *const hwid, const RESPONSE *const response, const PRINTFUNC p); + +#ifndef NO_LOG +int logger(const char *const fmt, ...); +#endif //NO_LOG + +void uuid2StringLE(const GUID *const guid, char *const string); + +//void copy_arguments(int argc, char **argv, char ***new_argv); +//void destroy_arguments(int argc, char **argv); + +#endif // INCLUDED_OUTPUT_H diff --git a/resolv.h b/resolv.h new file mode 100644 index 0000000..3231106 --- /dev/null +++ b/resolv.h @@ -0,0 +1,499 @@ +/* $NetBSD: resolv.h,v 1.31 2005/12/26 19:01:47 perry Exp $ */ + +/* + * Copyright (c) 1983, 1987, 1989 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") + * Portions Copyright (c) 1996-1999 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * @(#)resolv.h 8.1 (Berkeley) 6/2/93 + * Id: resolv.h,v 1.7.2.11.4.2 2004/06/25 00:41:05 marka Exp + */ + +#ifndef _RESOLV_PRIVATE_H_ +#define _RESOLV_PRIVATE_H_ + +#include +#include "resolv_static.h" + +/* + * Revision information. This is the release date in YYYYMMDD format. + * It can change every day so the right thing to do with it is use it + * in preprocessor commands such as "#if (__RES > 19931104)". Do not + * compare for equality; rather, use it to determine whether your resolver + * is new enough to contain a certain feature. + */ + +#define __RES 20030124 + +/* + * This used to be defined in res_query.c, now it's in herror.c. + * [XXX no it's not. It's in irs/irs_data.c] + * It was + * never extern'd by any *.h file before it was placed here. For thread + * aware programs, the last h_errno value set is stored in res->h_errno. + * + * XXX: There doesn't seem to be a good reason for exposing RES_SET_H_ERRNO + * (and __h_errno_set) to the public via . + * XXX: __h_errno_set is really part of IRS, not part of the resolver. + * If somebody wants to build and use a resolver that doesn't use IRS, + * what do they do? Perhaps something like + * #ifdef WANT_IRS + * # define RES_SET_H_ERRNO(r,x) __h_errno_set(r,x) + * #else + * # define RES_SET_H_ERRNO(r,x) (h_errno = (r)->res_h_errno = (x)) + * #endif + */ + +#define RES_SET_H_ERRNO(r,x) (h_errno = (r)->res_h_errno = (x)) +struct __res_state; /* forward */ + +/* + * Resolver configuration file. + * Normally not present, but may contain the address of the + * initial name server(s) to query and the domain search list. + */ + +#ifndef _PATH_RESCONF +#ifdef ANDROID_CHANGES +#define _PATH_RESCONF "/etc/ppp/resolv.conf" +#else +#define _PATH_RESCONF "/etc/resolv.conf" +#endif +#endif + +typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error } + res_sendhookact; + +typedef res_sendhookact (*res_send_qhook)(struct sockaddr * const *, + const u_char **, int *, + u_char *, int, int *); + +typedef res_sendhookact (*res_send_rhook)(const struct sockaddr *, + const u_char *, int, u_char *, + int, int *); + +struct res_sym { + int number; /* Identifying number, like T_MX */ + const char * name; /* Its symbolic name, like "MX" */ + const char * humanname; /* Its fun name, like "mail exchanger" */ +}; + +/* + * Global defines and variables for resolver stub. + */ +#define MAXNS 3 /* max # name servers we'll track */ +#define MAXDFLSRCH 3 /* # default domain levels to try */ +#define MAXDNSRCH 6 /* max # domains in search path */ +#define LOCALDOMAINPARTS 2 /* min levels in name that is "local" */ + +#define RES_TIMEOUT 5 /* min. seconds between retries */ +#define MAXRESOLVSORT 10 /* number of net to sort on */ +#define RES_MAXNDOTS 15 /* should reflect bit field size */ +#define RES_MAXRETRANS 30 /* only for resolv.conf/RES_OPTIONS */ +#define RES_MAXRETRY 5 /* only for resolv.conf/RES_OPTIONS */ +#define RES_DFLRETRY 2 /* Default #/tries. */ +#define RES_MAXTIME 65535 /* Infinity, in milliseconds. */ + +struct __res_state_ext; + +struct __res_state { + int retrans; /* retransmission time interval */ + int retry; /* number of times to retransmit */ +#ifdef sun + u_int options; /* option flags - see below. */ +#else + u_long options; /* option flags - see below. */ +#endif + int nscount; /* number of name servers */ + struct sockaddr_in + nsaddr_list[MAXNS]; /* address of name server */ +#define nsaddr nsaddr_list[0] /* for backward compatibility */ + u_short id; /* current message id */ + char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */ + char defdname[256]; /* default domain (deprecated) */ +#ifdef sun + u_int pfcode; /* RES_PRF_ flags - see below. */ +#else + u_long pfcode; /* RES_PRF_ flags - see below. */ +#endif + unsigned ndots:4; /* threshold for initial abs. query */ + unsigned nsort:4; /* number of elements in sort_list[] */ + char unused[3]; + struct { + struct in_addr addr; + uint32_t mask; + } sort_list[MAXRESOLVSORT]; +#ifdef __OLD_RES_STATE + char lookups[4]; +#else + res_send_qhook qhook; /* query hook */ + res_send_rhook rhook; /* response hook */ + int res_h_errno; /* last one set for this context */ + int _vcsock; /* PRIVATE: for res_send VC i/o */ + u_int _flags; /* PRIVATE: see below */ + u_int _pad; /* make _u 64 bit aligned */ + union { + /* On an 32-bit arch this means 512b total. */ + char pad[72 - 4*sizeof (int) - 2*sizeof (void *)]; + struct { + uint16_t nscount; + uint16_t nstimes[MAXNS]; /* ms. */ + int nssocks[MAXNS]; + struct __res_state_ext *ext; /* extention for IPv6 */ + } _ext; + } _u; +#endif + struct res_static rstatic[1]; +}; + +typedef struct __res_state *res_state; + +union res_sockaddr_union { + struct sockaddr_in sin; +#ifdef IN6ADDR_ANY_INIT + struct sockaddr_in6 sin6; +#endif +#ifdef ISC_ALIGN64 + int64_t __align64; /* 64bit alignment */ +#else + int32_t __align32; /* 32bit alignment */ +#endif + char __space[128]; /* max size */ +}; + +/* + * Resolver flags (used to be discrete per-module statics ints). + */ +#define RES_F_VC 0x00000001 /* socket is TCP */ +#define RES_F_CONN 0x00000002 /* socket is connected */ +#define RES_F_EDNS0ERR 0x00000004 /* EDNS0 caused errors */ +#define RES_F__UNUSED 0x00000008 /* (unused) */ +#define RES_F_LASTMASK 0x000000F0 /* ordinal server of last res_nsend */ +#define RES_F_LASTSHIFT 4 /* bit position of LASTMASK "flag" */ +#define RES_GETLAST(res) (((res)._flags & RES_F_LASTMASK) >> RES_F_LASTSHIFT) + +/* res_findzonecut2() options */ +#define RES_EXHAUSTIVE 0x00000001 /* always do all queries */ +#define RES_IPV4ONLY 0x00000002 /* IPv4 only */ +#define RES_IPV6ONLY 0x00000004 /* IPv6 only */ + +/* + * Resolver options (keep these in synch with res_debug.c, please) + */ +#define RES_INIT 0x00000001 /* address initialized */ +#define RES_DEBUG 0x00000002 /* print debug messages */ +#define RES_AAONLY 0x00000004 /* authoritative answers only (!IMPL)*/ +#define RES_USEVC 0x00000008 /* use virtual circuit */ +#define RES_PRIMARY 0x00000010 /* query primary server only (!IMPL) */ +#define RES_IGNTC 0x00000020 /* ignore trucation errors */ +#define RES_RECURSE 0x00000040 /* recursion desired */ +#define RES_DEFNAMES 0x00000080 /* use default domain name */ +#define RES_STAYOPEN 0x00000100 /* Keep TCP socket open */ +#define RES_DNSRCH 0x00000200 /* search up local domain tree */ +#define RES_INSECURE1 0x00000400 /* type 1 security disabled */ +#define RES_INSECURE2 0x00000800 /* type 2 security disabled */ +#define RES_NOALIASES 0x00001000 /* shuts off HOSTALIASES feature */ +#define RES_USE_INET6 0x00002000 /* use/map IPv6 in gethostbyname() */ +#define RES_ROTATE 0x00004000 /* rotate ns list after each query */ +#define RES_NOCHECKNAME 0x00008000 /* do not check names for sanity. */ +#define RES_KEEPTSIG 0x00010000 /* do not strip TSIG records */ +#define RES_BLAST 0x00020000 /* blast all recursive servers */ +#define RES_NOTLDQUERY 0x00100000 /* don't unqualified name as a tld */ +#define RES_USE_DNSSEC 0x00200000 /* use DNSSEC using OK bit in OPT */ +/* #define RES_DEBUG2 0x00400000 */ /* nslookup internal */ +/* KAME extensions: use higher bit to avoid conflict with ISC use */ +#define RES_USE_DNAME 0x10000000 /* use DNAME */ +#define RES_USE_EDNS0 0x40000000 /* use EDNS0 if configured */ +#define RES_NO_NIBBLE2 0x80000000 /* disable alternate nibble lookup */ + +#define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | \ + RES_DNSRCH | RES_NO_NIBBLE2) + +/* + * Resolver "pfcode" values. Used by dig. + */ +#define RES_PRF_STATS 0x00000001 +#define RES_PRF_UPDATE 0x00000002 +#define RES_PRF_CLASS 0x00000004 +#define RES_PRF_CMD 0x00000008 +#define RES_PRF_QUES 0x00000010 +#define RES_PRF_ANS 0x00000020 +#define RES_PRF_AUTH 0x00000040 +#define RES_PRF_ADD 0x00000080 +#define RES_PRF_HEAD1 0x00000100 +#define RES_PRF_HEAD2 0x00000200 +#define RES_PRF_TTLID 0x00000400 +#define RES_PRF_HEADX 0x00000800 +#define RES_PRF_QUERY 0x00001000 +#define RES_PRF_REPLY 0x00002000 +#define RES_PRF_INIT 0x00004000 +#define RES_PRF_TRUNC 0x00008000 +/* 0x00010000 */ + +/* Things involving an internal (static) resolver context. */ +__BEGIN_DECLS +extern struct __res_state *__res_get_state(void); +extern void __res_put_state(struct __res_state *); + +#ifndef ANDROID_CHANGES +/* + * Source and Binary compatibility; _res will not work properly + * with multi-threaded programs. + */ +extern struct __res_state *__res_state(void); +#define _res (*__res_state()) +#endif + +__END_DECLS + +#ifndef __BIND_NOSTATIC +#define fp_nquery __fp_nquery +#define fp_query __fp_query +#define hostalias __hostalias +#define p_query __p_query +#define res_close __res_close +#define res_opt __res_opt +#define res_isourserver __res_isourserver +#define res_querydomain __res_querydomain +#define res_send __res_send +#define res_sendsigned __res_sendsigned + +#ifdef BIND_RES_POSIX3 +#define dn_expand __dn_expand +#define res_init __res_init +#define res_query __res_query +#define res_search __res_search +#define res_mkquery __res_mkquery +#endif + +__BEGIN_DECLS +void fp_nquery(const u_char *, int, FILE *); +void fp_query(const u_char *, FILE *); +const char * hostalias(const char *); +void p_query(const u_char *); +void res_close(void); +int res_init(void); +int res_opt(int, u_char *, int, int); +int res_isourserver(const struct sockaddr_in *); +int res_mkquery(int, const char *, int, int, const u_char *, int, const u_char *, u_char *, int); +int res_query(const char *, int, int, u_char *, int); +int res_querydomain(const char *, const char *, int, int, u_char *, int); +int res_search(const char *, int, int, u_char *, int); +int res_send(const u_char *, int, u_char *, int); +int res_sendsigned(const u_char *, int, ns_tsig_key *, u_char *, int); +__END_DECLS +#endif + +#if !defined(SHARED_LIBBIND) || defined(LIB) +/* + * If libbind is a shared object (well, DLL anyway) + * these externs break the linker when resolv.h is + * included by a lib client (like named) + * Make them go away if a client is including this + * + */ +extern const struct res_sym __p_key_syms[]; +extern const struct res_sym __p_cert_syms[]; +extern const struct res_sym __p_class_syms[]; +extern const struct res_sym __p_type_syms[]; +extern const struct res_sym __p_rcode_syms[]; +#endif /* SHARED_LIBBIND */ + +#ifndef ADNROID_CHANGES +#define b64_ntop __b64_ntop +#define b64_pton __b64_pton +#endif + +#define dn_comp __dn_comp +#define dn_count_labels __dn_count_labels +#define dn_skipname __dn_skipname +#define fp_resstat __fp_resstat +#define loc_aton __loc_aton +#define loc_ntoa __loc_ntoa +#define p_cdname __p_cdname +#define p_cdnname __p_cdnname +#define p_class __p_class +#define p_fqname __p_fqname +#define p_fqnname __p_fqnname +#define p_option __p_option +#define p_secstodate __p_secstodate +#define p_section __p_section +#define p_time __p_time +#define p_type __p_type +#define p_rcode __p_rcode +#define p_sockun __p_sockun +#define putlong __putlong +#define putshort __putshort +#define res_dnok __res_dnok +#define res_findzonecut __res_findzonecut +#define res_findzonecut2 __res_findzonecut2 +#define res_hnok __res_hnok +#define res_hostalias __res_hostalias +#define res_mailok __res_mailok +#define res_nameinquery __res_nameinquery +#define res_nclose __res_nclose +#define res_ninit __res_ninit +#define res_nmkquery __res_nmkquery +#define res_pquery __res_pquery +#define res_nquery __res_nquery +#define res_nquerydomain __res_nquerydomain +#define res_nsearch __res_nsearch +#define res_nsend __res_nsend +#define res_nsendsigned __res_nsendsigned +#define res_nisourserver __res_nisourserver +#define res_ownok __res_ownok +#define res_queriesmatch __res_queriesmatch +#define res_randomid __res_randomid +#define sym_ntop __sym_ntop +#define sym_ntos __sym_ntos +#define sym_ston __sym_ston +#define res_nopt __res_nopt +#define res_ndestroy __res_ndestroy +#define res_nametoclass __res_nametoclass +#define res_nametotype __res_nametotype +#define res_setservers __res_setservers +#define res_getservers __res_getservers +#define res_buildprotolist __res_buildprotolist +#define res_destroyprotolist __res_destroyprotolist +#define res_destroyservicelist __res_destroyservicelist +#define res_get_nibblesuffix __res_get_nibblesuffix +#define res_get_nibblesuffix2 __res_get_nibblesuffix2 +#define res_ourserver_p __res_ourserver_p +#define res_protocolname __res_protocolname +#define res_protocolnumber __res_protocolnumber +#define res_send_setqhook __res_send_setqhook +#define res_send_setrhook __res_send_setrhook +#define res_servicename __res_servicename +#define res_servicenumber __res_servicenumber +__BEGIN_DECLS +int res_hnok(const char *); +int res_ownok(const char *); +int res_mailok(const char *); +int res_dnok(const char *); +int sym_ston(const struct res_sym *, const char *, int *); +const char * sym_ntos(const struct res_sym *, int, int *); +const char * sym_ntop(const struct res_sym *, int, int *); +#ifndef ANDROID_CHANGES +int b64_ntop(u_char const *, size_t, char *, size_t); +int b64_pton(char const *, u_char *, size_t); +#endif +int loc_aton(const char *, u_char *); +const char * loc_ntoa(const u_char *, char *); +int dn_skipname(const u_char *, const u_char *); +void putlong(uint32_t, u_char *); +void putshort(uint16_t, u_char *); +#ifndef __ultrix__ +uint16_t _getshort(const u_char *); +uint32_t _getlong(const u_char *); +#endif +const char * p_class(int); +const char * p_time(uint32_t); +const char * p_type(int); +const char * p_rcode(int); +const char * p_sockun(union res_sockaddr_union, char *, size_t); +const u_char * p_cdnname(const u_char *, const u_char *, int, FILE *); +const u_char * p_cdname(const u_char *, const u_char *, FILE *); +const u_char * p_fqnname(const u_char *, const u_char *, + int, char *, int); +const u_char * p_fqname(const u_char *, const u_char *, FILE *); +const char * p_option(u_long); +char * p_secstodate(u_long); +int dn_count_labels(const char *); +int dn_comp(const char *, u_char *, int, u_char **, u_char **); +int dn_expand(const u_char *, const u_char *, const u_char *, + char *, int); +u_int res_randomid(void); +int res_nameinquery(const char *, int, int, const u_char *, + const u_char *); +int res_queriesmatch(const u_char *, const u_char *, + const u_char *, const u_char *); +const char * p_section(int, int); +/* Things involving a resolver context. */ +int res_ninit(res_state); +int res_nisourserver(const res_state, const struct sockaddr_in *); +void fp_resstat(const res_state, FILE *); +void res_pquery(const res_state, const u_char *, int, FILE *); +const char * res_hostalias(const res_state, const char *, char *, size_t); +int res_nquery(res_state, const char *, int, int, u_char *, int); +int res_nsearch(res_state, const char *, int, int, u_char *, int); +int res_nquerydomain(res_state, const char *, const char *, + int, int, u_char *, int); +int res_nmkquery(res_state, int, const char *, int, int, + const u_char *, int, const u_char *, + u_char *, int); +int res_nsend(res_state, const u_char *, int, u_char *, int); +int res_nsendsigned(res_state, const u_char *, int, + ns_tsig_key *, u_char *, int); +int res_findzonecut(res_state, const char *, ns_class, int, + char *, size_t, struct in_addr *, int); +int res_findzonecut2(res_state, const char *, ns_class, int, + char *, size_t, + union res_sockaddr_union *, int); +void res_nclose(res_state); +int res_nopt(res_state, int, u_char *, int, int); +void res_send_setqhook(res_send_qhook); +void res_send_setrhook(res_send_rhook); +int __res_vinit(res_state, int); +void res_destroyservicelist(void); +const char * res_servicename(uint16_t, const char *); +const char * res_protocolname(int); +void res_destroyprotolist(void); +void res_buildprotolist(void); +const char * res_get_nibblesuffix(res_state); +const char * res_get_nibblesuffix2(res_state); +void res_ndestroy(res_state); +uint16_t res_nametoclass(const char *, int *); +uint16_t res_nametotype(const char *, int *); +void res_setservers(res_state, + const union res_sockaddr_union *, int); +int res_getservers(res_state, + union res_sockaddr_union *, int); + +int res_get_dns_changed(); +u_int res_randomid(void); + +__END_DECLS + +#endif /* !_RESOLV_PRIVATE_H_ */ diff --git a/resolv_static.h b/resolv_static.h new file mode 100644 index 0000000..481c954 --- /dev/null +++ b/resolv_static.h @@ -0,0 +1,32 @@ +#ifndef _RESOLV_STATIC_H +#define _RESOLV_STATIC_H + +#include + +/* this structure contains all the variables that were declared + * 'static' in the original NetBSD resolver code. + * + * this caused vast amounts of crashes and memory corruptions + * when the resolver was being used by multiple threads. + * + * (note: the OpenBSD/FreeBSD resolver has similar 'issues') + */ + +#define MAXALIASES 35 +#define MAXADDRS 35 + +typedef struct res_static { + char* h_addr_ptrs[MAXADDRS + 1]; + char* host_aliases[MAXALIASES]; + char hostbuf[8*1024]; + u_int32_t host_addr[16 / sizeof(u_int32_t)]; /* IPv4 or IPv6 */ + FILE* hostf; + int stayopen; + const char* servent_ptr; + struct servent servent; + struct hostent host; +} *res_static; + +extern res_static __res_get_static(void); + +#endif /* _RESOLV_STATIC_H */ diff --git a/rpc.c b/rpc.c new file mode 100644 index 0000000..0ac8ef0 --- /dev/null +++ b/rpc.c @@ -0,0 +1,1113 @@ +#ifndef _DEFAULT_SOURCE +#define _DEFAULT_SOURCE +#endif // _DEFAULT_SOURCE + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#ifndef USE_MSRPC + +#include +#include +#include +#include +#include +#include +#if !defined(_WIN32) +#include +#include +#endif +#include "rpc.h" +#include "output.h" +#include "crypto.h" +#include "endian.h" +#include "helpers.h" +#include "network.h" +#include "shared_globals.h" + +/* Forwards */ + +static int checkRpcHeader(const RPC_HEADER *const Header, const BYTE desiredPacketType, const PRINTFUNC p); + + +/* Data definitions */ + +// All GUIDs are defined as BYTE[16] here. No big-endian/little-endian byteswapping required. +static const BYTE TransferSyntaxNDR32[] = { + 0x04, 0x5D, 0x88, 0x8A, 0xEB, 0x1C, 0xC9, 0x11, 0x9F, 0xE8, 0x08, 0x00, 0x2B, 0x10, 0x48, 0x60 +}; + +static const BYTE InterfaceUuid[] = { + 0x75, 0x21, 0xc8, 0x51, 0x4e, 0x84, 0x50, 0x47, 0xB0, 0xD8, 0xEC, 0x25, 0x55, 0x55, 0xBC, 0x06 +}; + +static const BYTE TransferSyntaxNDR64[] = { + 0x33, 0x05, 0x71, 0x71, 0xba, 0xbe, 0x37, 0x49, 0x83, 0x19, 0xb5, 0xdb, 0xef, 0x9c, 0xcc, 0x36 +}; + +static const BYTE BindTimeFeatureNegotiation[] = { + 0x2c, 0x1c, 0xb7, 0x6c, 0x12, 0x98, 0x40, 0x45, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + + +// +// Dispatch RPC payload to kms.c +// +typedef int (*CreateResponse_t)(const void *const, void *const, const char* const); + +static const struct { + unsigned int RequestSize; + CreateResponse_t CreateResponse; +} _Versions[] = { + { sizeof(REQUEST_V4), (CreateResponse_t) CreateResponseV4 }, + { sizeof(REQUEST_V6), (CreateResponse_t) CreateResponseV6 }, + { sizeof(REQUEST_V6), (CreateResponse_t) CreateResponseV6 } +}; + +RPC_FLAGS RpcFlags; +static int_fast8_t firstPacketSent; + +// +// RPC request (server) +// +#if defined(_PEDANTIC) && !defined(NO_LOG) +static void CheckRpcRequest(const RPC_REQUEST64 *const Request, const unsigned int len, WORD* NdrCtx, WORD* Ndr64Ctx, WORD Ctx) +{ + uint_fast8_t kmsMajorVersion; + uint32_t requestSize = Ctx != *Ndr64Ctx ? sizeof(RPC_REQUEST) : sizeof(RPC_REQUEST64); + + if (len < requestSize) + { + logger("Fatal: RPC request (including header) must be at least %i bytes but is only %i bytes.\n", + (int)(sizeof(RPC_HEADER) + requestSize), + (int)(len + sizeof(RPC_HEADER)) + ); + + return; + } + + if (len < requestSize + sizeof(DWORD)) + { + logger("Fatal: KMS Request too small to contain version info (less than 4 bytes).\n"); + return; + } + + if (Ctx != *Ndr64Ctx) + kmsMajorVersion = LE16(((WORD*)Request->Ndr.Data)[1]); + else + kmsMajorVersion = LE16(((WORD*)Request->Ndr64.Data)[1]); + + if (kmsMajorVersion > 6) + { + logger("Fatal: KMSv%u is not supported.\n", (unsigned int)kmsMajorVersion); + } + else + { + if (len >_Versions[kmsMajorVersion].RequestSize + requestSize) + logger("Warning: %u excess bytes in RPC request.\n", + len - _Versions[kmsMajorVersion].RequestSize + ); + } + + if (Ctx != *Ndr64Ctx && Ctx != *NdrCtx) + logger("Warning: Context id should be %u (NDR32) or %u (NDR64) but is %u.\n", + (unsigned int)*NdrCtx, + (unsigned int)*Ndr64Ctx, + Ctx + ); + + if (Request->Opnum) + logger("Warning: OpNum should be 0 but is %u.\n", + (unsigned int)LE16(Request->Opnum) + ); + + if (LE32(Request->AllocHint) != len - sizeof(RPC_REQUEST) + sizeof(Request->Ndr)) + logger("Warning: Allocation hint should be %u but is %u.\n", + len + sizeof(Request->Ndr), + LE32(Request->AllocHint) + ); + + if (Ctx != *Ndr64Ctx) + { + if (LE32(Request->Ndr.DataLength) != len - sizeof(RPC_REQUEST)) + logger("Warning: NDR32 data length field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST), + LE32(Request->Ndr.DataLength) + ); + + if (LE32(Request->Ndr.DataSizeIs) != len - sizeof(RPC_REQUEST)) + logger("Warning: NDR32 data size field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST), + LE32(Request->Ndr.DataSizeIs) + ); + } + else + { + if (LE64(Request->Ndr64.DataLength) != len - sizeof(RPC_REQUEST64)) + logger("Warning: NDR32 data length field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST) + sizeof(Request->Ndr), + LE64(Request->Ndr64.DataLength) + ); + + if (LE64(Request->Ndr64.DataSizeIs) != len - sizeof(RPC_REQUEST64)) + logger("Warning: NDR32 data size field should be %u but is %u.\n", + len - sizeof(RPC_REQUEST64), + LE64(Request->Ndr64.DataSizeIs) + ); + } +} +#endif // defined(_PEDANTIC) && !defined(NO_LOG) + +/* + * check RPC request for (somewhat) correct size + * allow any size that does not cause CreateResponse to fail badly + */ +static unsigned int checkRpcRequestSize(const RPC_REQUEST64 *const Request, const unsigned int requestSize, WORD* NdrCtx, WORD* Ndr64Ctx) +{ + WORD Ctx = LE16(Request->ContextId); + +# if defined(_PEDANTIC) && !defined(NO_LOG) + CheckRpcRequest(Request, requestSize, NdrCtx, Ndr64Ctx, Ctx); +# endif // defined(_PEDANTIC) && !defined(NO_LOG) + + // Anything that is smaller than a v4 request is illegal + if (requestSize < sizeof(REQUEST_V4) + (Ctx != *Ndr64Ctx ? sizeof(RPC_REQUEST) : sizeof(RPC_REQUEST64))) return 0; + + // Get KMS major version + uint_fast16_t _v; + + if (Ctx != *Ndr64Ctx) + _v = LE16(((WORD*)Request->Ndr.Data)[1]) - 4; + else + _v = LE16(((WORD*)Request->Ndr64.Data)[1]) - 4; + + // Only KMS v4, v5 and v6 are supported + if (_v >= vlmcsd_countof(_Versions)) + { +# ifndef NO_LOG + logger("Fatal: KMSv%i unsupported\n", _v + 4); +# endif // NO_LOG + return 0; + } + + // Could check for equality but allow bigger requests to support buggy RPC clients (e.g. wine) + // Buffer overrun is check by caller. + return (requestSize >= _Versions[_v].RequestSize); +} + + +/* + * Handles the actual KMS request from the client. + * Calls KMS functions (CreateResponseV4 or CreateResponseV6) in kms.c + * Returns size of the KMS response packet or 0 on failure. + * + * The RPC packet size (excluding header) is actually in Response->AllocHint + */ +static int rpcRequest(const RPC_REQUEST64 *const Request, RPC_RESPONSE64 *const Response, const DWORD RpcAssocGroup_unused, const SOCKET sock_unused, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE packetType, const char* const ipstr) +{ + uint_fast16_t _v; + int ResponseSize; + WORD Ctx = LE16(Request->ContextId); + BYTE* requestData; + BYTE* responseData; + BYTE* pRpcReturnCode; + int len; + + if (Ctx != *Ndr64Ctx) + { + requestData = (BYTE*)&Request->Ndr.Data; + responseData = (BYTE*)&Response->Ndr.Data; + } + else + { + requestData = (BYTE*)&Request->Ndr64.Data; + responseData = (BYTE*)&Response->Ndr64.Data; + } + + _v = LE16(((WORD*)requestData)[1]) - 4; + + if (!(ResponseSize = _Versions[_v].CreateResponse(requestData, responseData, ipstr))) + { + return 0; + } + + if (Ctx != *Ndr64Ctx) + { + Response->Ndr.DataSizeMax = LE32(0x00020000); + Response->Ndr.DataLength = Response->Ndr.DataSizeIs = LE32(ResponseSize); + len = ResponseSize + sizeof(Response->Ndr); + } + else + { + Response->Ndr64.DataSizeMax = LE64(0x00020000ULL); + Response->Ndr64.DataLength = Response->Ndr64.DataSizeIs = LE64((uint64_t)ResponseSize); + len = ResponseSize + sizeof(Response->Ndr64); + } + + pRpcReturnCode = ((BYTE*)&Response->Ndr) + len; + UA32(pRpcReturnCode) = 0; //LE32 not needed for 0 + len += sizeof(DWORD); + + // Pad zeros to 32-bit align (seems not neccassary but Windows RPC does it this way) + int pad = ((~len & 3) + 1) & 3; + memset(pRpcReturnCode + sizeof(DWORD), 0, pad); + len += pad; + + Response->AllocHint = LE32(len); + Response->ContextId = Request->ContextId; + + *((WORD*)&Response->CancelCount) = 0; // CancelCount + Pad1 + + return len + 8; +} + + +#if defined(_PEDANTIC) && !defined(NO_LOG) +static void CheckRpcBindRequest(const RPC_BIND_REQUEST *const Request, const unsigned int len) +{ + uint_fast8_t i, HasTransferSyntaxNDR32 = FALSE; + char guidBuffer1[GUID_STRING_LENGTH + 1], guidBuffer2[GUID_STRING_LENGTH + 1]; + + uint32_t CapCtxItems = (len - sizeof(*Request) + sizeof(Request->CtxItems)) / sizeof(Request->CtxItems); + DWORD NumCtxItems = LE32(Request->NumCtxItems); + + if (NumCtxItems < CapCtxItems) // Can't be too small because already handled by RpcBindSize + logger("Warning: Excess bytes in RPC bind request.\n"); + + for (i = 0; i < NumCtxItems; i++) + { + if (!IsEqualGUID(&Request->CtxItems[i].InterfaceUUID, InterfaceUuid)) + { + uuid2StringLE((GUID*)&Request->CtxItems[i].InterfaceUUID, guidBuffer1); + uuid2StringLE((GUID*)InterfaceUuid, guidBuffer2); + logger("Warning: Interface UUID is %s but should be %s in Ctx item %u.\n", guidBuffer1, guidBuffer2, (unsigned int)i); + } + + if (Request->CtxItems[i].NumTransItems != LE16(1)) + logger("Fatal: %u NDR32 transfer items detected in Ctx item %u, but only one is supported.\n", + (unsigned int)LE16(Request->CtxItems[i].NumTransItems), (unsigned int)i + ); + + if (Request->CtxItems[i].InterfaceVerMajor != LE16(1) || Request->CtxItems[i].InterfaceVerMinor != 0) + logger("Warning: NDR32 Interface version is %u.%u but should be 1.0.\n", + (unsigned int)LE16(Request->CtxItems[i].InterfaceVerMajor), + (unsigned int)LE16(Request->CtxItems[i].InterfaceVerMinor) + ); + + if (Request->CtxItems[i].ContextId != LE16((WORD)i)) + logger("Warning: context id of Ctx item %u is %u.\n", (unsigned int)i, (unsigned int)Request->CtxItems[i].ContextId); + + if ( IsEqualGUID((GUID*)TransferSyntaxNDR32, &Request->CtxItems[i].TransferSyntax) ) + { + HasTransferSyntaxNDR32 = TRUE; + + if (Request->CtxItems[i].SyntaxVersion != LE32(2)) + logger("NDR32 transfer syntax version is %u but should be 2.\n", LE32(Request->CtxItems[i].SyntaxVersion)); + } + else if ( IsEqualGUID((GUID*)TransferSyntaxNDR64, &Request->CtxItems[i].TransferSyntax) ) + { + if (Request->CtxItems[i].SyntaxVersion != LE32(1)) + logger("NDR64 transfer syntax version is %u but should be 1.\n", LE32(Request->CtxItems[i].SyntaxVersion)); + } + else if (!memcmp(BindTimeFeatureNegotiation, (BYTE*)(&Request->CtxItems[i].TransferSyntax), 8)) + { + if (Request->CtxItems[i].SyntaxVersion != LE32(1)) + logger("BTFN syntax version is %u but should be 1.\n", LE32(Request->CtxItems[i].SyntaxVersion)); + } + } + + if (!HasTransferSyntaxNDR32) + logger("Warning: RPC bind request has no NDR32 CtxItem.\n"); +} +#endif // defined(_PEDANTIC) && !defined(NO_LOG) + + +/* + * Check, if we receive enough bytes to return a valid RPC bind response + */ +static unsigned int checkRpcBindSize(const RPC_BIND_REQUEST *const Request, const unsigned int RequestSize, WORD* NdrCtx, WORD* Ndr64Ctx) +{ + if ( RequestSize < sizeof(RPC_BIND_REQUEST) ) return FALSE; + + unsigned int _NumCtxItems = LE32(Request->NumCtxItems); + + if ( RequestSize < sizeof(RPC_BIND_REQUEST) - sizeof(Request->CtxItems[0]) + _NumCtxItems * sizeof(Request->CtxItems[0]) ) return FALSE; + + #if defined(_PEDANTIC) && !defined(NO_LOG) + CheckRpcBindRequest(Request, RequestSize); + #endif // defined(_PEDANTIC) && !defined(NO_LOG) + + return TRUE; +} + + +/* + * Accepts a bind or alter context request from the client and composes the bind response. + * Needs the socket because the tcp port number is part of the response. + * len is not used here. + * + * Returns TRUE on success. + */ +static int rpcBind(const RPC_BIND_REQUEST *const Request, RPC_BIND_RESPONSE* Response, const DWORD RpcAssocGroup, const SOCKET sock, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE packetType, const char* const ipstr_unused) +{ + unsigned int i, _st = FALSE; + DWORD numCtxItems = LE32(Request->NumCtxItems); + int_fast8_t IsNDR64possible = FALSE; + uint_fast8_t portNumberSize; + + socklen_t socklen; + struct sockaddr_storage addr; + + // M$ RPC does not do this. Pad bytes contain apparently random data + // memset(Response->SecondaryAddress, 0, sizeof(Response->SecondaryAddress)); + + socklen = sizeof addr; + + if ( + packetType == RPC_PT_ALTERCONTEXT_REQ || + getsockname(sock, (struct sockaddr*)&addr, &socklen) || + getnameinfo((struct sockaddr*)&addr, socklen, NULL, 0, (char*)Response->SecondaryAddress, sizeof(Response->SecondaryAddress), NI_NUMERICSERV)) + { + portNumberSize = Response->SecondaryAddressLength = 0; + } + else + { + portNumberSize = strlen((char*)Response->SecondaryAddress) + 1; + Response->SecondaryAddressLength = LE16(portNumberSize); + } + + Response->MaxXmitFrag = Request->MaxXmitFrag; + Response->MaxRecvFrag = Request->MaxRecvFrag; + Response->AssocGroup = LE32(RpcAssocGroup); + + // This is really ugly (but efficient) code to support padding after the secondary address field + if (portNumberSize < 3) + { + Response = (RPC_BIND_RESPONSE*)((BYTE*)Response - 4); + } + + Response->NumResults = Request->NumCtxItems; + + if (UseRpcNDR64) + { + for (i = 0; i < numCtxItems; i++) + { + if ( IsEqualGUID((GUID*)TransferSyntaxNDR32, &Request->CtxItems[i].TransferSyntax) ) + { + /*if (packetType == RPC_PT_BIND_REQ)*/ + *NdrCtx = LE16(Request->CtxItems[i].ContextId); + } + + if ( IsEqualGUID((GUID*)TransferSyntaxNDR64, &Request->CtxItems[i].TransferSyntax) ) + { + IsNDR64possible = TRUE; + + /*if (packetType == RPC_PT_BIND_REQ)*/ + *Ndr64Ctx = LE16(Request->CtxItems[i].ContextId); + } + } + } + + for (i = 0; i < numCtxItems; i++) + { + memset(&Response->Results[i].TransferSyntax, 0, sizeof(GUID)); + + if ( !IsNDR64possible && IsEqualGUID((GUID*)TransferSyntaxNDR32, &Request->CtxItems[i].TransferSyntax) ) + { + Response->Results[i].SyntaxVersion = LE32(2); + Response->Results[i].AckResult = + Response->Results[i].AckReason = RPC_BIND_ACCEPT; + memcpy(&Response->Results[i].TransferSyntax, TransferSyntaxNDR32, sizeof(GUID)); + + _st = TRUE; + } + else if ( IsNDR64possible && IsEqualGUID((GUID*)TransferSyntaxNDR64, &Request->CtxItems[i].TransferSyntax) ) + { + Response->Results[i].SyntaxVersion = LE32(1); + Response->Results[i].AckResult = + Response->Results[i].AckReason = RPC_BIND_ACCEPT; + memcpy(&Response->Results[i].TransferSyntax, TransferSyntaxNDR64, sizeof(GUID)); + + _st = TRUE; + } + else if ( UseRpcBTFN && !memcmp(BindTimeFeatureNegotiation, (BYTE*)(&Request->CtxItems[i].TransferSyntax), 8) ) + { + Response->Results[i].SyntaxVersion = 0; + Response->Results[i].AckResult = RPC_BIND_ACK; + + // Features requested are actually encoded in the GUID + Response->Results[i].AckReason = + ((WORD*)(&Request->CtxItems[i].TransferSyntax))[4] & + (RPC_BTFN_SEC_CONTEXT_MULTIPLEX | RPC_BTFN_KEEP_ORPHAN); + } + else + { + Response->Results[i].SyntaxVersion = 0; + Response->Results[i].AckResult = + Response->Results[i].AckReason = RPC_BIND_NACK; // Unsupported + } + } + + if ( !_st ) return 0; + + return sizeof(RPC_BIND_RESPONSE) + numCtxItems * sizeof(((RPC_BIND_RESPONSE *)0)->Results[0]) - (portNumberSize < 3 ? 4 : 0); +} + + +// +// Main RPC handling routine +// +typedef unsigned int (*GetResponseSize_t)(const void *const request, const unsigned int requestSize, WORD* NdrCtx, WORD* Ndr64Ctx); +typedef int (*GetResponse_t)(const void* const request, void* response, const DWORD rpcAssocGroup, const SOCKET socket, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE packetType, const char* const ipstr); + +static const struct { + BYTE ResponsePacketType; + GetResponseSize_t CheckRequestSize; + GetResponse_t GetResponse; +} +_Actions[] = { + { RPC_PT_BIND_ACK, (GetResponseSize_t)checkRpcBindSize, (GetResponse_t) rpcBind }, + { RPC_PT_RESPONSE, (GetResponseSize_t)checkRpcRequestSize, (GetResponse_t) rpcRequest }, + { RPC_PT_ALTERCONTEXT_ACK, (GetResponseSize_t)checkRpcBindSize, (GetResponse_t) rpcBind }, +}; + + +/* + * This is the main RPC server loop. Returns after KMS request has been serviced + * or a timeout has occured. + */ +void rpcServer(const SOCKET sock, const DWORD RpcAssocGroup, const char* const ipstr) +{ + RPC_HEADER rpcRequestHeader; + WORD NdrCtx = INVALID_NDR_CTX, Ndr64Ctx = INVALID_NDR_CTX; + + randomNumberInit(); + + while (_recv(sock, &rpcRequestHeader, sizeof(rpcRequestHeader))) + { + //int_fast8_t _st; + unsigned int request_len, response_len; + uint_fast8_t _a; + + #if defined(_PEDANTIC) && !defined(NO_LOG) + checkRpcHeader(&rpcRequestHeader, rpcRequestHeader.PacketType, &logger); + #endif // defined(_PEDANTIC) && !defined(NO_LOG) + + switch (rpcRequestHeader.PacketType) + { + case RPC_PT_BIND_REQ: _a = 0; break; + case RPC_PT_REQUEST: _a = 1; break; + case RPC_PT_ALTERCONTEXT_REQ: _a = 2; break; + default: return; + } + + request_len = LE16(rpcRequestHeader.FragLength) - sizeof(rpcRequestHeader); + + BYTE requestBuffer[MAX_REQUEST_SIZE + sizeof(RPC_RESPONSE64)]; + BYTE responseBuffer[MAX_RESPONSE_SIZE + sizeof(RPC_HEADER) + sizeof(RPC_RESPONSE64)]; + + RPC_HEADER *rpcResponseHeader = (RPC_HEADER *)responseBuffer; + RPC_RESPONSE* rpcResponse = (RPC_RESPONSE*)(responseBuffer + sizeof(rpcRequestHeader)); + + // The request is larger than the buffer size + if (request_len > MAX_REQUEST_SIZE + sizeof(RPC_REQUEST64)) return; + + // Unable to receive the complete request + if (!_recv(sock, requestBuffer, request_len)) return; + + // Request is invalid + if (!_Actions[_a].CheckRequestSize(requestBuffer, request_len, &NdrCtx, &Ndr64Ctx)) return; + + // Unable to create a valid response from request + if (!(response_len = _Actions[_a].GetResponse(requestBuffer, rpcResponse, RpcAssocGroup, sock, &NdrCtx, &Ndr64Ctx, rpcRequestHeader.PacketType, ipstr))) return; + + response_len += sizeof(RPC_HEADER); + + memcpy(rpcResponseHeader, &rpcRequestHeader, sizeof(RPC_HEADER)); + + rpcResponseHeader->FragLength = LE16(response_len); + rpcResponseHeader->PacketType = _Actions[_a].ResponsePacketType; + + if (rpcResponseHeader->PacketType == RPC_PT_ALTERCONTEXT_ACK) + rpcResponseHeader->PacketFlags = RPC_PF_FIRST | RPC_PF_LAST; + + if (!_send(sock, responseBuffer, response_len)) return; + + if (DisconnectImmediately && rpcResponseHeader->PacketType == RPC_PT_RESPONSE) + shutdown(sock, VLMCSD_SHUT_RDWR); + } +} + + +/* RPC client functions */ + +static DWORD CallId = 2; // M$ starts with CallId 2. So we do the same. + + +/* + * Checks RPC header. Returns 0 on success. + * This is mainly for debugging a non Microsoft KMS server that uses its own RPC code. + */ +static int checkRpcHeader(const RPC_HEADER *const Header, const BYTE desiredPacketType, const PRINTFUNC p) +{ + int status = 0; + + if (Header->PacketType != desiredPacketType) + { + p("Fatal: Received wrong RPC packet type. Expected %u but got %u\n", + (uint32_t)desiredPacketType, + Header->PacketType + ); + status = !0; + } + + if (Header->DataRepresentation != BE32(0x10000000)) + { + p("Fatal: RPC response does not conform to Microsoft's limited support of DCE RPC\n"); + status = !0; + } + + if (Header->AuthLength != 0) + { + p("Fatal: RPC response requests authentication\n"); + status = !0; + } + + // vlmcsd does not support fragmented packets (not yet neccassary) + if ( (Header->PacketFlags & (RPC_PF_FIRST | RPC_PF_LAST)) != (RPC_PF_FIRST | RPC_PF_LAST) ) + { + p("Fatal: RPC packet flags RPC_PF_FIRST and RPC_PF_LAST are not both set.\n"); + status = !0; + } + + if (Header->PacketFlags & RPC_PF_CANCEL_PENDING) p("Warning: %s should not be set\n", "RPC_PF_CANCEL_PENDING"); + if (Header->PacketFlags & RPC_PF_RESERVED) p("Warning: %s should not be set\n", "RPC_PF_RESERVED"); + if (Header->PacketFlags & RPC_PF_NOT_EXEC) p("Warning: %s should not be set\n", "RPC_PF_NOT_EXEC"); + if (Header->PacketFlags & RPC_PF_MAYBE) p("Warning: %s should not be set\n", "RPC_PF_MAYBE"); + if (Header->PacketFlags & RPC_PF_OBJECT) p("Warning: %s should not be set\n", "RPC_PF_OBJECT"); + + if (Header->VersionMajor != 5 || Header->VersionMinor != 0) + { + p("Fatal: Expected RPC version 5.0 and got %u.%u\n", Header->VersionMajor, Header->VersionMinor); + status = !0; + } + + return status; +} + + +/* + * Checks an RPC response header. Does basic header checks by calling checkRpcHeader() + * and then does additional checks if response header complies with the respective request header. + * PRINTFUNC p can be anything that has the same prototype as printf. + * Returns 0 on success. + */ +static int checkRpcResponseHeader(const RPC_HEADER *const ResponseHeader, const RPC_HEADER *const RequestHeader, const BYTE desiredPacketType, const PRINTFUNC p) +{ + static int_fast8_t WineBugDetected = FALSE; + int status = checkRpcHeader(ResponseHeader, desiredPacketType, p); + + if (desiredPacketType == RPC_PT_BIND_ACK) + { + if ((ResponseHeader->PacketFlags & RPC_PF_MULTIPLEX) != (RequestHeader->PacketFlags & RPC_PF_MULTIPLEX)) + { + p("Warning: RPC_PF_MULTIPLEX of RPC request and response should match\n"); + } + } + else + { + if (ResponseHeader->PacketFlags & RPC_PF_MULTIPLEX) + { + p("Warning: %s should not be set\n", "RPC_PF_MULTIPLEX"); + } + } + + if (!status && ResponseHeader->CallId == LE32(1)) + { + if (!WineBugDetected) + { + p("Warning: Buggy RPC of Wine detected. Call Id of Response is always 1\n"); + WineBugDetected = TRUE; + } + } + else if (ResponseHeader->CallId != RequestHeader->CallId) + { + p("Fatal: Sent Call Id %u but received answer for Call Id %u\n", + (uint32_t)LE32(RequestHeader->CallId), + (uint32_t)LE32(ResponseHeader->CallId) + ); + + status = !0; + } + + return status; +} + +/* + * Initializes an RPC request header as needed for KMS, i.e. packet always fits in one fragment. + * size cannot be greater than fragment length negotiated during RPC bind. + */ +static void createRpcRequestHeader(RPC_HEADER* RequestHeader, BYTE packetType, WORD size) +{ + RequestHeader->PacketType = packetType; + RequestHeader->PacketFlags = RPC_PF_FIRST | RPC_PF_LAST; + RequestHeader->VersionMajor = 5; + RequestHeader->VersionMinor = 0; + RequestHeader->AuthLength = 0; + RequestHeader->DataRepresentation = BE32(0x10000000); // Little endian, ASCII charset, IEEE floating point + RequestHeader->CallId = LE32(CallId); + RequestHeader->FragLength = LE16(size); +} + + +/* + * Sends a KMS request via RPC and receives a response. + * Parameters are raw (encrypted) reqeuests / responses. + * Returns 0 on success. + */ +RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const size_t requestSize, BYTE **KmsResponse, size_t *const responseSize) +{ + #define MAX_EXCESS_BYTES 16 + RPC_HEADER *RequestHeader, ResponseHeader; + RPC_REQUEST64 *RpcRequest; + RPC_RESPONSE64 _Response; + int status = 0; + int_fast8_t useNdr64 = UseRpcNDR64 && firstPacketSent; + size_t size = sizeof(RPC_HEADER) + (useNdr64 ? sizeof(RPC_REQUEST64) : sizeof(RPC_REQUEST)) + requestSize; + size_t responseSize2; + + *KmsResponse = NULL; + + BYTE *_Request = (BYTE*)vlmcsd_malloc(size); + + RequestHeader = (RPC_HEADER*)_Request; + RpcRequest = (RPC_REQUEST64*)(_Request + sizeof(RPC_HEADER)); + + createRpcRequestHeader(RequestHeader, RPC_PT_REQUEST, size); + + // Increment CallId for next Request + CallId++; + + RpcRequest->Opnum = 0; + + if (useNdr64) + { + RpcRequest->ContextId = LE16(1); // We negotiate NDR64 always as context 1 + RpcRequest->AllocHint = LE32(requestSize + sizeof(RpcRequest->Ndr64)); + RpcRequest->Ndr64.DataLength = LE64((uint64_t)requestSize); + RpcRequest->Ndr64.DataSizeIs = LE64((uint64_t)requestSize); + memcpy(RpcRequest->Ndr64.Data, KmsRequest, requestSize); + } + else + { + RpcRequest->ContextId = 0; // We negotiate NDR32 always as context 0 + RpcRequest->AllocHint = LE32(requestSize + sizeof(RpcRequest->Ndr)); + RpcRequest->Ndr.DataLength = LE32(requestSize); + RpcRequest->Ndr.DataSizeIs = LE32(requestSize); + memcpy(RpcRequest->Ndr.Data, KmsRequest, requestSize); + } + + for(;;) + { + int bytesread; + + if (!_send(sock, _Request, size)) + { + errorout("\nFatal: Could not send RPC request\n"); + status = !0; + break; + } + + if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER))) + { + errorout("\nFatal: No RPC response received from server\n"); + status = !0; + break; + } + + if ((status = checkRpcResponseHeader(&ResponseHeader, RequestHeader, RPC_PT_RESPONSE, &errorout))) break; + + size = useNdr64 ? sizeof(RPC_RESPONSE64) : sizeof(RPC_RESPONSE); + + if (size > LE16(ResponseHeader.FragLength) - sizeof(ResponseHeader)) + size = LE16(ResponseHeader.FragLength) - sizeof(ResponseHeader); + + if (!_recv(sock, &_Response, size)) + { + errorout("\nFatal: RPC response is incomplete\n"); + status = !0; + break; + } + + if (_Response.CancelCount != 0) + { + errorout("\nFatal: RPC response cancel count is not 0\n"); + status = !0; + } + + if (_Response.ContextId != (useNdr64 ? LE16(1) : 0)) + { + errorout("\nFatal: RPC response context id %u is not bound\n", (unsigned int)LE16(_Response.ContextId)); + status = !0; + } + + int_fast8_t sizesMatch; + + if (useNdr64) + { + *responseSize = (size_t)LE64(_Response.Ndr64.DataLength); + responseSize2 = (size_t)LE64(_Response.Ndr64.DataSizeIs); + + if (!*responseSize || !_Response.Ndr64.DataSizeMax) + { + status = (int)LE32(_Response.Ndr64.status); + break; + } + + sizesMatch = (size_t)LE64(_Response.Ndr64.DataLength) == responseSize2; + } + else + { + *responseSize = (size_t)LE32(_Response.Ndr.DataLength); + responseSize2 = (size_t)LE32(_Response.Ndr.DataSizeIs); + + if (!*responseSize || !_Response.Ndr.DataSizeMax) + { + status = (int)LE32(_Response.Ndr.status); + break; + } + + sizesMatch = (size_t)LE32(_Response.Ndr.DataLength) == responseSize2; + } + + if (!sizesMatch) + { + errorout("\nFatal: NDR data length (%u) does not match NDR data size (%u)\n", + (uint32_t)*responseSize, + (uint32_t)LE32(_Response.Ndr.DataSizeIs) + ); + + status = !0; + } + + *KmsResponse = (BYTE*)vlmcsd_malloc(*responseSize + MAX_EXCESS_BYTES); + + // If RPC stub is too short, assume missing bytes are zero (same ill behavior as MS RPC) + memset(*KmsResponse, 0, *responseSize + MAX_EXCESS_BYTES); + + // Read up to 16 bytes more than bytes expected to detect faulty KMS emulators + if ((bytesread = recv(sock, (char*)*KmsResponse, *responseSize + MAX_EXCESS_BYTES, 0)) < (int)*responseSize) + { + errorout("\nFatal: No or incomplete KMS response received. Required %u bytes but only got %i\n", + (uint32_t)*responseSize, + (int32_t)(bytesread < 0 ? 0 : bytesread) + ); + + status = !0; + break; + } + + DWORD *pReturnCode; + + size_t len = *responseSize + (useNdr64 ? sizeof(_Response.Ndr64) : sizeof(_Response.Ndr)) + sizeof(*pReturnCode); + size_t pad = ((~len & 3) + 1) & 3; + + if (len + pad != LE32(_Response.AllocHint)) + { + errorout("\nWarning: RPC stub size is %u, should be %u (probably incorrect padding)\n", (uint32_t)LE32(_Response.AllocHint), (uint32_t)(len + pad)); + } + else + { + size_t i; + for (i = 0; i < pad; i++) + { + if (*(*KmsResponse + *responseSize + sizeof(*pReturnCode) + i)) + { + errorout("\nWarning: RPC stub data not padded to zeros according to Microsoft standard\n"); + break; + } + } + } + + pReturnCode = (DWORD*)(*KmsResponse + *responseSize + pad); + status = LE32(UA32(pReturnCode)); + + if (status) errorout("\nWarning: RPC stub data reported Error %u\n", (uint32_t)status); + + break; + } + + free(_Request); + firstPacketSent = TRUE; + return status; + #undef MAX_EXCESS_BYTES +} + + +static int_fast8_t IsNullGuid(BYTE* guidPtr) +{ + int_fast8_t i; + + for (i = 0; i < 16; i++) + { + if (guidPtr[i]) return FALSE; + } + + return TRUE; +} + +/* + * Perform RPC client bind. Accepts a connected client socket. + * Returns 0 on success. RPC binding is required before any payload can be + * exchanged. It negotiates about protocol details. + */ +RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const int_fast8_t verbose) +{ + RPC_HEADER *RequestHeader, ResponseHeader; + RPC_BIND_REQUEST *bindRequest; + RPC_BIND_RESPONSE *bindResponse; + int status; + WORD ctxItems = 1 + (packetType == RPC_PT_BIND_REQ ? UseRpcNDR64 + UseRpcBTFN : 0); + size_t rpcBindSize = (sizeof(RPC_HEADER) + sizeof(RPC_BIND_REQUEST) + (ctxItems - 1) * sizeof(bindRequest->CtxItems[0])); + WORD ctxIndex = 0; + WORD i; + WORD CtxBTFN = (WORD)~0, CtxNDR64 = (WORD)~0; + BYTE _Request[rpcBindSize]; + + RequestHeader = (RPC_HEADER*)_Request; + bindRequest = (RPC_BIND_REQUEST* )(_Request + sizeof(RPC_HEADER)); + + createRpcRequestHeader(RequestHeader, packetType, rpcBindSize); + RequestHeader->PacketFlags |= UseMultiplexedRpc ? RPC_PF_MULTIPLEX : 0; + + bindRequest->AssocGroup = 0; + bindRequest->MaxRecvFrag = bindRequest->MaxXmitFrag = LE16(5840); + bindRequest->NumCtxItems = LE32(ctxItems); + + // data that is identical in all Ctx items + for (i = 0; i < ctxItems; i++) + { + bindRequest->CtxItems[i].ContextId = LE16(i); + bindRequest->CtxItems[i].InterfaceVerMajor = LE16(1); + bindRequest->CtxItems[i].InterfaceVerMinor = 0; + bindRequest->CtxItems[i].NumTransItems = LE16(1); + bindRequest->CtxItems[i].SyntaxVersion = i ? LE32(1) : LE32(2); + + memcpy(&bindRequest->CtxItems[i].InterfaceUUID, InterfaceUuid, sizeof(GUID)); + } + + memcpy(&bindRequest->CtxItems[0].TransferSyntax, TransferSyntaxNDR32, sizeof(GUID)); + + if (UseRpcNDR64 && packetType == RPC_PT_BIND_REQ) + { + memcpy(&bindRequest->CtxItems[++ctxIndex].TransferSyntax, TransferSyntaxNDR64, sizeof(GUID)); + CtxNDR64 = ctxIndex; + } + + if (UseRpcBTFN && packetType == RPC_PT_BIND_REQ) + { + memcpy(&bindRequest->CtxItems[++ctxIndex].TransferSyntax, BindTimeFeatureNegotiation, sizeof(GUID)); + CtxBTFN = ctxIndex; + } + + if (!_send(sock, _Request, rpcBindSize)) + { + errorout("\nFatal: Sending RPC bind request failed\n"); + return !0; + } + + if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER))) + { + errorout("\nFatal: Did not receive a response from server\n"); + return !0; + } + + if ((status = checkRpcResponseHeader + ( + &ResponseHeader, + RequestHeader, + packetType == RPC_PT_BIND_REQ ? RPC_PT_BIND_ACK : RPC_PT_ALTERCONTEXT_ACK, + &errorout + ))) + { + return status; + } + + bindResponse = (RPC_BIND_RESPONSE*)vlmcsd_malloc(LE16(ResponseHeader.FragLength) - sizeof(RPC_HEADER)); + BYTE* bindResponseBytePtr = (BYTE*)bindResponse; + + if (!_recv(sock, bindResponse, LE16(ResponseHeader.FragLength) - sizeof(RPC_HEADER))) + { + errorout("\nFatal: Incomplete RPC bind acknowledgement received\n"); + free(bindResponseBytePtr); + return !0; + } + else + { + /* + * checking, whether a bind or alter context response is as expected. + * This check is very strict and checks whether a KMS emulator behaves exactly the same way + * as Microsoft's RPC does. + */ + status = 0; + + if (bindResponse->SecondaryAddressLength < LE16(3)) + bindResponse = (RPC_BIND_RESPONSE*)(bindResponseBytePtr - 4); + + if (bindResponse->NumResults != bindRequest->NumCtxItems) + { + errorout("\nFatal: Expected %u CTX items but got %u\n", + (uint32_t)LE32(bindRequest->NumCtxItems), + (uint32_t)LE32(bindResponse->NumResults) + ); + + status = !0; + } + + for (i = 0; i < ctxItems; i++) + { + const char* transferSyntaxName = + i == CtxBTFN ? "BTFN" : i == CtxNDR64 ? "NDR64" : "NDR32"; + + if (bindResponse->Results[i].AckResult == RPC_BIND_NACK) // transfer syntax was declined + { + if (!IsNullGuid((BYTE*)&bindResponse->Results[i].TransferSyntax)) + { + errorout( + "\nWarning: Rejected transfer syntax %s did not return NULL Guid\n", + transferSyntaxName + ); + } + + if (bindResponse->Results[i].SyntaxVersion) + { + errorout( + "\nWarning: Rejected transfer syntax %s did not return syntax version 0 but %u\n", + transferSyntaxName, + LE32(bindResponse->Results[i].SyntaxVersion) + ); + } + + if (bindResponse->Results[i].AckReason == RPC_ABSTRACTSYNTAX_UNSUPPORTED) + { + errorout( + "\nWarning: Transfer syntax %s does not support KMS activation\n", + transferSyntaxName + ); + } + else if (bindResponse->Results[i].AckReason != RPC_SYNTAX_UNSUPPORTED) + { + errorout( + "\nWarning: Rejected transfer syntax %s did not return ack reason RPC_SYNTAX_UNSUPPORTED\n", + transferSyntaxName + ); + } + + continue; + } + + if (i == CtxBTFN) // BTFN + { + if (bindResponse->Results[i].AckResult != RPC_BIND_ACK) + { + errorout("\nWarning: BTFN did not respond with RPC_BIND_ACK or RPC_BIND_NACK\n"); + } + + if (bindResponse->Results[i].AckReason != LE16(3)) + { + errorout("\nWarning: BTFN did not return expected feature mask 0x3 but 0x%X\n", (unsigned int)LE16(bindResponse->Results[i].AckReason)); + } + + if (verbose) printf("... BTFN "); + RpcFlags.HasBTFN = TRUE; + + continue; + } + + // NDR32 or NDR64 Ctx + if (bindResponse->Results[i].AckResult != RPC_BIND_ACCEPT) + { + errorout( + "\nFatal: transfer syntax %s returned an invalid status, neither RPC_BIND_ACCEPT nor RPC_BIND_NACK\n", + transferSyntaxName + ); + + status = !0; + } + + if (!IsEqualGUID(&bindResponse->Results[i].TransferSyntax, &bindRequest->CtxItems[i].TransferSyntax)) + { + errorout( + "\nFatal: Transfer syntax of RPC bind request and response does not match\n" + ); + + status = !0; + } + + if (bindResponse->Results[i].SyntaxVersion != bindRequest->CtxItems[i].SyntaxVersion) + { + errorout("\nFatal: Expected transfer syntax version %u for %s but got %u\n", + (uint32_t)LE32(bindRequest->CtxItems[0].SyntaxVersion), + transferSyntaxName, + (uint32_t)LE32(bindResponse->Results[0].SyntaxVersion) + ); + + status = !0; + } + + // The ack reason field is actually undefined here but Microsoft sets this to 0 + if (bindResponse->Results[i].AckReason != 0) + { + errorout( + "\nWarning: Ack reason should be 0 but is %u\n", + LE16(bindResponse->Results[i].AckReason) + ); + } + + if (!status) + { + if (i == CtxNDR64) + { + RpcFlags.HasNDR64 = TRUE; + if (verbose) printf("... NDR64 "); + } + if (!i) + { + RpcFlags.HasNDR32 = TRUE; + if (verbose) printf("... NDR32 "); + } + + } + } + } + + free(bindResponseBytePtr); + + if (!RpcFlags.HasNDR64 && !RpcFlags.HasNDR32) + { + errorout("\nFatal: Could neither negotiate NDR32 nor NDR64 with the RPC server\n"); + status = !0; + } + + return status; +} + +RpcStatus rpcBindClient(const RpcCtx sock, const int_fast8_t verbose) +{ + firstPacketSent = FALSE; + RpcFlags.mask = 0; + + RpcStatus status = + rpcBindOrAlterClientContext(sock, RPC_PT_BIND_REQ, verbose); + + if (status) return status; + + if (!RpcFlags.HasNDR32) + status = rpcBindOrAlterClientContext(sock, RPC_PT_ALTERCONTEXT_REQ, verbose); + + return status; +} + +#endif // USE_MSRPC diff --git a/rpc.h b/rpc.h new file mode 100644 index 0000000..86792cb --- /dev/null +++ b/rpc.h @@ -0,0 +1,178 @@ +#ifndef __rpc_h +#define __rpc_h + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "types.h" + +typedef struct { + BYTE VersionMajor; + BYTE VersionMinor; + BYTE PacketType; + BYTE PacketFlags; + DWORD DataRepresentation; + WORD FragLength; + WORD AuthLength; + DWORD CallId; +} /*__packed*/ RPC_HEADER; + + +typedef struct { + WORD MaxXmitFrag; + WORD MaxRecvFrag; + DWORD AssocGroup; + DWORD NumCtxItems; + struct { + WORD ContextId; + WORD NumTransItems; + GUID InterfaceUUID; + WORD InterfaceVerMajor; + WORD InterfaceVerMinor; + GUID TransferSyntax; + DWORD SyntaxVersion; + } CtxItems[1]; +} /*__packed*/ RPC_BIND_REQUEST; + +typedef struct { + WORD MaxXmitFrag; + WORD MaxRecvFrag; + DWORD AssocGroup; + WORD SecondaryAddressLength; + BYTE SecondaryAddress[6]; + DWORD NumResults; + struct { + WORD AckResult; + WORD AckReason; + GUID TransferSyntax; + DWORD SyntaxVersion; + } Results[0]; +} /*__packed*/ RPC_BIND_RESPONSE; + + +typedef struct { + DWORD AllocHint; + WORD ContextId; + WORD Opnum; + struct { + DWORD DataLength; + DWORD DataSizeIs; + } Ndr; + BYTE Data[0]; +} /*__packed*/ RPC_REQUEST; + +typedef struct { + DWORD AllocHint; + WORD ContextId; + BYTE CancelCount; + BYTE Pad1; + struct { + DWORD DataLength; + DWORD DataSizeIs1; + DWORD DataSizeIs2; + } Ndr; + BYTE Data[0]; +} /*__packed*/ RPC_RESPONSE; + +typedef struct { + DWORD AllocHint; + WORD ContextId; + WORD Opnum; + union { + struct { + DWORD DataLength; + DWORD DataSizeIs; + BYTE Data[0]; + } Ndr; + struct { + uint64_t DataLength; + uint64_t DataSizeIs; + BYTE Data[0]; + } Ndr64; + }; +} /*__packed*/ RPC_REQUEST64; + +typedef struct { + DWORD AllocHint; + WORD ContextId; + BYTE CancelCount; + BYTE Pad1; + union { + struct { + DWORD DataLength; + DWORD DataSizeMax; + union + { + DWORD DataSizeIs; + DWORD status; + }; + BYTE Data[0]; + } Ndr; + struct { + uint64_t DataLength; + uint64_t DataSizeMax; + union + { + uint64_t DataSizeIs; + DWORD status; + }; + BYTE Data[0]; + } Ndr64; + }; +} /*__packed*/ RPC_RESPONSE64; + + +typedef SOCKET RpcCtx; +typedef int RpcStatus; + +#define INVALID_NDR_CTX ((WORD)~0) + +#define RPC_BIND_ACCEPT (0) +#define RPC_BIND_NACK (LE16(2)) +#define RPC_BIND_ACK (LE16(3)) + +#define RPC_SYNTAX_UNSUPPORTED (LE16(2)) +#define RPC_ABSTRACTSYNTAX_UNSUPPORTED (LE16(1)) + +#define RPC_BTFN_SEC_CONTEXT_MULTIPLEX (LE16(1)) +#define RPC_BTFN_KEEP_ORPHAN (LE16(2)) + +#define INVALID_RPCCTX INVALID_SOCKET +#define closeRpc socketclose + +#define RPC_PT_REQUEST 0 +#define RPC_PT_RESPONSE 2 +#define RPC_PT_BIND_REQ 11 +#define RPC_PT_BIND_ACK 12 +#define RPC_PT_ALTERCONTEXT_REQ 14 +#define RPC_PT_ALTERCONTEXT_ACK 15 + +#define RPC_PF_FIRST 1 +#define RPC_PF_LAST 2 +#define RPC_PF_CANCEL_PENDING 4 +#define RPC_PF_RESERVED 8 +#define RPC_PF_MULTIPLEX 16 +#define RPC_PF_NOT_EXEC 32 +#define RPC_PF_MAYBE 64 +#define RPC_PF_OBJECT 128 + +typedef union _RPC_FLAGS +{ + DWORD mask; + struct { + uint32_t FlagsBTFN : 16; + BOOL HasNDR32 : 1; + BOOL HasNDR64 : 1; + BOOL HasBTFN : 1; + }; +} RPC_FLAGS, *PRPC_FLAGS; + +extern RPC_FLAGS RpcFlags; + +void rpcServer(const RpcCtx socket, const DWORD RpcAssocGroup, const char* const ipstr); +RpcStatus rpcBindClient(const RpcCtx sock, const int_fast8_t verbose); +RpcStatus rpcSendRequest(const RpcCtx socket, const BYTE *const KmsRequest, const size_t requestSize, BYTE **KmsResponse, size_t *const responseSize); + +#endif // __rpc_h diff --git a/shared_globals.c b/shared_globals.c new file mode 100644 index 0000000..f7f3265 --- /dev/null +++ b/shared_globals.c @@ -0,0 +1,98 @@ +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include "shared_globals.h" + +int global_argc, multi_argc = 0; +CARGV global_argv, multi_argv = NULL; +const char *const Version = VERSION; +DWORD VLActivationInterval = 60 * 2; // 2 hours +DWORD VLRenewalInterval = 60 * 24 * 7; // 7 days +int_fast8_t DisconnectImmediately = FALSE; +const char *const cIPv4 = "IPv4"; +const char *const cIPv6 = "IPv6"; + +#ifndef USE_MSRPC +int_fast8_t UseMultiplexedRpc = TRUE; +int_fast8_t UseRpcNDR64 = TRUE; +int_fast8_t UseRpcBTFN = TRUE; +#endif // USE_MSRPC + +#ifndef NO_SOCKETS +const char *defaultport = "1688"; +#endif // NO_SOCKETS + +KmsResponseParam_t KmsResponseParameters[MAX_KMSAPPS]; + +#if !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) +int_fast8_t IsRestarted = FALSE; +#endif // !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) + +#if !defined(NO_TIMEOUT) && !__minix__ +DWORD ServerTimeout = 30; +#endif // !defined(NO_TIMEOUT) && !__minix__ + +#if !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ +#ifdef USE_MSRPC +uint32_t MaxTasks = RPC_C_LISTEN_MAX_CALLS_DEFAULT; +#else // !USE_MSRPC +uint32_t MaxTasks = SEM_VALUE_MAX; +#endif // !USE_MSRPC +#endif // !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ + +#ifndef NO_LOG +char *fn_log = NULL; +int_fast8_t logstdout = 0; +#ifndef NO_VERBOSE_LOG +int_fast8_t logverbose = 0; +#endif // NO_VERBOSE_LOG +#endif // NO_LOG + +#ifndef NO_SOCKETS +int_fast8_t nodaemon = 0; +int_fast8_t InetdMode = 0; +#else +int_fast8_t nodaemon = 1; +int_fast8_t InetdMode = 1; +#endif + +#ifndef NO_RANDOM_EPID +int_fast8_t RandomizationLevel = 1; +uint16_t Lcid = 0; +#endif + +#ifndef NO_SOCKETS +SOCKET *SocketList; +int numsockets = 0; + +#if !defined(NO_LIMIT) && !__minix__ +#ifndef _WIN32 // Posix +sem_t *Semaphore; +#else // _WIN32 +HANDLE Semaphore; +#endif // _WIN32 + +#endif // !defined(NO_LIMIT) && !__minix__ +#endif // NO_SOCKETS + +#ifdef _NTSERVICE +int_fast8_t IsNTService = TRUE; +int_fast8_t ServiceShutdown = FALSE; +#endif // _NTSERVICE + +#ifndef NO_LOG +#ifdef USE_THREADS +#if !defined(_WIN32) && !defined(__CYGWIN__) +pthread_mutex_t logmutex = PTHREAD_MUTEX_INITIALIZER; +#else +CRITICAL_SECTION logmutex; +#endif // !defined(_WIN32) && !defined(__CYGWIN__) +#endif // USE_THREADS +#endif // NO_LOG + + + + + diff --git a/shared_globals.h b/shared_globals.h new file mode 100644 index 0000000..a59618c --- /dev/null +++ b/shared_globals.h @@ -0,0 +1,156 @@ +#ifndef INCLUDED_SHARED_GLOBALS_H +#define INCLUDED_SHARED_GLOBALS_H + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include + +#ifndef _WIN32 +#include +#include +#include +#include +#include +#include +#include +#if (!defined(NO_LIMIT) || defined(USE_THREADS)) && !__minix__ +#include +#endif // (!defined(NO_LIMIT) || defined(USE_THREADS)) && !__minix__ +#include +#include +#if !defined(NO_LIMIT) && !__minix__ +#include +#endif // !defined(NO_LIMIT) && !__minix__ +#else +#ifndef USE_MSRPC +#include +#include +#endif // USE_MSRPC +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "types.h" + +#define MAX_KMSAPPS 3 +typedef struct +{ + const char* Epid; + const BYTE* HwId; + #ifndef NO_LOG + const char* EpidSource; + #endif // NO_LOG +} KmsResponseParam_t, *PKmsResponseParam_t; + +#if !defined(NO_LIMIT) && !__minix__ +#ifndef SEM_VALUE_MAX // Android does not define this +#ifdef __ANDROID__ +#define SEM_VALUE_MAX 0x3fffffff +#elif !defined(_WIN32) +#define SEM_VALUE_MAX 0x7fffffff +#else +#define SEM_VALUE_MAX 0x7fff // Be cautious if unknown +#endif // __ANDROID__ +#endif // !defined(SEM_VALUE_MAX) +#endif // !defined(NO_LIMIT) && !__minix__ + +extern const char *const Version; + +//Fix for stupid eclipse parser +#ifndef UINT_MAX +#define UINT_MAX 4294967295 +#endif + + +extern int global_argc, multi_argc; +extern CARGV global_argv, multi_argv; +extern int_fast8_t nodaemon; +extern DWORD VLActivationInterval; +extern DWORD VLRenewalInterval; +extern int_fast8_t DisconnectImmediately; +extern KmsResponseParam_t KmsResponseParameters[MAX_KMSAPPS]; +extern const char *const cIPv4; +extern const char *const cIPv6; +extern int_fast8_t InetdMode; + +#ifndef USE_MSRPC +extern int_fast8_t UseMultiplexedRpc; +extern int_fast8_t UseRpcNDR64; +extern int_fast8_t UseRpcBTFN; +#endif // USE_MSRPC + +#ifndef NO_SOCKETS +extern const char *defaultport; +#endif // NO_SOCKETS + +#if !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) +extern int_fast8_t IsRestarted; +#endif // !defined(NO_SOCKETS) && !defined(NO_SIGHUP) && !defined(_WIN32) + +#if !defined(NO_TIMEOUT) && !__minix__ +extern DWORD ServerTimeout; +#endif // !defined(NO_TIMEOUT) && !__minix__ + +#if !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ +extern uint32_t MaxTasks; +#endif // !defined(NO_LIMIT) && !defined (NO_SOCKETS) && !__minix__ + +#ifndef NO_LOG +extern char *fn_log; +extern int_fast8_t logstdout; +#ifndef NO_VERBOSE_LOG +extern int_fast8_t logverbose; +#endif +#endif + +#ifndef NO_RANDOM_EPID +extern int_fast8_t RandomizationLevel; +extern uint16_t Lcid; +#endif + +#if !defined(NO_SOCKETS) && !defined(USE_MSRPC) +extern SOCKET *SocketList; +extern int numsockets; + +#if !defined(NO_LIMIT) && !__minix__ + +#ifndef _WIN32 +extern sem_t *Semaphore; +#else // _WIN32 +extern HANDLE Semaphore; +#endif // _WIN32 + +#endif // !defined(NO_LIMIT) && !__minix__ + +#endif // !defined(NO_SOCKETS) && !defined(USE_MSRPC) + +#ifdef _NTSERVICE +extern int_fast8_t IsNTService; +extern int_fast8_t ServiceShutdown; +#endif + +#ifndef NO_LOG +#ifdef USE_THREADS +#if !defined(_WIN32) && !defined(__CYGWIN__) +extern pthread_mutex_t logmutex; +#else +extern CRITICAL_SECTION logmutex; +#endif // _WIN32 +#endif // USE_THREADS +#endif // NO_LOG + + +#endif // INCLUDED_SHARED_GLOBALS_H diff --git a/types.h b/types.h new file mode 100644 index 0000000..4948996 --- /dev/null +++ b/types.h @@ -0,0 +1,266 @@ +#ifndef __types_h +#define __types_h + +#ifndef CONFIG +#define CONFIG "config.h" +#endif // CONFIG +#include CONFIG + +#include +#include +#include + +//#ifdef __sun__ +//#include +//#endif +#ifndef alloca +#ifdef __GNUC__ +#define alloca(x) __builtin_alloca(x) +#endif // __GNUC__ +#endif // alloca + +#ifndef alloca +#if _MSC_VER +#define alloca _malloca +#endif // _MSC_VER +#endif // alloca + +#ifndef alloca +#ifdef __has_builtin // clang feature test +#if __has_builtin(__builtin_alloca) +#define alloca(x) __builtin_alloca(x) +#endif // __has_builtin(__builtin_alloca) +#endif // __has_builtin +#endif // alloca + +#ifndef alloca +#include +#endif + +#ifndef __packed +#if _MSC_VER +#define __packed +#else // !_MSC_VER +#define __packed __attribute__((packed)) +#endif // !_MSC_VER +#endif + +#ifndef __pure +#define __pure __attribute__((pure)) +#endif + +#ifndef __noreturn +#define __noreturn __attribute__((noreturn)) +#endif + +#define restrict __restrict + +typedef struct __packed +{ + uint16_t val[0]; +} PACKED16; + +typedef struct __packed +{ + uint32_t val[0]; +} PACKED32; + +typedef struct __packed +{ + uint64_t val[0]; +} PACKED64; + +// Extend this type to 16 or 32 bits if more than 254 products appear +typedef uint8_t ProdListIndex_t; + +// Deal with Mingw32-w64 C++ header which defines a _countof that is incompatible with vlmcsd +#define vlmcsd_countof(x) ( sizeof(x) / sizeof(x[0]) ) + +// PATH_MAX is optional in Posix. We use a default of 260 here +#ifndef PATH_MAX +#ifdef _WIN32 +#define PATH_MAX MAX_PATH +#else +#define PATH_MAX 260 +#endif // _WIN32 +#endif // !PATH_MAX + +#if PATH_MAX > 260 +#define VLMCSD_PATH_MAX 260 +#else +#define VLMCSD_PATH_MAX PATH_MAX +#endif + +// Synchronization Objects + +// Mutexes +#ifdef USE_THREADS +#if !defined(_WIN32) && !defined(__CYGWIN__) +#define lock_mutex(x) pthread_mutex_lock(x) +#define unlock_mutex(x) pthread_mutex_unlock(x) +#else +#define lock_mutex(x) EnterCriticalSection(x) +#define unlock_mutex(x) LeaveCriticalSection(x) +#endif +#else // !USE_THREADS +//defines to nothing +#define lock_mutex(x) +#define unlock_mutex(x) +#endif // !USE_THREADS + +// Semaphores +#ifndef _WIN32 +#define semaphore_wait(x) sem_wait(x) +#define semaphore_post(x) sem_post(x) +#else // _WIN32 +#define semaphore_wait(x) WaitForSingleObject(x, INFINITE) +#define semaphore_post(x) ReleaseSemaphore(x, 1, NULL) +#endif // _WIN32 + +// Stupid MingW just uses rand() from msvcrt.dll which uses RAND_MAX of 0x7fff +#if RAND_MAX < 0x7fffffff +#define rand32(x) ((uint32_t)((rand(x) << 17) | (rand(x) << 2) | (rand(x) & 3))) +#elif RAND_MAX < 0xffffffff +#define rand32(x) ((uint32_t)((rand(x) << 1) | (rand(x) & 1))) +#else +#define rand32(x) (uint32_t)rand(x) +#endif + +#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(NO_SOCKETS) +#define _NTSERVICE +#endif + +#if (defined(__CYGWIN__) || defined(_WIN32) || defined(NO_SOCKETS)) && !defined(NO_SIGHUP) +#define NO_SIGHUP +#endif // (defined(__CYGWIN__) || defined(_WIN32) || defined(NO_SOCKETS)) && !defined(NO_SIGHUP) + +#ifdef _WIN32 +#ifndef USE_THREADS +#define USE_THREADS +#endif +#endif + +#if defined(USE_THREADS) +#define _TLS __thread +#else +#define _TLS +#endif + +#define GUID_STRING_LENGTH 36 + +#if defined(_WIN32) + +#ifndef USE_MSRPC +#include +#include +#endif // USE_MSRPC + +#include + + +typedef char* sockopt_t; +// Map VLMCSD error codes to WSAGetLastError() codes +// Add more if you need them +#define VLMCSD_EADDRINUSE WSAEADDRINUSE +#define VLMCSD_ENODEV WSAENODEV +#define VLMCSD_EADDRNOTAVAIL WSAEADDRNOTAVAIL +#define VLMCSD_EACCES WSAEACCES +#define VLMCSD_EINVAL WSAEINVAL +#define VLMCSD_ENOTSOCK WSAENOTSOCK +#define VLMCSD_EINTR WSAEINTR +#define VLMCSD_EINPROGRESS WSAEINPROGRESS +#define VLMCSD_ECONNABORTED WSAECONNABORTED + +#define socket_errno WSAGetLastError() +#define socketclose(x) (closesocket(x)) +#define vlmcsd_strerror(x) win_strerror(x) +#define VLMCSD_SHUT_RD SD_RECEIVE +#define VLMCSD_SHUT_WR SD_SEND +#define VLMCSD_SHUT_RDWR SD_BOTH + +/* Unknown Winsock error codes */ +#define WSAENODEV -1 + +#elif defined(__CYGWIN__) +#include + +// Resolve conflicts between OpenSSL and MS Crypto API +#ifdef _CRYPTO_OPENSSL +#undef OCSP_RESPONSE +#undef X509_NAME +#endif + +#else +typedef uint32_t DWORD; +typedef uint16_t WORD; +typedef uint8_t BYTE; +typedef uint16_t WCHAR; +typedef int BOOL; + +#define FALSE 0 +#define TRUE !0 + +typedef struct { + DWORD Data1; + WORD Data2; + WORD Data3; + BYTE Data4[8]; +} /*__packed*/ GUID; + +typedef struct { + DWORD dwLowDateTime; + DWORD dwHighDateTime; +} /*__packed*/ FILETIME; + +#endif // defined(__CYGWIN__) + +#ifndef _WIN32 +// Map VLMCSD error codes to POSIX codes +// Add more if you need them +#define VLMCSD_EADDRINUSE EADDRINUSE +#define VLMCSD_ENODEV ENODEV +#define VLMCSD_EADDRNOTAVAIL EADDRNOTAVAIL +#define VLMCSD_EACCES EACCES +#define VLMCSD_EINVAL EINVAL +#define VLMCSD_ENOTSOCK ENOTSOCK +#define VLMCSD_EINTR EINTR +#define VLMCSD_EINPROGRESS EINPROGRESS +#define VLMCSD_ECONNABORTED ECONNABORTED + +typedef void* sockopt_t; +#define _countof(x) ( sizeof(x) / sizeof(x[0]) ) +#define SOCKET int +#define INVALID_SOCKET -1 +#define socket_errno errno +#define socketclose(x) (close(x)) +#define vlmcsd_strerror strerror +#define VLMCSD_SHUT_RD SHUT_RD +#define VLMCSD_SHUT_WR SHUT_WR +#define VLMCSD_SHUT_RDWR SHUT_RDWR + +#endif // __MINGW__ +#define INVALID_UID ((uid_t)~0) +#define INVALID_GID ((gid_t)~0) + +#undef IsEqualGUID +#define IsEqualGUID(a, b) ( !memcmp(a, b, sizeof(GUID)) ) + +#ifndef __stdcall +#define __stdcall +#endif + +#ifndef __cdecl +#define __cdecl +#endif + +typedef const char *const * CARGV; + +typedef struct { + SOCKET socket; + DWORD RpcAssocGroup; +} CLDATA, *const PCLDATA; + + + + +#endif // __types_h diff --git a/vlmcs.1 b/vlmcs.1 new file mode 100644 index 0000000..dcbcf8d --- /dev/null +++ b/vlmcs.1 @@ -0,0 +1,255 @@ +.mso www.tmac +.TH VLMCS 1 "February 2015" "Hotbird64" "KMS Activation Manual" +.LO 1 + +.SH NAME +vlmcs \- a client for testing and/or charging KMS servers + +.SH SYNOPSIS +\fBvlmcs\fR [ \fIoptions\fR ] [ \fItarget\fR ] [ \fIoptions\fR ] +.PP +\fItarget\fR can be one of the following: +.RS +.PP +\fIhostname\fR|\fIipaddress\fR[:\fItcp-port\fR] or to query a specific KMS server (example: vlmcs kms.example.com:1688). +.br +\fR.\fIdomain\fR to automatically detect KMS servers via DNS for \fIdomain\fR (example: vlmcs .example.com). Please note the dot before \fIdomain\fR. +.br +\fI-\fR (a single dash) to detect KMS servers in your own domain. +.RE + +If you use \fIipaddress\fR:\fIport\fR as the \fItarget\fR, the \fIipaddress\fR must be enclosed in brackets +if it contains colons, e.g. [2001:db8:dead:beef::1]:1688. If you use a link-local IPv6 address on Unix systems, you must append a percent sign and the +interface identifier of the source interface, for example fe80::dead:beef%eth0. +.PP +If you omit the \fItarget\fR, 127.0.0.1:1688 will be used except if you use \fB-i6\fR. In this case the default target is [::1]:1688. + +.SH DESCRIPTION +\fBvlmcs\fR is a program that can be used to test a KMS server that provides activation for +several Microsoft products. The KMS server may also be an emulator. It supports +KMS protocol versions 4, 5 and 6. +.PP +.B vlmcs +generates one or more activation requests for a Microsoft KMS product and sends +it to a KMS server. It then analyzes and displays the responses of the KMS server. +.PP +.B vlcms +checks both the DCE-RPC protocol and the activation message for correctness and +reports any errors that it finds. +.PP +.B vlmcs +can also be used to "charge" a KMS server. A Microsoft KMS server sends correct activation messages only if it detects a certain minimum of clients (25 for Windows client OSses, 5 otherwise) on the network. This is Microsoft's futile attempt to prevent running a KMS server in a home environment. + +.SH OPTIONS +.IP "\fB-h\fR or \fB-?" +Show help. + +.IP \fB-x +Show valid +.IR application s +that can be used with +.BR "-l" "." + +.IP \fB-e +Show some examples how to use vlmcs correctly. + +.IP \fB-v +Be verbose. Instead of just displaying the returned ePID and the HwId +(protocol v6 only) vlmcsd shows all details of the query and the response. + +.IP "\fB-l\fR \fIapplication" +Request activation for a specific +.IR "application" "." +Valid applications can be displayed by using +.BR "-x" "." +The default +.IR application " is" +.IR "Windows Vista Business" "." +The list of available applications is not complete. You may +supply GUIDs with +.BR "-a" ", " "-k" " and " "-s" +to specify applications that are not listed with \fB-x\fR. The +.B -l +option is used as a shortcut for the most common applications. + +.IP "\fB-4\fR, \fB-5\fR and \fB-6" +Force version 4, 5 or 6 of the KMS protocol. The default is to select a suitable +version according to the +.IR "application" +selected. Plese note that some products (e.g. Office 2013) may use different protocols with different versions of Windows. + +.IP "\fB-m" +Let the client pretend to be a virtual machine. Early versions of Microsoft's +KMS server did not increase the client count if the request came from a virtual +machine. Newer versions ignore this flag. + +.IP "\fB-d" +Use NetBIOS names instead of DNS names. By default vlmcsd generates some random +DNS names for each request. If you prefer NetBIOS names, you may use +.IR "\fB-d" "." +A real Microsoft activation client uses DNS names or NetBIOS depending on the +client name configuration. KMS servers treat the workstation name as a comment +that affects logging only. Clients will be identified by a GUID that can +be specified using \fB-c\fR. \fB-d\fR has no effect if you also specify \fB-w\fR. + +.IP "\fB-a\fR \fIapplication-guid" +Send requests with a specific +.IR "application-guid" "." +There are currently only three known valid +.IR "application-guid" "s:" + +.IP +55c92734-d682-4d71-983e-d6ec3f16059f (Windows) +.br +59a52881-a989-479d-af46-f275c6370663 (Office 2010) +.br +0ff1ce15-a989-479d-af46-f275c6370663 (Office 2013) + +.IP +A Microsoft KMS server uses these GUIDs to have seperate counters for the +already activated clients. A client that does not contact the KMS server +within 30 days will be deleted from the database. Emulated KMS servers +are always fully charged. + +.IP "\fB-k\fR \fIkms-guid\fR" +Send requests with a specific +.IR "kms-guid" "." +A Microsoft KMS server uses these GUIDs as a product id to decide whether to +grant activation or not. A list of current \fIkms-guid\fRs can be found in +kms.c (table KmsIdList). Emulated KMS servers grant activation unconditionally +and do not check the \fIkms-guid\fR. + +.IP "\fB-s\fR \fIactivation-guid\fR" +The \fIactivation-guid\fR defines the actual product, e.g. "Windows 8.1 Professional WMC KMSCLIENT edition". A \fIactivation-guid\fR maps 1:1 to a product key. +However, neither a Microsoft KMS server nor emulated servers check this id. +The \fIactivation-guid\fR is useful in logging to get a specific product description like +"Windows 8.1 Professional WMC". A list of current \fIactivation-guid\fRs can be found in +kms.c (table ExtendedProductList). + +.IP "\fB-n\fR \fIrequests" +Send +.I requests +requests to the server. The default is to send at least one request and enough +subsequent requests that the server is fully charged afterwards for +the \fIapplication\-guid\fR you selected (explicitly with +.BR "-a" " or implicitly by using " "-l" ")." + +.IP "\fB-T" +Causes to use a new TCP connection for each request if multiple requests +are sent with vlmcsd. This is useful when you want to test an emulated KMS +server whether it suffers from memory leaks. To test for memory leaks use +.B -n +with a large number of requests (> 100000) and then test twice (with and +without +.BR "-T" ")." +This option may become neccessary for future versions of Microsoft's KMS +server because multiple requests with different +.IR clients-guid s +for the same +.I kms-id-guid +are impossible in a real KMS szenario over the same TCP connection. + +.IP "\fB-c\fR \fIclient-machine-guid\fR" +Normally vlmcs generates a random \fIclient-machine-guid\fR for each request. By using this option you can specify a fixed \fIclient-machine-guid\fR +This causes a Microsoft KMS not to increment its client count because it +receives multiple requests for the same client. Thus do not use +.BR "-c" +if you want to charge a real KMS server. + +.IP "\fB-o\fR \fIprevious-client-machine-guid\fR" +If the \fIclient-machine-guid\fR changes for some reason, the real KMS client stores a \fIprevious-client-machine-guid\fR which is sent +to the KMS server. This happens rarely and usually 00000000-0000-0000-0000-000000000000 is used. You can use \fB-o\fR to specify a different +\fIprevious-client-machine-guid\fR. + +.IP "\fB-G\fR \fIfilename\fR" +Grabs ePIDs and HWIDs from a KMS server and writes the information to \fIfilename\fR +in format suitable to be used as a configuration file (aka ini file) for \fBvlmcsd\fR(8). +This is especially useful if you have access to a genuine KMS server and want to use +the same data with \fBvlmcsd\fR(8). + +If \fIfilename\fR does not exist, it will be created. +If you specify an existing \fIfilename\fR, it will be updated to use the information +received from the remote KMS server and a backup \fIfilename\fR~ will be created. + +\fB-G\fR cannot be used with \fB-l\fR, \fB-4\fR, \fB-5\fR, \fB-6\fR, \fB-a\fR, \fB-s\fR, \fB-k\fR, \fB-r\fR and \fB-n\fR + +.IP "\fB-w\fR \fIworkstation-name" +Send requests with a specific +.IR "workstation-name" "." +This disables the random generator for the workstation name. Since it is +a comment only, this option does not have much effect. + +.IP "\fB-r\fR \fIrequired-client-count" +Also known as the "N count policy". Tells the KMS server that successful activation requires +\fIrequired-client-count\fR clients. The default is the +\fIrequired-client-count\fR that the product would need if the request +was a real activation. A Microsoft KMS server counts clients +up to the double amount what was specified with \fB-r\fR. This option +can be used to "overcharge" a Microsoft KMS server. + +.IP "\fB\-t\ \fIstatus\fR" +Reports a specific license status to the KMS server. \fIstatus\fR is a number +that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB grace, 3=OOT grace, +4=Non-genuinue grace, 5=notification, 6=extended grace. Refer to +.URL "http://technet.microsoft.com/en-us/library/ff686879.aspx#_Toc257201371" "TechNet" "" +for more information. A Microsoft KMS server collects this information for +statistics only. + +.IP "\fB-g\fR \fIbinding-expiration\fR" +This tells the KMS server how long a client will stay in its current license +status. This can be the remaining OOB time (the grace peroid that is granted between installation of a product and when activation is actuall required) or +the remaining time when KMS activation must be renewed. +\fIbinding-expiration\fR is specified in minutes. A Microsoft KMS server +apparantly does not use this information. + +.IP "\fB-i \fIprotocol-version\fR" +Force the use of Internet protocol \fIprotocol-version\fR. Allowed values are 4 (IPv4) and 6 (IPv6). This option is useful only if you specfiy a \fIhostname\fR and not an +\fIip-address\fR on the command line. + +.IP "\fB-p\fR" +Do not set the RPC_PF_MULTIPLEX flag in the RPC bind request. This can be used to test if the KMS server uses the same setting of this flag in the RPC bind respone. Some KMS +emulators don't set this correctly. + +.IP "\fB-N0\fR and \fB-N1\fR" +Disables (\fB-N0\fR) or enables (\fB-N1\fR) the NDR64 transfer syntax in the RPC protocol. Disable NDR64 only in case of problems. If NDR64 is not used, vlmcs cannot detect many RPC protocol errors in KMS emulators. If you want to test whether a KMS emulator fully supports NDR64, you must use the \fB-n\fR option to send at least two requests. This is because Microsoft's client always sends the first request using NDR32 syntax and subsequent requests using NDR64 syntax. + +.IP "\fB-B0\fR and \fB-B1\fR" +Disables (\fB-B0\fR) or enables (\fB-B1\fR) bind time feature negotiation (BTFN) in the RPC protocol. Disable BTFN only in case of problems. If BTFN is not used, vlmcs cannot detect many RPC protocol errors in KMS emulators. + +.PP +Options that do not require an argument can be specified together with a single +dash, e.g. vlmcs -6mvT. If you specify an option more than once, the last occurence +will be in effect. + +.SH FILES +.IP "\fBvlmcsd.ini\fR(5)" + +.SH EXAMPLES +.IP "\fBvlmcs kms.example.com" +Request activation for Windows Vista using v4 protocol from kms.example.com. +Repeat activation requests until server is charged for all Windows products. + +.IP "\fBvlmcs -" +Request activation for Windows Vista using v4 protocol from a KMS server that is published via DNS for the current domain. + +.IP "\fBvlmcs .example.com" +Request activation for Windows Vista using v4 protocol from a KMS server that is published via DNS for domain example.com. + +.IP "\fBvlmcs -6 -l Office2013 -v -n 1" +Request exactly one activation for Office2013 using v6 protocol from +localhost. Display verbose results. + +.IP "\fBvlmcs kms.bigcompany.com -G /etc/vlmcsd.ini" +Get ePIDs and HWIDs from kms.bigcompany.com and create/update /etc/vlmcsd.ini accordingly. + +.SH BUGS +Some platforms (e.g. Solaris) may have a \fBman\fR(7) system that does not handle URLs. URLs may be omitted in the documentation on those platforms. Cygwin, Linux, FreeBSD and Mac OS X are known to work correctly. + +.SH AUTHOR +Written by Hotbird64 + +.SH CREDITS +Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nosferati87, qad, Ratiborus, vityan666, ... + +.SH SEE ALSO +\fBvlmcsd\fR(7), \fBvlmcsd\fR(8), \fBvlmcsdmulti\fR(1) diff --git a/vlmcs.1.dos.txt b/vlmcs.1.dos.txt new file mode 100644 index 0000000..33fc67b --- /dev/null +++ b/vlmcs.1.dos.txt @@ -0,0 +1,305 @@ +VLMCS(1) KMS Activation Manual VLMCS(1) + + + +NAME + vlmcs - a client for testing and/or charging KMS servers + + +SYNOPSIS + vlmcs [ options ] [ target ] [ options ] + + target can be one of the following: + + hostname|ipaddress[:tcp-port] or to query a specific KMS server + (example: vlmcs kms.example.com:1688). + .domain to automatically detect KMS servers via DNS for domain + (example: vlmcs .example.com). Please note the dot before + domain. + - (a single dash) to detect KMS servers in your own domain. + + If you use ipaddress:port as the target, the ipaddress must be enclosed + in brackets if it contains colons, e.g. [2001:db8:dead:beef::1]:1688. + If you use a link-local IPv6 address on Unix systems, you must append a + percent sign and the interface identifier of the source interface, for + example fe80::dead:beef%eth0. + + If you omit the target, 127.0.0.1:1688 will be used except if you use + -i6. In this case the default target is [::1]:1688. + + +DESCRIPTION + vlmcs is a program that can be used to test a KMS server that provides + activation for several Microsoft products. The KMS server may also be + an emulator. It supports KMS protocol versions 4, 5 and 6. + + vlmcs generates one or more activation requests for a Microsoft KMS + product and sends it to a KMS server. It then analyzes and displays the + responses of the KMS server. + + vlcms checks both the DCE-RPC protocol and the activation message for + correctness and reports any errors that it finds. + + vlmcs can also be used to "charge" a KMS server. A Microsoft KMS server + sends correct activation messages only if it detects a certain minimum + of clients (25 for Windows client OSses, 5 otherwise) on the network. + This is Microsoft's futile attempt to prevent running a KMS server in a + home environment. + + +OPTIONS + -h or -? + Show help. + + + -x Show valid applications that can be used with -l. + + + -e Show some examples how to use vlmcs correctly. + + + -v Be verbose. Instead of just displaying the returned ePID and the + HwId (protocol v6 only) vlmcsd shows all details of the query + and the response. + + + -l application + Request activation for a specific application. Valid applica‐ + tions can be displayed by using -x. The default application is + Windows Vista Business. The list of available applications is + not complete. You may supply GUIDs with -a, -k and -s to specify + applications that are not listed with -x. The -l option is used + as a shortcut for the most common applications. + + + -4, -5 and -6 + Force version 4, 5 or 6 of the KMS protocol. The default is to + select a suitable version according to the application selected. + Plese note that some products (e.g. Office 2013) may use differ‐ + ent protocols with different versions of Windows. + + + -m Let the client pretend to be a virtual machine. Early versions + of Microsoft's KMS server did not increase the client count if + the request came from a virtual machine. Newer versions ignore + this flag. + + + -d Use NetBIOS names instead of DNS names. By default vlmcsd gener‐ + ates some random DNS names for each request. If you prefer Net‐ + BIOS names, you may use -d. A real Microsoft activation client + uses DNS names or NetBIOS depending on the client name configu‐ + ration. KMS servers treat the workstation name as a comment that + affects logging only. Clients will be identified by a GUID that + can be specified using -c. -d has no effect if you also specify + -w. + + + -a application-guid + Send requests with a specific application-guid. There are cur‐ + rently only three known valid application-guids: + + + 55c92734-d682-4d71-983e-d6ec3f16059f (Windows) + 59a52881-a989-479d-af46-f275c6370663 (Office 2010) + 0ff1ce15-a989-479d-af46-f275c6370663 (Office 2013) + + + A Microsoft KMS server uses these GUIDs to have seperate coun‐ + ters for the already activated clients. A client that does not + contact the KMS server within 30 days will be deleted from the + database. Emulated KMS servers are always fully charged. + + + -k kms-guid + Send requests with a specific kms-guid. A Microsoft KMS server + uses these GUIDs as a product id to decide whether to grant + activation or not. A list of current kms-guids can be found in + kms.c (table KmsIdList). Emulated KMS servers grant activation + unconditionally and do not check the kms-guid. + + + -s activation-guid + The activation-guid defines the actual product, e.g. "Windows + 8.1 Professional WMC KMSCLIENT edition". A activation-guid maps + 1:1 to a product key. However, neither a Microsoft KMS server + nor emulated servers check this id. The activation-guid is use‐ + ful in logging to get a specific product description like "Win‐ + dows 8.1 Professional WMC". A list of current activation-guids + can be found in kms.c (table ExtendedProductList). + + + -n requests + Send requests requests to the server. The default is to send at + least one request and enough subsequent requests that the server + is fully charged afterwards for the application-guid you + selected (explicitly with -a or implicitly by using -l). + + + -T Causes to use a new TCP connection for each request if multiple + requests are sent with vlmcsd. This is useful when you want to + test an emulated KMS server whether it suffers from memory + leaks. To test for memory leaks use -n with a large number of + requests (> 100000) and then test twice (with and without -T). + This option may become neccessary for future versions of Micro‐ + soft's KMS server because multiple requests with different + clients-guids for the same kms-id-guid are impossible in a real + KMS szenario over the same TCP connection. + + + -c client-machine-guid + Normally vlmcs generates a random client-machine-guid for each + request. By using this option you can specify a fixed client- + machine-guid This causes a Microsoft KMS not to increment its + client count because it receives multiple requests for the same + client. Thus do not use -c if you want to charge a real KMS + server. + + + -o previous-client-machine-guid + If the client-machine-guid changes for some reason, the real KMS + client stores a previous-client-machine-guid which is sent to + the KMS server. This happens rarely and usually + 00000000-0000-0000-0000-000000000000 is used. You can use -o to + specify a different previous-client-machine-guid. + + + -G filename + Grabs ePIDs and HWIDs from a KMS server and writes the informa‐ + tion to filename in format suitable to be used as a configura‐ + tion file (aka ini file) for vlmcsd(8). This is especially use‐ + ful if you have access to a genuine KMS server and want to use + the same data with vlmcsd(8). + + If filename does not exist, it will be created. If you specify + an existing filename, it will be updated to use the information + received from the remote KMS server and a backup filename~ will + be created. + + -G cannot be used with -l, -4, -5, -6, -a, -s, -k, -r and -n + + + -w workstation-name + Send requests with a specific workstation-name. This disables + the random generator for the workstation name. Since it is a + comment only, this option does not have much effect. + + + -r required-client-count + Also known as the "N count policy". Tells the KMS server that + successful activation requires required-client-count clients. + The default is the required-client-count that the product would + need if the request was a real activation. A Microsoft KMS + server counts clients up to the double amount what was specified + with -r. This option can be used to "overcharge" a Microsoft KMS + server. + + + -t status + Reports a specific license status to the KMS server. status is a + number that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB + grace, 3=OOT grace, 4=Non-genuinue grace, 5=notification, + 6=extended grace. Refer to TechNet ⟨http:// + technet.microsoft.com/en-us/library/ff686879.aspx#_Toc257201371⟩ + for more information. A Microsoft KMS server collects this + information for statistics only. + + + -g binding-expiration + This tells the KMS server how long a client will stay in its + current license status. This can be the remaining OOB time (the + grace peroid that is granted between installation of a product + and when activation is actuall required) or the remaining time + when KMS activation must be renewed. binding-expiration is + specified in minutes. A Microsoft KMS server apparantly does not + use this information. + + + -i protocol-version + Force the use of Internet protocol protocol-version. Allowed + values are 4 (IPv4) and 6 (IPv6). This option is useful only if + you specfiy a hostname and not an ip-address on the command + line. + + + -p Do not set the RPC_PF_MULTIPLEX flag in the RPC bind request. + This can be used to test if the KMS server uses the same setting + of this flag in the RPC bind respone. Some KMS emulators don't + set this correctly. + + + -N0 and -N1 + Disables (-N0) or enables (-N1) the NDR64 transfer syntax in the + RPC protocol. Disable NDR64 only in case of problems. If NDR64 + is not used, vlmcs cannot detect many RPC protocol errors in KMS + emulators. If you want to test whether a KMS emulator fully sup‐ + ports NDR64, you must use the -n option to send at least two + requests. This is because Microsoft's client always sends the + first request using NDR32 syntax and subsequent requests using + NDR64 syntax. + + + -B0 and -B1 + Disables (-B0) or enables (-B1) bind time feature negotiation + (BTFN) in the RPC protocol. Disable BTFN only in case of prob‐ + lems. If BTFN is not used, vlmcs cannot detect many RPC protocol + errors in KMS emulators. + + + Options that do not require an argument can be specified together with + a single dash, e.g. vlmcs -6mvT. If you specify an option more than + once, the last occurence will be in effect. + + +FILES + vlmcsd.ini(5) + + +EXAMPLES + vlmcs kms.example.com + Request activation for Windows Vista using v4 protocol from + kms.example.com. Repeat activation requests until server is + charged for all Windows products. + + + vlmcs - + Request activation for Windows Vista using v4 protocol from a + KMS server that is published via DNS for the current domain. + + + vlmcs .example.com + Request activation for Windows Vista using v4 protocol from a + KMS server that is published via DNS for domain example.com. + + + vlmcs -6 -l Office2013 -v -n 1 + Request exactly one activation for Office2013 using v6 protocol + from localhost. Display verbose results. + + + vlmcs kms.bigcompany.com -G /etc/vlmcsd.ini + Get ePIDs and HWIDs from kms.bigcompany.com and create/update + /etc/vlmcsd.ini accordingly. + + +BUGS + Some platforms (e.g. Solaris) may have a man(7) system that does not + handle URLs. URLs may be omitted in the documentation on those plat‐ + forms. Cygwin, Linux, FreeBSD and Mac OS X are known to work correctly. + + +AUTHOR + Written by Hotbird64 + + +CREDITS + Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐ + ferati87, qad, Ratiborus, vityan666, ... + + +SEE ALSO + vlmcsd(7), vlmcsd(8), vlmcsdmulti(1) + + + +Hotbird64 February 2015 VLMCS(1) diff --git a/vlmcs.1.html b/vlmcs.1.html new file mode 100644 index 0000000..aa9b083 --- /dev/null +++ b/vlmcs.1.html @@ -0,0 +1,515 @@ + + + + + + + + + +VLMCS + + + + +