(See <http://wiki.openwrt.org/doc/devel/packages> for overall format and construction)
-All packages you commit or submit by pull-request should follow these simple guidelines:
+### Basic guidelines
+All packages you commit or submit by pull-request should follow these simple guidelines:
* Package a version which is still maintained by the upstream author.
* Will be updated regularly to maintained and supported versions.
* Have no dependencies outside the OpenWrt core packages or this repository feed.
* Do NOT use a rolling source file (e.g. foo-latest.tar.gz) or the head of a branch as source for the package since that would create unpredictable builds which change over time.
* Best of all -- it works as expected!
-Makefile contents should contain:
+#### Makefile contents should contain:
* An up-to-date copyright notice. Use OpenWrt if no other present or supply your own.
-* A (PKG_)MAINTAINER definition listing either yourself or another person in the field.
+* A (PKG_)MAINTAINER definition listing either yourself or another person in the field.
(E.g.: PKG_MAINTAINER:= Joe D. Hacker `<jdh@jdhs-email-provider.org`>)
* A PKG_LICENSE tag declaring the main license of the package.
(E.g.: PKG_LICENSE:=GPL-2.0+) Please use SPDX identifiers if possible (see list at the bottom).
(E.g.: PKG_LICENSE_FILES:=COPYING)
* PKG_RELEASE should be initially set to 1 or reset to 1 if the software version is changed. You should increment it if the package itself has changed. For example, modifying a support script, changing configure options like --disable* or --enable* switches, or if you changed something in the package which causes the resulting binaries to be different. Changes like correcting md5sums, changing mirror URLs, adding a maintainer field or updating a comment or copyright year in a Makefile do not require a change to PKG_RELEASE.
-Commits in your pull-requests should:
+#### Commits in your pull-requests should:
-* Have a useful description prefixed with the package name
+* Have a useful description prefixed with the package name
(E.g.: "foopkg: Add libzot dependency")
-* Include Signed-off-by in the comment
+* Include Signed-off-by in the comment
(See <https://dev.openwrt.org/wiki/SubmittingPatches#a10.Signyourwork>)
-If you have commit access:
+### Advice on pull requests:
+
+Pull requests are the easiest way to contribute changes to git repos at Github. They are the preferred contribution method, as they offer a nice way for commenting and amending the proposed changes.
+
+* You need a local "fork" of the Github repo.
+* Use a "feature branch" for your changes. That separates the changes in the pull request from your other changes and makes it easy to edit/amend commits in the pull request. Workflow using "feature_x" as the example:
+ - Update your local git fork to the tip (of the master, usually)
+ - Create the feature branch with `git checkout -b feature_x`
+ - Edit changes and commit them locally
+ - Push them to your Github fork by `git push -u origin feature_x`. That creates the "feature_x" branch at your Github fork and sets it as the remote of this branch
+ - When you now visit Github, you should see a proposal to create a pull request
+
+* If you later need to add new commits to the pull request, you can simply commit the changes to the local branch and then use `git push` to automatically update the pull request.
+
+* If you need to change something in the existing pull request (e.g. to add a missing signed-off-by line to the commit message), you can use `git push -f` to overwrite the original commits. That is easy and safe when using a feature branch. Example workflow:
+ - Checkout the feature branch by `git checkout feature_x`
+ - Edit changes and commit them locally. If you are just updating the commit message in the last commit, you can use `git commit --amend` to do that
+ - If you added several new commits or made other changes that require cleaning up, you can use `git rebase -i HEAD~X` (X = number of commits to edit) to possibly squash some commits
+ - Push the changed commits to Github with `git push -f` to overwrite the original commits in the "feature_x" branch with the new ones. The pull request gets automatically updated
+
+### If you have commit access:
* Do NOT use git push --force.
* Do NOT commit to other maintainer's packages without their consent.
* Use Pull Requests if you are unsure and to suggest changes to other maintainers.
-Gaining commit access:
+#### Gaining commit access:
* We will gladly grant commit access to responsible contributors who have made
useful pull requests and / or feedback or patches to this repository or
OpenWrt in general. Please include your request for commit access in your
next pull request or ticket.
-Release Branches:
+### Release Branches:
* Branches named "for-XX.YY" (e.g. for-14.07) are release branches.
* These branches are built with the respective OpenWrt release and are created
* Do NOT add new packages and do NOT do major upgrades of packages here.
* If you are unsure if your change is suitable, please use a pull request.
-####Common LICENSE tags (short list)
+### Common LICENSE tags (short list)
(Complete list can be found at: <http://spdx.org/licenses>)
-####
| Full Name | Identifier |
|---|:---|
include $(TOPDIR)/rules.mk
PKG_NAME:=debootstrap
-PKG_VERSION:=1.0.72
+PKG_VERSION:=1.0.78
PKG_RELEASE:=1
PKG_MAINTAINER=Daniel Golle <daniel@makrotopia.org>
PKG_SOURCE:=$(PKG_NAME)-udeb_$(PKG_VERSION)_all.udeb
PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/d/debootstrap
-PKG_MD5SUM:=49f24e3299352aa5453f725ec0d55566
+PKG_MD5SUM:=687d56b8ebde6f35a2ad322be9731723
PKG_LICENSE:=Unique
PKG_LICENSE_FILES:=debian/copyright
endef
define Host/Install
- $(INSTALL_DIR) $(STAGING_DIR_HOST)/bin
- $(CP) $(HOST_BUILD_DIR)/lib/util/mksig{list,name} $(STAGING_DIR_HOST)/bin/
+ $(INSTALL_DIR) $(STAGING_DIR)/host/bin
+ $(CP) $(HOST_BUILD_DIR)/lib/util/mksig{list,name} $(STAGING_DIR)/host/bin/
endef
$(eval $(call HostBuild))
diff -rupN sudo-1.8.11p2.orig/lib/util/Makefile.in sudo-1.8.11p2/lib/util/Makefile.in
--- sudo-1.8.11p2.orig/lib/util/Makefile.in 2014-10-07 22:26:20.000000000 +0200
+++ sudo-1.8.11p2/lib/util/Makefile.in 2014-12-09 21:44:35.610041162 +0100
-@@ -17,6 +17,8 @@
- # @configure_input@
- #
-
-+include $(TOPDIR)/rules.mk
-+
- #### Start of system configuration section. ####
-
- srcdir = @srcdir@
-@@ -142,10 +144,10 @@ libsudo_util.la: $(LTOBJS) @LT_LDDEP@
+@@ -142,10 +142,10 @@ libsudo_util.la: $(LTOBJS) @LT_LDDEP@
esac
siglist.c: mksiglist
- ./mksiglist > $@
-+ $(STAGING_DIR_HOST)/bin/mksiglist > $@
++ mksiglist > $@
signame.c: mksigname
- ./mksigname > $@
-+ $(STAGING_DIR_HOST)/bin/mksigname > $@
++ mksigname > $@
mksiglist: $(srcdir)/mksiglist.c $(srcdir)/mksiglist.h $(incdir)/sudo_compat.h $(top_builddir)/config.h
$(CC) $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/mksiglist.c -o $@
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=autoconf
+PKG_VERSION:=2.69
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=@GNU/autoconf
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_MD5SUM:=82d05e03b93e45f5a39b828dc9c6c29b
+PKG_MAINTAINER:=Heinrich Schuchardt <xypron.glpk@gmx.de>
+PKG_LICENSE:=GPL-3.0+
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/autoconf
+ SECTION:=devel
+ CATEGORY:=Development
+ TITLE:=autoconf
+ URL:=https://www.gnu.org/software/autoconf/
+ DEPENDS:=+m4 +perl +perlbase-data +perlbase-file +perlbase-getopt \
+ +perlbase-dynaloader +perlbase-text
+endef
+
+define Package/autoconf/description
+ Autoconf is an extensible package of M4 macros that produce shell scripts to
+ automatically configure software source code packages.
+endef
+
+define Build/Install
+ $(SED) 's/@PERL@/\/usr\/bin\/perl/g' $(PKG_BUILD_DIR)/bin/Makefile.in
+ $(call Build/Install/Default)
+endef
+
+define Package/autoconf/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(SED) 's|$(STAGING_DIR_HOST)|/usr|g' $(PKG_INSTALL_DIR)/usr/bin/autom4te
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
+ $(INSTALL_DIR) $(1)/usr/share/autoconf
+ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/autoconf/INSTALL \
+ $(1)/usr/share/autoconf/
+ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/autoconf/autom4te.cfg \
+ $(1)/usr/share/autoconf/
+ $(INSTALL_DIR) $(1)/usr/share/autoconf/Autom4te
+ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/autoconf/Autom4te/* \
+ $(1)/usr/share/autoconf/Autom4te/
+ $(INSTALL_DIR) $(1)/usr/share/autoconf/autoconf
+ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/autoconf/autoconf/* \
+ $(1)/usr/share/autoconf/autoconf/
+ $(INSTALL_DIR) $(1)/usr/share/autoconf/autoscan
+ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/autoconf/autoscan/* \
+ $(1)/usr/share/autoconf/autoscan/
+ $(INSTALL_DIR) $(1)/usr/share/autoconf/autotest
+ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/autoconf/autotest/* \
+ $(1)/usr/share/autoconf/autotest/
+ $(INSTALL_DIR) $(1)/usr/share/autoconf/m4sugar
+ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/autoconf/m4sugar/* \
+ $(1)/usr/share/autoconf/m4sugar/
+endef
+
+$(eval $(call BuildPackage,autoconf))
--- /dev/null
+#
+# Copyright (C) 2015-2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=automake
+PKG_VERSION:=1.15
+PKG_RELEASE:=3
+
+PKG_SOURCE_URL:=@GNU/automake
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_MD5SUM:=716946a105ca228ab545fc37a70df3a3
+PKG_MAINTAINER:=Heinrich Schuchardt <xypron.glpk@gmx.de>
+PKG_LICENSE:=GPL-3.0+
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/automake
+ SECTION:=devel
+ CATEGORY:=Development
+ TITLE:=automake
+ URL:=https://www.gnu.org/software/automake/
+ DEPENDS:=+autoconf +perlbase-thread +perlbase-attributes
+endef
+
+define Package/automake/description
+ Automake is a tool for automatically generating Makefile.in files compliant
+ with the GNU Coding Standards.
+endef
+
+define Package/automake/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/automake-$(PKG_VERSION) \
+ $(1)/usr/bin/automake-$(PKG_VERSION)
+ $(LN) automake-$(PKG_VERSION) $(1)/usr/bin/automake
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/aclocal-$(PKG_VERSION) \
+ $(1)/usr/bin/aclocal-$(PKG_VERSION)
+ $(LN) aclocal-$(PKG_VERSION) $(1)/usr/bin/aclocal
+ $(SED) 's|$(STAGING_DIR_HOST)|/usr|g' \
+ $(1)/usr/bin/automake-$(PKG_VERSION)
+ $(SED) 's|$(STAGING_DIR_HOST)|/usr|g' \
+ $(1)/usr/bin/aclocal-$(PKG_VERSION)
+ $(INSTALL_DIR) $(1)/usr/share/automake-$(PKG_VERSION)
+
+ for dir in \
+ automake-$(PKG_VERSION) automake-$(PKG_VERSION)/Automake \
+ automake-$(PKG_VERSION)/am aclocal \
+ aclocal-$(PKG_VERSION) aclocal-$(PKG_VERSION)/internal \
+ ; do \
+ $(INSTALL_DIR) $(1)/usr/share/$$$$dir; \
+ for file in $$$$(cd $(PKG_INSTALL_DIR) && \
+ find usr/share/$$$$dir -maxdepth 1 -type f); do \
+ $(INSTALL_DATA) $$(PKG_INSTALL_DIR)/$$$$file \
+ $(1)/$$$$file; \
+ done; \
+ done
+endef
+
+$(eval $(call BuildPackage,automake))
--- /dev/null
+#
+# Copyright (C) 2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libtool
+PKG_VERSION:=2.4.6
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@GNU/libtool
+PKG_MD5SUM:=addf44b646ddb4e3919805aa88fa7c5e
+PKG_MAINTAINER:=Heinrich Schuchardt <xypron.glpk@gmx.de>
+PKG_LICENSE:=GPL-2.0+
+PKG_BUILD_DIR = $(BUILD_DIR)/libtool-bin/$(PKG_NAME)-$(PKG_VERSION)
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libtool-bin
+ SECTION:=devel
+ CATEGORY:=Development
+ TITLE:=GNU Libtool - libtoolize
+ URL:=https://www.gnu.org/software/libtool/
+endef
+
+define Package/libtool-bin/description
+ GNU libtool is a generic library support script.
+ Libtool hides the complexity of using shared libraries behind a consistent,
+ portable interface.
+ This package contains the libtoolize executable.
+endef
+
+define Package/libtool-bin/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libtoolize $(1)/usr/bin/
+ $(SED) 's|$(STAGING_DIR_HOST)||g' $(1)/usr/bin/libtoolize
+ $(INSTALL_DIR) $(1)/usr/share/aclocal/
+ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/aclocal/*.m4 \
+ $(1)/usr/share/aclocal/
+ $(INSTALL_DIR) $(1)/usr/share/libtool/build-aux/
+ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/libtool/build-aux/* \
+ $(1)/usr/share/libtool/build-aux/
+endef
+
+$(eval $(call BuildPackage,libtool-bin))
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=m4
+PKG_VERSION:=1.4.17
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=@GNU/m4
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_MD5SUM:=a5e9954b1dae036762f7b13673a2cf76
+PKG_MAINTAINER:=Heinrich Schuchardt <xypron.glpk@gmx.de>
+PKG_LICENSE:=GPL-3.0+
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/m4
+ SECTION:=devel
+ CATEGORY:=Development
+ TITLE:=m4
+ URL:=https://www.gnu.org/software/m4/
+endef
+
+define Package/m4/description
+ GNU M4 is an implementation of the traditional Unix macro processor.
+ It is used by GNU Autoconf and Automake.
+endef
+
+define Package/m4/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/m4 $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,m4))
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=make
+PKG_VERSION:=4.1
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=@GNU/make
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_MD5SUM:=654f9117957e6fa6a1c49a8f08270ec9
+PKG_MAINTAINER:=Heinrich Schuchardt <xypron.glpk@gmx.de>
+PKG_LICENSE:=GPL-3.0+
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/make
+ SECTION:=devel
+ CATEGORY:=Development
+ TITLE:=make
+ URL:=https://www.gnu.org/software/make/
+endef
+
+define Package/make/description
+ The Make package contains a tool to create executables from source files.
+endef
+
+define Package/make/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/make $(1)/usr/bin/
+endef
+
+# provide gnumake.h at build time for other packages
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)/usr/include
+ $(CP) $(PKG_BUILD_DIR)/gnumake.h $(1)/usr/include/
+endef
+
+$(eval $(call BuildPackage,make))
--- /dev/null
+#
+# Copyright (C) 2015-2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=pkg-config
+PKG_VERSION:=0.29
+PKG_RELEASE:=2
+
+PKG_SOURCE_URL:=http://pkgconfig.freedesktop.org/releases/
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_MD5SUM:=77f27dce7ef88d0634d0d6f90e03a77f
+PKG_MAINTAINER:=Heinrich Schuchardt <xypron.glpk@gmx.de>
+PKG_LICENSE:=GPL-2+
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/nls.mk
+
+define Package/pkg-config
+ SECTION:=devel
+ CATEGORY:=Development
+ TITLE:=pkg-config
+ URL:=http://www.freedesktop.org/wiki/Software/pkg-config/
+ DEPENDS:=+glib2 $(INTL_DEPENDS)
+endef
+
+define Package/pkg-config/description
+ pkg-config is a helper tool used when compiling applications and libraries.
+ It helps you insert the correct compiler options on the command line so an
+ application can use gcc -o test test.cpkg-config --libs --cflags glib-2.0
+ for instance, rather than hard-coding values on where to find glib (or
+ other libraries).
+endef
+
+define Package/pkg-config/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/pkg-config $(1)/usr/bin/
+ $(INSTALL_DIR) $(1)/usr/share/aclocal/
+ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/aclocal/pkg.m4 \
+ $(1)/usr/share/aclocal/
+endef
+
+$(eval $(call BuildPackage,pkg-config))
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=exfat-nofuse
-PKG_VERSION:=git-20150828
+PKG_VERSION:=git-20151121
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://github.com/dorimanx/exfat-nofuse.git
PKG_SOURCE_PROTO:=git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=0ead00404360b944652335331a2e1a50948f4cb9
+PKG_SOURCE_VERSION:=42635ed1c682a0d85c12f73d08489d1a3a7a94e3
PKG_MAINTAINER:=Bruno Randolf <br1@einfach.org>
PKG_LICENSE:=GPL-2.0
define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) all \
CC="$(TARGET_CC)" \
- LUA="$(STAGING_DIR_HOST)/bin/lua" \
- LUAC="$(STAGING_DIR_HOST)/bin/luac" \
+ LUA="$(STAGING_DIR)/host/bin/lua" \
+ LUAC="$(STAGING_DIR)/host/bin/luac" \
OPT_FLAGS="$(TARGET_CFLAGS) --std=c99 -Dpthread_yield=sched_yield"
endef
to various low level libc functions.
endef
-CONFIGURE_VARS += ac_cv_path_LDOC=""
+CONFIGURE_VARS += ac_cv_path_LDOC="true"
TARGET_CFLAGS += -DLUA_USE_LINUX $(FPIC) -std=gnu99
ifeq ($(CONFIG_USE_MUSL),y)
CONFIGURE_ARGS = \
--prefix=$(CONFIGURE_PREFIX) \
--sysconfdir=/etc \
- --with-lua=$(STAGING_DIR_HOST)
+ --with-lua=$(STAGING_DIR)/host
define Build/Compile
$(call Build/Compile/Default,build)
include $(TOPDIR)/rules.mk
PKG_NAME:=luasec
-PKG_VERSION:=0.5
+PKG_VERSION:=0.5.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/brunoos/luasec/archive/
-PKG_MD5SUM:=0518f4524f399f33424c6f450e1d06db
+PKG_MD5SUM:=e34e274a57e9045641191eb7398cce2a
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_NAME)-$(PKG_VERSION)
MAINTAINER:=W. Michael Petullo <mike@flyn.org>
include $(TOPDIR)/rules.mk
PKG_NAME:=micropython-lib
-PKG_VERSION=0.5-20150827-$(PKG_SOURCE_VERSION)
+PKG_VERSION=0.5-20151122-$(PKG_SOURCE_VERSION)
PKG_RELEASE:=1
PKG_MAINTAINER:=Roger D <rogerdammit@gmail.com>
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/micropython/micropython-lib.git
-PKG_SOURCE_VERSION:=bfbbf85a181d84e2494ea6f15be311734666bf67
+PKG_SOURCE_VERSION:=9643541e6e89b96cb9785a618b19865f8c0f7215
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
include $(TOPDIR)/rules.mk
PKG_NAME:=micropython
-PKG_VERSION=1.4.5-20150827-$(PKG_SOURCE_VERSION)
+PKG_VERSION=1.5-20151122-$(PKG_SOURCE_VERSION)
PKG_RELEASE:=1
PKG_MAINTAINER:=Roger D <rogerdammit@gmail.com>
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/micropython/micropython.git
-PKG_SOURCE_VERSION:=936e25b164d837fc91e4bafd76580e747b235dff
+PKG_SOURCE_VERSION:=4120f32292090bd811165fe76780e4e74e3450b9
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
npm_config_arch=$(CONFIG_ARCH) \
npm_config_nodedir=$(BUILD_DIR)/node-v$(PKG_NODE_VERSION)/ \
PREFIX="$(PKG_INSTALL_DIR)/usr/" \
- $(STAGING_DIR_HOST)/bin/npm install -g $(PKG_BUILD_DIR)
+ $(STAGING_DIR)/host/bin/npm install -g $(PKG_BUILD_DIR)
endef
define Package/node-arduino-firmata/install
npm_config_arch=$(CONFIG_ARCH) \
npm_config_nodedir=$(BUILD_DIR)/node-v$(PKG_NODE_VERSION)/ \
PREFIX="$(PKG_INSTALL_DIR)/usr/" \
- $(STAGING_DIR_HOST)/bin/npm install -g $(PKG_BUILD_DIR)
+ $(STAGING_DIR)/host/bin/npm install -g $(PKG_BUILD_DIR)
endef
define Package/node-cylon/install
npm_config_arch=$(CONFIG_ARCH) \
npm_config_nodedir=$(BUILD_DIR)/node-v$(PKG_NODE_VERSION)/ \
PREFIX="$(PKG_INSTALL_DIR)/usr/" \
- $(STAGING_DIR_HOST)/bin/npm install -g $(PKG_BUILD_DIR)
+ $(STAGING_DIR)/host/bin/npm install -g $(PKG_BUILD_DIR)
endef
define Package/node-hid/install
npm_config_arch=$(CONFIG_ARCH) \
npm_config_nodedir=$(BUILD_DIR)/node-v$(PKG_NODE_VERSION)/ \
PREFIX="$(PKG_INSTALL_DIR)/usr/" \
- $(STAGING_DIR_HOST)/bin/npm install -g $(PKG_BUILD_DIR)
+ $(STAGING_DIR)/host/bin/npm install -g $(PKG_BUILD_DIR)
endef
define Package/node-serialport/install
PKG_NAME:=node
PKG_VERSION:=v0.12.7
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=node-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://nodejs.org/dist/${PKG_VERSION}
+HOST_BUILD_DEPENDS:=python/host
PKG_BUILD_DEPENDS:=python/host
PKG_INSTALL:=1
PKG_USE_MIPS16:=0
package ecosystem, npm, is the largest ecosystem of open source libraries in the world.
endef
+CPU:=$(subst x86_64,x64,$(subst i386,ia32,$(ARCH)))
+
+MAKE_VARS += \
+ DESTCPU=$(CPU)
+
CONFIGURE_ARGS= \
- --dest-cpu=$(CONFIG_ARCH) \
+ --dest-cpu=$(CPU) \
--dest-os=linux \
--without-snapshot \
--shared-zlib \
HOST_CONFIGURE_ARGS:= \
--dest-os=linux \
--without-snapshot \
- --prefix=$(STAGING_DIR_HOST)/
+ --prefix=$(STAGING_DIR)/host/
HOST_CONFIGURE_CMD:=python ./configure
include $(TOPDIR)/rules.mk
PKG_NAME:=perl-cgi
-PKG_VERSION:=4.22
+PKG_VERSION:=4.25
PKG_RELEASE:=1
PKG_SOURCE_URL:=http://www.cpan.org/authors/id/L/LE/LEEJO
PKG_SOURCE:=CGI-$(PKG_VERSION).tar.gz
-PKG_MD5SUM:=8289aa6f2cba9589134d517f4a25da9e
+PKG_MD5SUM:=e047bec455105cdfa413b9c776f95bb9
PKG_LICENSE:=GPL Artistic-2.0
PKG_MAINTAINER:=Marcel Denia <naoir@gmx.net>
include $(TOPDIR)/rules.mk
PKG_NAME:=perl-compress-bzip2
-PKG_VERSION:=2.22
-PKG_RELEASE:=4
+PKG_VERSION:=2.24
+PKG_RELEASE:=1
PKG_SOURCE_URL:=http://www.cpan.org/authors/id/R/RU/RURBAN/
PKG_SOURCE:=Compress-Bzip2-$(PKG_VERSION).tar.gz
-PKG_MD5SUM:=0d01b86c3efa74e29bb975aea46b666f
+PKG_MD5SUM:=d5ef04d1e51fe45743b3044abad967d2
PKG_LICENSE:=GPL-1.0+ Artistic-1.0-Perl
PKG_MAINTAINER:=Marcel Denia <naoir@gmx.net>
#
-# Copyright (C) 2014 OpenWrt.org
+# Copyright (C) 2014 - 2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=perl-html-parser
-PKG_VERSION:=3.71
-PKG_RELEASE:=4
+PKG_VERSION:=3.72
+PKG_RELEASE:=1
PKG_SOURCE_URL:=http://www.cpan.org/authors/id/G/GA/GAAS/
PKG_SOURCE:=HTML-Parser-$(PKG_VERSION).tar.gz
-PKG_MD5SUM:=9128a45893097dfa3bf03301b19c5efe
+PKG_MD5SUM:=eb7505e5f626913350df9dd4a03d54a8
PKG_LICENSE:=GPL-1.0+ Artistic-1.0-Perl
PKG_MAINTAINER:=Marcel Denia <naoir@gmx.net>
#
-# Copyright (C) 2014, 2015 OpenWrt.org
+# Copyright (C) 2014 - 2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=perl-test-harness
-PKG_VERSION:=3.35
-PKG_RELEASE:=3
+PKG_VERSION:=3.36
+PKG_RELEASE:=1
PKG_SOURCE_URL:=http://www.cpan.org/authors/id/L/LE/LEONT/
PKG_SOURCE:=Test-Harness-$(PKG_VERSION).tar.gz
-PKG_MD5SUM:=2a6010bca2ad78e094d629eea6afd7d9
+PKG_MD5SUM:=4c8d9c77e8e06ca96c7383c05c8f3616
PKG_LICENSE:=GPL-1.0+ Artistic-1.0-Perl
PKG_MAINTAINER:=Marcel Denia <naoir@gmx.net>
#
-# Copyright (C) 2015 OpenWrt.org
+# Copyright (C) 2015 - 2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=perl-uri
-PKG_VERSION:=1.69
+PKG_VERSION:=1.71
PKG_RELEASE:=1
PKG_SOURCE_URL:=http://www.cpan.org/authors/id/E/ET/ETHER/
PKG_SOURCE:=URI-$(PKG_VERSION).tar.gz
-PKG_MD5SUM:=3c56aee0300bce5a440ccbd558277ea0
+PKG_MD5SUM:=247c3da29a794f72730e01aa5a715daf
PKG_LICENSE:=GPL-1.0+ Artistic-1.0-Perl
PKG_MAINTAINER:=Marcel Denia <naoir@gmx.net>
include $(TOPDIR)/rules.mk
PKG_NAME:=perl-www
-PKG_VERSION:=6.13
+PKG_VERSION:=6.15
PKG_RELEASE:=1
PKG_SOURCE_URL:=http://www.cpan.org/authors/id/E/ET/ETHER/
PKG_SOURCE:=libwww-perl-$(PKG_VERSION).tar.gz
-PKG_MD5SUM:=85b36bcd2fd2450718ee14f894f0d3d1
+PKG_MD5SUM:=6888c9d8728cd6f3ea3c9754461c9f94
PKG_LICENSE:=GPL-1.0+ Artistic-1.0-Perl
PKG_MAINTAINER:=Marcel Denia <naoir@gmx.net>
EXPAT_LIBPATH:=$(STAGING_DIR)/usr/lib
EXPAT_INCPATH=$(STAGING_DIR)/usr/include
-HOST_EXPAT_LIBPATH:=$(STAGING_DIR_HOST)/lib
-HOST_EXPAT_INCPATH=$(STAGING_DIR_HOST)/include
+HOST_EXPAT_LIBPATH:=$(STAGING_DIR)/host/lib
+HOST_EXPAT_INCPATH=$(STAGING_DIR)/host/include
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/host-build.mk
include $(TOPDIR)/rules.mk
PKG_NAME:=perl
-PKG_VERSION:=5.22.0
-PKG_RELEASE:=3
+PKG_VERSION:=5.22.1
+PKG_RELEASE:=2
PKG_SOURCE_URL:=ftp://ftp.cpan.org/pub/CPAN/src/5.0 \
http://www.cpan.org/src/5.0 \
ftp://ftp.funet.fi/pub/languages/perl/CPAN/src/5.0 \
http://ftp.funet.fi/pub/languages/perl/CPAN/src/5.0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_MD5SUM:=e32cb6a8dda0084f2a43dac76318d68d
+PKG_MD5SUM:=19295bbb775a3c36123161b9bf4892f1
PKG_LICENSE:=GPL-1.0+ Artistic-1.0-Perl
PKG_LICENSE_FILES:=Copying Artistic README
HOST_BUILD_PARALLEL:=1
# Variables used during configuration/build
-HOST_PERL_PREFIX:=$(STAGING_DIR_HOST)/usr
+HOST_PERL_PREFIX:=$(STAGING_DIR)/host/usr
# Filter -g3, it will break Compress-Raw-Zlib
TARGET_CFLAGS_PERL:=$(patsubst -g3,-g,$(TARGET_CFLAGS))
# Target perl
define Build/Configure
$(PERL_CMD) files/perlconfig.pl -Dowrt:target_cc='$(TARGET_CC)' \
+ -Dowrt:gccversion=$(CONFIG_GCC_VERSION) \
-Dowrt:target_cross='$(TARGET_CROSS)' \
-Dowrt:cflags='$(TARGET_CFLAGS_PERL) $(TARGET_CPPFLAGS_PERL)' \
-Dowrt:ldflags='-rdynamic $(TARGET_LDFLAGS)' \
- -Dowrt:libc=$(CONFIG_LIBC) \
+ -Dowrt:libc=$(subst uClibc,uclibc,$(CONFIG_LIBC)) \
-Dowrt:ipv6=$(if $($(CONFIG_IPV6)),define,undef) \
-Dowrt:threads=$(if $(CONFIG_PERL_THREADS),yes,no) \
-Dowrt:staging_dir='$(STAGING_DIR)' \
owrt:ipv6 define/undef Whether to enable IPv6 support.
owrt:target_cross * Target architecture's host triplet.
owrt:target_cc * C compiler to use.
+owrt:gccversion * target_cc's version number.
owrt:cflags * Additional C compiler flags.
owrt:ldflags * Additional linker flags.
owrt:staging_dir * Same as OpenWRT buildroot's
ldflags="$ldflags -L$owrt:staging_dir/lib"
}
-# uclibc does not provide crypt_r(). Enable crypt() usage for glibc builds only
-($owrt:libc ne 'glibc') {
+# uclibc does not provide crypt_r().
+($owrt:libc eq 'uclibc') {
crypt_r_proto='0'
- i_crypt='undef'
- d_crypt='undef'
d_crypt_r='undef'
}
cf_email='naoir@gmx.net'
osvers='3.18.19'
-gccversion='4.8.0'
+gccversion="$owrt:gccversion"
myhostname='OpenWrt'
cf_time='Thu Jan 1 12:00:00 CEST 2015'
# Set the version here
PERL_REVISION=5
PERL_VERSION=22
-PERL_SUBVERSION=0
+PERL_SUBVERSION=1
# (api_revison, api_version, api_subversion) = (revision, version, 0) usually
PERL_API_REVISION=5
--- a/hints/linux.sh
+++ b/hints/linux.sh
-@@ -204,6 +204,24 @@ case "$libc" in
+@@ -221,6 +221,24 @@ case "$libc" in
;;
esac
--- a/Makefile.SH
+++ b/Makefile.SH
-@@ -315,22 +315,11 @@ MINIPERL = \$(LDLIBPTH) ./miniperl\$(EXE
+@@ -316,22 +316,11 @@ MANIFEST_SRT = MANIFEST.srt
!GROK!THIS!
--- /dev/null
+perl: Work around recompile failures
+
+Apparently, recompiling/relinking fails under some circumstances. This
+patch has been reported to work around that issue.
+
+--- a/Makefile.SH
++++ b/Makefile.SH
+@@ -818,7 +818,7 @@ $(LIBPERL): $& $(obj) $(DYNALOADER) $(LI
+ true)
+ $spitshell >>$Makefile <<'!NO!SUBS!'
+ rm -f $@
+- $(LD) -o $@ $(SHRPLDFLAGS) $(obj) $(DYNALOADER) $(libs)
++ $(CC) -o $@ $(SHRPLDFLAGS) $(obj) $(DYNALOADER) $(libs)
+ !NO!SUBS!
+ case "$osname" in
+ aix)
-Index: perl-5.22.0/t/op/tie_fetch_count.t
-===================================================================
---- perl-5.22.0.orig/t/op/tie_fetch_count.t
-+++ perl-5.22.0/t/op/tie_fetch_count.t
+--- a/t/op/tie_fetch_count.t
++++ b/t/op/tie_fetch_count.t
@@ -250,12 +250,17 @@ for ([chdir=>''],[chmod=>'0,'],[chown=>'
check_count "$op $args\\\$tied_glob$postargs";
}
Signed-off-by: Marcel Denia <naoir@gmx.net>
-Index: perl-5.22.0/dist/threads/t/join.t
-===================================================================
---- perl-5.22.0.orig/dist/threads/t/join.t
-+++ perl-5.22.0/dist/threads/t/join.t
+--- a/dist/threads/t/join.t
++++ b/dist/threads/t/join.t
@@ -110,36 +110,41 @@ sub skip {
# We parse ps output so this is OS-dependent.
--- /dev/null
+From b6307f728a4f842a54ea96959e386c7daa92ece1 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Tue, 15 Dec 2015 10:56:54 +1100
+Subject: [perl #126862] ensure File::Spec::canonpath() preserves taint
+
+Previously the unix specific XS implementation of canonpath() would
+return an untainted path when supplied a tainted path.
+
+For the empty string case, newSVpvs() already sets taint as needed on
+its result.
+---
+ dist/PathTools/Cwd.xs | 1 +
+ dist/PathTools/t/taint.t | 19 ++++++++++++++++++-
+ 2 files changed, 19 insertions(+), 1 deletion(-)
+
+--- a/dist/PathTools/Cwd.xs
++++ b/dist/PathTools/Cwd.xs
+@@ -535,6 +535,7 @@ THX_unix_canonpath(pTHX_ SV *path)
+ *o = 0;
+ SvPOK_on(retval);
+ SvCUR_set(retval, o - SvPVX(retval));
++ SvTAINT(retval);
+ return retval;
+ }
+
+--- a/dist/PathTools/t/taint.t
++++ b/dist/PathTools/t/taint.t
+@@ -12,7 +12,7 @@ use Test::More;
+ BEGIN {
+ plan(
+ ${^TAINT}
+- ? (tests => 17)
++ ? (tests => 21)
+ : (skip_all => "A perl without taint support")
+ );
+ }
+@@ -34,3 +34,20 @@ foreach my $func (@Functions) {
+
+ # Previous versions of Cwd tainted $^O
+ is !tainted($^O), 1, "\$^O should not be tainted";
++
++{
++ # [perl #126862] canonpath() loses taint
++ my $tainted = substr($ENV{PATH}, 0, 0);
++ # yes, getcwd()'s result should be tainted, and is tested above
++ # but be sure
++ ok tainted(File::Spec->canonpath($tainted . Cwd::getcwd)),
++ "canonpath() keeps taint on non-empty string";
++ ok tainted(File::Spec->canonpath($tainted)),
++ "canonpath() keeps taint on empty string";
++
++ (Cwd::getcwd() =~ /^(.*)/);
++ my $untainted = $1;
++ ok !tainted($untainted), "make sure our untainted value is untainted";
++ ok !tainted(File::Spec->canonpath($untainted)),
++ "canonpath() doesn't add taint to untainted string";
++}
PERL_VERSION:=5.22
# Build environment
-HOST_PERL_PREFIX:=$(STAGING_DIR_HOST)/usr
+HOST_PERL_PREFIX:=$(STAGING_DIR)/host/usr
ifneq ($(CONFIG_USE_GLIBC),)
EXTRA_LIBS:=bsd
EXTRA_LIBDIRS:=$(STAGING_DIR)/lib
endif
-PERL_CMD:=$(STAGING_DIR_HOST)/usr/bin/perl$(PERL_VERSION).0
+PERL_CMD:=$(STAGING_DIR)/host/usr/bin/perl$(PERL_VERSION).0
MOD_CFLAGS_PERL:=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $(TARGET_CFLAGS) $(TARGET_CPPFLAGS)
ifdef CONFIG_PERL_THREADS
rm -f $(1)/Makefile.aperl
$(MAKE) -C $(1) perl
$(CP) $(1)/perl $(PERL_CMD)
- $(CP) $(1)/perl $(STAGING_DIR_HOST)/usr/bin/perl
+ $(CP) $(1)/perl $(STAGING_DIR)/host/usr/bin/perl
endef
define perlmod/host/Configure
#
-# Copyright (C) 2006-2015 OpenWrt.org
+# Copyright (C) 2006-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=php
-PKG_VERSION:=5.6.15
+PKG_VERSION:=5.6.18
PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>, Michael Heimpold <mhei@heimpold.de>
PKG_LICENSE:=PHPv3.01
PKG_LICENSE_FILES:=LICENSE
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://www.php.net/distributions/
-PKG_MD5SUM:=bdfa8fb1b895a25e1cc05c162f9ae5fc
+PKG_MD5SUM:=177ba962557795866ae331ad4ad99bba
PKG_FIXUP:=libtool autoreconf
PKG_BUILD_PARALLEL:=1
mkdir -p $(PKG_BUILD_DIR)/staging/usr/bin
make -C $(PKG_BUILD_DIR) install INSTALL_ROOT=$(PKG_BUILD_DIR)/staging
rm -f $(PKG_BUILD_DIR)/staging/usr/bin/php
- $(CP) $(PKG_BUILD_DIR)/staging/* $(STAGING_DIR_HOST)
- sed -i -e "s#prefix='/usr'#prefix='$(STAGING_DIR_HOST)/usr'#" $(STAGING_DIR_HOST)/usr/bin/phpize
- sed -i -e "s#exec_prefix=\"\`eval echo /usr\`\"#exec_prefix='$(STAGING_DIR_HOST)/usr'#" $(STAGING_DIR_HOST)/usr/bin/phpize
- sed -i -e "s#prefix=\"/usr\"#prefix=\"$(STAGING_DIR_HOST)/usr\"#" $(STAGING_DIR_HOST)/usr/bin/php-config
+ $(CP) $(PKG_BUILD_DIR)/staging/* $(STAGING_DIR)/host
+ sed -i -e "s#prefix='/usr'#prefix='$(STAGING_DIR)/host/usr'#" $(STAGING_DIR)/host/usr/bin/phpize
+ sed -i -e "s#exec_prefix=\"\`eval echo /usr\`\"#exec_prefix='$(STAGING_DIR)/host/usr'#" $(STAGING_DIR)/host/usr/bin/phpize
+ sed -i -e "s#prefix=\"/usr\"#prefix=\"$(STAGING_DIR)/host/usr\"#" $(STAGING_DIR)/host/usr/bin/php-config
endef
define BuildModule
define Build/Prepare
$(Build/Prepare/Default)
- ( cd $(PKG_BUILD_DIR); $(STAGING_DIR_HOST)/usr/bin/phpize )
+ ( cd $(PKG_BUILD_DIR); $(STAGING_DIR)/host/usr/bin/phpize )
endef
CONFIGURE_ARGS+= \
- --with-php-config=$(STAGING_DIR_HOST)/usr/bin/php-config
+ --with-php-config=$(STAGING_DIR)/host/usr/bin/php-config
define PECLPackage
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=cffi
+PKG_VERSION:=1.5.0
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://pypi.python.org/packages/source/c/cffi
+PKG_MD5SUM:=dec8441e67880494ee881305059af656
+
+PKG_BUILD_DEPENDS:=python python-setuptools
+HOST_BUILD_DEPENDS:=libffi/host python/host python-setuptools/host python-pycparser/host
+
+PKG_LICENSE:=MIT
+PKG_LICENSE_FILES:=LICENSE
+PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
+
+include $(INCLUDE_DIR)/host-build.mk
+include $(INCLUDE_DIR)/package.mk
+$(call include_mk, python-package.mk)
+$(call include_mk, python-host.mk)
+
+define Package/python-cffi
+ SECTION:=lang
+ CATEGORY:=Languages
+ SUBMENU:=Python
+ TITLE:=python-cffi
+ URL:=http://cffi.readthedocs.org/
+ DEPENDS:=+libffi +python-light +python-pycparser
+endef
+
+define Package/python-cffi/description
+Foreign Function Interface for Python calling C code.
+endef
+
+define Build/Compile
+ $(call Build/Compile/PyMod,,install --prefix="/usr" --root="$(PKG_INSTALL_DIR)")
+endef
+
+define Host/Compile
+ $(call Build/Compile/HostPyMod,,install --prefix="/usr" --root="$(STAGING_DIR)/host")
+endef
+
+define Host/Install
+endef
+
+$(eval $(call HostBuild))
+
+$(eval $(call PyPackage,python-cffi))
+$(eval $(call BuildPackage,python-cffi))
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=cryptography
+PKG_VERSION:=1.2.2
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://pypi.python.org/packages/source/c/cryptography
+PKG_MD5SUM:=2b25eebd1d3c6bae52b46f0dcec74dfb
+
+PKG_BUILD_DEPENDS:=python-cffi/host
+
+PKG_LICENSE:=Apache-2.0 BSD-3-Clause
+PKG_LICENSE_FILES:=LICENSE.APACHE LICENSE.BSD
+PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
+
+include $(INCLUDE_DIR)/package.mk
+$(call include_mk, python-package.mk)
+
+define Package/python-cryptography
+ SECTION:=lang
+ CATEGORY:=Languages
+ SUBMENU:=Python
+ TITLE:=python-cryptography
+ URL:=https://github.com/pyca/cryptography
+ DEPENDS:=+libopenssl +python +python-cffi +python-enum34 +python-idna +python-ipaddress +python-pyasn1 +python-six +python-setuptools
+endef
+
+define Package/python-cryptography/description
+cryptography is a package which provides cryptographic recipes and
+primitives to Python developers. Our goal is for it to be your "cryptographic
+standard library". It supports Python 2.6-2.7, Python 3.3+, and PyPy 2.6+.
+endef
+
+define PyPackage/python-cryptography/filespec
++|$(PYTHON_PKG_DIR)
+-|$(PYTHON_PKG_DIR)/cryptography/hazmat/backends/commoncrypto
+-|$(PYTHON_PKG_DIR)/cryptography/hazmat/bindings/commoncrypto
+endef
+
+define Build/Compile
+ $(call Build/Compile/PyMod,,install --prefix="/usr" --root="$(PKG_INSTALL_DIR)")
+endef
+
+$(eval $(call PyPackage,python-cryptography))
+$(eval $(call BuildPackage,python-cryptography))
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=enum34
+PKG_VERSION:=1.1.2
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://pypi.python.org/packages/source/e/enum34
+PKG_MD5SUM:=025bb71b3f9d2fad15d0ee53e48dc873
+
+PKG_LICENSE:=BSD-3-Clause
+PKG_LICENSE_FILES:=enum/LICENSE
+PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
+
+include $(INCLUDE_DIR)/package.mk
+$(call include_mk, python-package.mk)
+
+define Package/python-enum34
+ SECTION:=lang
+ CATEGORY:=Languages
+ SUBMENU:=Python
+ TITLE:=python-enum34
+ URL:=https://pypi.python.org/pypi/enum34/
+ DEPENDS:=+python-light
+endef
+
+define Package/python-enum34/description
+enum34 is the new Python stdlib enum module available in Python 3.4
+backported for previous versions of Python from 2.4 to 3.3.
+endef
+
+define PyPackage/python-enum34/filespec
++|$(PYTHON_PKG_DIR)
+-|$(PYTHON_PKG_DIR)/enum/test_enum.py
+endef
+
+define Build/Compile
+ $(call Build/Compile/PyMod,,install --prefix=/usr --root=$(PKG_INSTALL_DIR))
+endef
+
+$(eval $(call PyPackage,python-enum34))
+$(eval $(call BuildPackage,python-enum34))
--- /dev/null
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py 2015-11-29 17:31:14.000000000 +0800
++++ b/setup.py 2015-12-07 18:39:00.863378684 +0800
+@@ -13,15 +13,6 @@
+ version='1.1.1',\r
+ url='https://pypi.python.org/pypi/enum34',\r
+ packages=['enum'],\r
+- package_data={\r
+- 'enum' : [\r
+- 'LICENSE',\r
+- 'README',\r
+- 'doc/enum.rst',\r
+- 'doc/enum.pdf',\r
+- 'test_enum.py',\r
+- ]\r
+- },\r
+ license='BSD License',\r
+ description='Python 3.4 Enum backported to 3.3, 3.2, 3.1, 2.7, 2.6, 2.5, and 2.4',\r
+ long_description=long_desc,\r
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=idna
+PKG_VERSION:=2.0
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://pypi.python.org/packages/source/i/idna
+PKG_MD5SUM:=bd17a9d15e755375f48a62c13b25b801
+
+PKG_BUILD_DEPENDS:=python python-setuptools
+
+PKG_LICENSE:=BSD-3-Clause
+PKG_LICENSE_FILES:=LICENSE.rst
+PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
+
+include $(INCLUDE_DIR)/package.mk
+$(call include_mk, python-package.mk)
+
+define Package/python-idna
+ SECTION:=lang
+ CATEGORY:=Languages
+ SUBMENU:=Python
+ TITLE:=python-idna
+ URL:=https://github.com/kjd/idna
+ DEPENDS:=+python-light
+endef
+
+define Package/python-idna/description
+A library to support the Internationalised Domain Names in Applications
+(IDNA) protocol as specified in RFC 5891. This version of the protocol
+is often referred to as "IDNA2008" and can produce different results
+from the earlier standard from 2003.
+endef
+
+define Build/Compile
+ $(call Build/Compile/PyMod,,install --prefix=/usr --root=$(PKG_INSTALL_DIR))
+endef
+
+$(eval $(call PyPackage,python-idna))
+$(eval $(call BuildPackage,python-idna))
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=ipaddress
+PKG_VERSION:=1.0.15
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://pypi.python.org/packages/source/i/ipaddress
+PKG_MD5SUM:=12915e923b738107e47827478d553ba1
+
+PKG_BUILD_DEPENDS:=python python-setuptools
+
+PKG_LICENSE:=Python-2.0
+PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
+
+include $(INCLUDE_DIR)/package.mk
+$(call include_mk, python-package.mk)
+
+define Package/python-ipaddress
+ SECTION:=lang
+ CATEGORY:=Languages
+ SUBMENU:=Python
+ TITLE:=python-ipaddress
+ URL:=https://github.com/phihag/ipaddress
+ DEPENDS:=+python-light
+endef
+
+define Package/python-ipaddress/description
+Python 3.3+'s ipaddress for Python 2.6, 2.7, 3.2.
+endef
+
+define Build/Compile
+ $(call Build/Compile/PyMod,,install --prefix=/usr --root=$(PKG_INSTALL_DIR))
+endef
+
+$(eval $(call PyPackage,python-ipaddress))
+$(eval $(call BuildPackage,python-ipaddress))
PKG_NAME:=python-pip
PKG_VERSION:=7.1.2
-PKG_RELEASE:=1
+PKG_RELEASE:=3
PKG_SOURCE:=pip-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://pypi.python.org/packages/source/p/pip/
CATEGORY:=Languages
TITLE:=Tool for installing Python packages.
URL:=https://pip.pypa.io
- DEPENDS:=+python +python-setuptools
+ DEPENDS:=+python +python-setuptools +ca-certificates
MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
endef
endef
define PyPackage/python-pip/install
- $(INSTALL_DIR) $(1)/usr/bin
- $(CP) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin
+ $(INSTALL_DIR) $(1)/usr/bin $(1)/etc
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin
+ $(INSTALL_CONF) ./files/pip.conf $(1)/etc/
endef
$(eval $(call PyPackage,python-pip))
--- /dev/null
+[global]
+cache-dir=/tmp/.cache
+log-file=/tmp/pip-log.txt
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=ply
+PKG_VERSION:=3.8
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://www.dabeaz.com/ply
+PKG_MD5SUM:=94726411496c52c87c2b9429b12d5c50
+
+PKG_BUILD_DEPENDS:=python python-setuptools
+HOST_BUILD_DEPENDS:=python/host python-setuptools/host
+
+PKG_LICENSE:=BSD-3-Clause
+PKG_LICENSE_FILES:=README.md
+PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
+
+include $(INCLUDE_DIR)/host-build.mk
+include $(INCLUDE_DIR)/package.mk
+$(call include_mk, python-package.mk)
+$(call include_mk, python-host.mk)
+
+define Package/python-ply
+ SECTION:=lang
+ CATEGORY:=Languages
+ SUBMENU:=Python
+ TITLE:=python-ply
+ URL:=http://www.dabeaz.com/ply/
+ DEPENDS:=+python-light
+endef
+
+define Package/python-ply/description
+PLY is a 100% Python implementation of the common parsing tools lex
+and yacc.
+endef
+
+define Build/Compile
+ $(call Build/Compile/PyMod,,install --prefix="/usr" --root="$(PKG_INSTALL_DIR)")
+endef
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)$(PYTHON_PKG_DIR)
+ $(CP) \
+ $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR)/* \
+ $(1)$(PYTHON_PKG_DIR)
+endef
+
+define Host/Compile
+ $(call Build/Compile/HostPyMod,,install --prefix="/usr" --root="$(STAGING_DIR)/host")
+endef
+
+define Host/Install
+endef
+
+$(eval $(call HostBuild))
+
+$(eval $(call PyPackage,python-ply))
+$(eval $(call BuildPackage,python-ply))
PKG_NAME:=python-psycopg2
PKG_VERSION:=2.6.1
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_MAINTAINER:=Dmitry Trefilov <the-alien@live.ru>
PKG_LICENSE:=LGPL-3.0+
PKG_LICENSE_FILES:=LICENSE
endef
define Build/Compile
- $(call Build/Compile/PyMod,.,build_py)
- $(call Build/Compile/PyMod,,build_ext --pg-config="$(STAGING_DIR)/usr/bin/pg_config")
- $(call Build/Compile/PyMod,.,install --prefix=/usr --root=$(PKG_INSTALL_DIR))
+ # The PATH var is required so that psycopg2's setup.py script finds pg_config
+ $(call Build/Compile/PyMod,., \
+ install --prefix=/usr --root=$(PKG_INSTALL_DIR), \
+ PATH=$(STAGING_DIR)/usr/bin:$(PATH))
endef
define Package/python-psycopg2/install
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=pyasn1
+PKG_VERSION:=0.1.9
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://pypi.python.org/packages/source/p/pyasn1
+PKG_MD5SUM:=f00a02a631d4016818659d1cc38d229a
+
+PKG_BUILD_DEPENDS:=python python-setuptools
+
+PKG_LICENSE:=BSD-2-Clause
+PKG_LICENSE_FILES:=LICENSE.txt
+PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
+
+include $(INCLUDE_DIR)/package.mk
+$(call include_mk, python-package.mk)
+
+define Package/python-pyasn1
+ SECTION:=lang
+ CATEGORY:=Languages
+ SUBMENU:=Python
+ TITLE:=python-pyasn1
+ URL:=http://pyasn1.sourceforge.net/
+ DEPENDS:=+python-light
+endef
+
+define Package/python-pyasn1/description
+This is an implementation of ASN.1 types and codecs in Python programming
+language. It has been first written to support particular protocol (SNMP)
+but then generalized to be suitable for a wide range of protocols
+based on ASN.1 specification.
+endef
+
+define Build/Compile
+ $(call Build/Compile/PyMod,,install --prefix=/usr --root=$(PKG_INSTALL_DIR))
+endef
+
+$(eval $(call PyPackage,python-pyasn1))
+$(eval $(call BuildPackage,python-pyasn1))
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=pycparser
+PKG_VERSION:=2.14
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://pypi.python.org/packages/source/p/pycparser
+PKG_MD5SUM:=a2bc8d28c923b4fe2b2c3b4b51a4f935
+
+PKG_BUILD_DEPENDS:=python python-setuptools
+HOST_BUILD_DEPENDS:=python/host python-setuptools/host python-ply/host
+
+PKG_LICENSE:=BSD-3-Clause
+PKG_LICENSE_FILES:=LICENSE
+PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
+
+include $(INCLUDE_DIR)/host-build.mk
+include $(INCLUDE_DIR)/package.mk
+$(call include_mk, python-package.mk)
+$(call include_mk, python-host.mk)
+
+define Package/python-pycparser
+ SECTION:=lang
+ CATEGORY:=Languages
+ SUBMENU:=Python
+ TITLE:=python-pycparser
+ URL:=https://github.com/eliben/pycparser
+ DEPENDS:=+python-light +python-ply
+endef
+
+define Package/python-pycparser/description
+pycparser is a parser for the C language, written in pure Python. It is a
+module designed to be easily integrated into applications that need to parse
+C source code.
+endef
+
+define Build/Compile
+ $(call Build/Compile/PyMod,,install --prefix="/usr" --root="$(PKG_INSTALL_DIR)")
+endef
+
+define Host/Compile
+ $(call Build/Compile/HostPyMod,,install --prefix="/usr" --root="$(STAGING_DIR)/host")
+endef
+
+define Host/Install
+endef
+
+$(eval $(call HostBuild))
+
+$(eval $(call PyPackage,python-pycparser))
+$(eval $(call BuildPackage,python-pycparser))
--- /dev/null
+diff --git a/pycparser/c_lexer.py b/pycparser/c_lexer.py
+index cbb9d26..cbd7742 100644
+--- a/pycparser/c_lexer.py
++++ b/pycparser/c_lexer.py
+@@ -9,8 +9,8 @@
+ import re
+ import sys
+
+-from .ply import lex
+-from .ply.lex import TOKEN
++from ply import lex
++from ply.lex import TOKEN
+
+
+ class CLexer(object):
+diff --git a/pycparser/c_parser.py b/pycparser/c_parser.py
+index f4f7453..5c0ca88 100644
+--- a/pycparser/c_parser.py
++++ b/pycparser/c_parser.py
+@@ -8,7 +8,7 @@
+ #------------------------------------------------------------------------------
+ import re
+
+-from .ply import yacc
++from ply import yacc
+
+ from . import c_ast
+ from .c_lexer import CLexer
+diff --git a/setup.py b/setup.py
+index fdccbb3..036a10b 100644
+--- a/setup.py
++++ b/setup.py
+@@ -49,7 +49,7 @@ setup(
+ classifiers = [
+ 'Programming Language :: Python :: 2',
+ 'Programming Language :: Python :: 3',],
+- packages=['pycparser', 'pycparser.ply'],
++ packages=['pycparser'],
+ package_data={'pycparser': ['*.cfg']},
+ cmdclass={'install': install, 'sdist': sdist},
+ )
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=pyOpenSSL
+PKG_VERSION:=0.15.1
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://pypi.python.org/packages/source/p/pyOpenSSL
+PKG_MD5SUM:=f447644afcbd5f0a1f47350fec63a4c6
+
+PKG_BUILD_DEPENDS:=python python-setuptools
+
+PKG_LICENSE:=Apache-2.0
+PKG_LICENSE_FILES:=LICENSE
+PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
+
+include $(INCLUDE_DIR)/package.mk
+$(call include_mk, python-package.mk)
+
+define Package/python-pyopenssl
+ SECTION:=lang
+ CATEGORY:=Languages
+ SUBMENU:=Python
+ TITLE:=python-pyopenssl
+ URL:=https://github.com/pyca/pyopenssl
+ DEPENDS:=+python-light +python-cryptography +python-six
+endef
+
+define Package/python-pyopenssl/description
+Python wrapper module around the OpenSSL library
+endef
+
+define Build/Compile
+ $(call Build/Compile/PyMod,,install --prefix="/usr" --root="$(PKG_INSTALL_DIR)")
+endef
+
+$(eval $(call PyPackage,python-pyopenssl))
+$(eval $(call BuildPackage,python-pyopenssl))
--- /dev/null
+diff --git a/setup.py b/setup.py
+index c376f87..6444fac 100755
+--- a/setup.py
++++ b/setup.py
+@@ -22,14 +22,7 @@ setup(name='pyOpenSSL', version=__version__,
+ 'OpenSSL.rand',
+ 'OpenSSL.crypto',
+ 'OpenSSL.SSL',
+- 'OpenSSL.version',
+- 'OpenSSL.test.__init__',
+- 'OpenSSL.test.util',
+- 'OpenSSL.test.test_crypto',
+- 'OpenSSL.test.test_rand',
+- 'OpenSSL.test.test_ssl',
+- 'OpenSSL.test.test_tsafe',
+- 'OpenSSL.test.test_util',],
++ 'OpenSSL.version',],
+ description = 'Python wrapper module around the OpenSSL library',
+ author = 'Jean-Paul Calderone',
+ author_email = 'exarkun@twistedmatrix.com',
+@@ -74,5 +67,4 @@ High-level wrapper around a subset of the OpenSSL library, includes
+ 'Topic :: Security :: Cryptography',
+ 'Topic :: Software Development :: Libraries :: Python Modules',
+ 'Topic :: System :: Networking',
+- ],
+- test_suite="OpenSSL")
++ ])
include $(TOPDIR)/rules.mk
PKG_NAME:=python-setuptools
-PKG_VERSION:=18.5
+PKG_VERSION:=19.4
PKG_RELEASE:=1
PKG_SOURCE:=setuptools-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://pypi.python.org/packages/source/s/setuptools/
-PKG_MD5SUM:=533c868f01169a3085177dffe5e768bb
+PKG_MD5SUM:=c5a7d90c1e0acf8c4ec5c2bf31bc25b5
+
+HOST_BUILD_DEPENDS:=python/host
PKG_BUILD_DIR:=$(BUILD_DIR)/setuptools-$(PKG_VERSION)
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/setuptools-$(PKG_VERSION)
+include $(INCLUDE_DIR)/host-build.mk
include $(INCLUDE_DIR)/package.mk
$(call include_mk, python-package.mk)
+$(call include_mk, python-host.mk)
define Package/python-setuptools
SUBMENU:=Python
CATEGORY:=Languages
TITLE:=Tool for installing Python packages.
URL:=https://bitbucket.org/pypa/setuptools
- DEPENDS:=+python
+ DEPENDS:=+python +ca-certificates
MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
endef
$(CP) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
endef
+define Host/Compile
+ $(call Build/Compile/HostPyMod,,\
+ install --root="$(STAGING_DIR)/host" --prefix="/usr" \
+ --single-version-externally-managed \
+ )
+endef
+
+define Host/Install
+endef
+
+$(eval $(call HostBuild))
+
$(eval $(call PyPackage,python-setuptools))
$(eval $(call BuildPackage,python-setuptools))
diff --git a/setuptools/dist.py b/setuptools/dist.py
-index 6b9d350..1350e8a 100644
+index 7785541..23108c7 100644
--- a/setuptools/dist.py
+++ b/setuptools/dist.py
-@@ -15,7 +15,6 @@ from distutils.errors import (DistutilsOptionError, DistutilsPlatformError,
+@@ -18,7 +18,6 @@ from setuptools.extern.six.moves import map
+ from pkg_resources.extern import packaging
from setuptools.depends import Require
- from setuptools.compat import basestring, PY2
-from setuptools import windows_support
import pkg_resources
- def _get_unpatched(cls):
-@@ -310,7 +309,6 @@ class Distribution(_Distribution):
+
+@@ -335,7 +334,6 @@ class Distribution(_Distribution):
egg_cache_dir = os.path.join(os.curdir, '.eggs')
if not os.path.exists(egg_cache_dir):
os.mkdir(egg_cache_dir)
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=six
+PKG_VERSION:=1.10.0
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://pypi.python.org/packages/source/s/six
+PKG_MD5SUM:=34eed507548117b2ab523ab14b2f8b55
+
+PKG_BUILD_DEPENDS:=python python-setuptools
+
+PKG_LICENSE:=MIT
+PKG_LICENSE_FILES:=LICENSE
+PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
+
+include $(INCLUDE_DIR)/package.mk
+$(call include_mk, python-package.mk)
+
+define Package/python-six
+ SECTION:=lang
+ CATEGORY:=Languages
+ SUBMENU:=Python
+ TITLE:=python-six
+ URL:=https://pypi.python.org/pypi/six
+ DEPENDS:=+python-light
+endef
+
+define Package/python-six/description
+Six is a Python 2 and 3 compatibility library. It provides utility functions
+for smoothing over the differences between the Python versions with the goal of
+writing Python code that is compatible on both Python versions. See the
+documentation for more information on what is provided.
+endef
+
+define Build/Compile
+ $(call Build/Compile/PyMod,,install --prefix=/usr --root=$(PKG_INSTALL_DIR))
+endef
+
+$(eval $(call PyPackage,python-six))
+$(eval $(call BuildPackage,python-six))
PKG_NAME:=python
PKG_VERSION:=$(PYTHON_VERSION).$(PYTHON_VERSION_MICRO)
-PKG_RELEASE:=6
+PKG_RELEASE:=4
PKG_SOURCE:=Python-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=http://www.python.org/ftp/python/$(PKG_VERSION)
-PKG_MD5SUM:=c685ef0b8e9f27b5e3db5db12b268ac6
+PKG_SOURCE_URL:=https://www.python.org/ftp/python/$(PKG_VERSION)
+PKG_MD5SUM:=1dbcc848b4cd8399a8199d000f9f823c
PKG_LICENSE:=PSF
PKG_LICENSE_FILES:=LICENSE Modules/_ctypes/libffi_msvc/LICENSE Modules/_ctypes/darwin/LICENSE Modules/_ctypes/libffi/LICENSE Modules/_ctypes/libffi_osx/LICENSE Tools/pybench/LICENSE
HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/Python-$(PKG_VERSION)
PKG_BUILD_DEPENDS:=python/host
-HOST_BUILD_DEPENDS:=bzip2/host
+HOST_BUILD_DEPENDS:=bzip2/host expat/host
include $(INCLUDE_DIR)/host-build.mk
include $(INCLUDE_DIR)/package.mk
SECTION:=lang
CATEGORY:=Languages
TITLE:=Python $(PYTHON_VERSION) programming language
- URL:=http://www.python.org/
+ URL:=https://www.python.org/
MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
endef
into separate packages.
endef
-# Define newline here, since it's not defined in OpenWRT
-define newline
-
-
-endef
-
PYTHON_LIB_FILES_DEL:=
PYTHON_PACKAGES:=
+PYTHON_PACKAGES_DEPENDS:=
define PyBasePackage
PYTHON_PACKAGES+=$(1)
+ ifeq ($(3),)
+ PYTHON_PACKAGES_DEPENDS+=$(1)
+ endif
PYTHON_LIB_FILES_DEL+=$(2)
define PyPackage/$(1)/filespec
$(subst $(space),$(newline),$(foreach lib_file,$(2),+|$(lib_file)))
define Package/python
$(call Package/python/Default)
- DEPENDS:=+python-light $(foreach package,$(PYTHON_PACKAGES),+$(package))
+ DEPENDS:=+python-light $(foreach package,$(PYTHON_PACKAGES_DEPENDS),+$(package))
endef
define Package/python/description
$(INSTALL_DIR) $(STAGING_DIR)/mk/
$(INSTALL_DIR) $(1)/usr/include/ $(1)/usr/lib/ $(1)/usr/lib/pkgconfig
$(INSTALL_DIR) $(1)/usr/lib/python$(PYTHON_VERSION)/
- $(INSTALL_DATA) ./files/python-package.mk $(STAGING_DIR)/mk/
+ $(INSTALL_DATA) \
+ ./files/python-package.mk \
+ ./files/python-host.mk \
+ $(STAGING_DIR)/mk/
$(CP) \
$(PKG_INSTALL_DIR)/usr/include/python$(PYTHON_VERSION) \
$(1)/usr/include/
$(CP) \
- $(STAGING_DIR_HOST)/lib/python$(PYTHON_VERSION) \
+ $(STAGING_DIR)/host/usr/lib/python$(PYTHON_VERSION) \
$(PKG_INSTALL_DIR)/usr/lib/libpython$(PYTHON_VERSION).so* \
$(1)/usr/lib/
$(CP) \
- $(STAGING_DIR_HOST)/lib/pkgconfig/python.pc \
- $(STAGING_DIR_HOST)/lib/pkgconfig/python2.pc \
- $(STAGING_DIR_HOST)/lib/pkgconfig/python-$(PYTHON_VERSION).pc \
+ $(STAGING_DIR)/host/lib/pkgconfig/python.pc \
+ $(STAGING_DIR)/host/lib/pkgconfig/python2.pc \
+ $(STAGING_DIR)/host/lib/pkgconfig/python-$(PYTHON_VERSION).pc \
$(1)/usr/lib/pkgconfig
$(CP) \
$(PKG_INSTALL_DIR)/usr/lib/python$(PYTHON_VERSION)/config \
define PyPackage/python-light/filespec
+|/usr/lib/python$(PYTHON_VERSION)
--|/usr/lib/python$(PYTHON_VERSION)/config
-|/usr/lib/python$(PYTHON_VERSION)/distutils/cygwinccompiler.py
-|/usr/lib/python$(PYTHON_VERSION)/distutils/command/wininst*
-|/usr/lib/python$(PYTHON_VERSION)/ensurepip
-|/usr/lib/python$(PYTHON_VERSION)/idlelib
--|/usr/lib/python$(PYTHON_VERSION)/lib2to3
-|/usr/lib/python$(PYTHON_VERSION)/lib-tk
-|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_testcapi.so
-|/usr/lib/python$(PYTHON_VERSION)/pdb.doc
--without-cxx-main \
--without-pymalloc \
--with-threads \
- --with-system-expat=$(STAGING_DIR_HOST) \
- --prefix=$(STAGING_DIR_HOST) \
+ --prefix=$(STAGING_DIR)/host/usr \
+ --with-system-expat=$(STAGING_DIR)/host \
--with-ensurepip=upgrade \
CONFIG_SITE= \
CFLAGS="$(HOST_CFLAGS)"
define Host/Install
- $(INSTALL_DIR) $(STAGING_DIR_HOST)/bin/
+ $(INSTALL_DIR) $(STAGING_DIR)/host/bin/
$(MAKE) -C $(HOST_BUILD_DIR) install
- $(INSTALL_BIN) $(HOST_BUILD_DIR)/Parser/pgen $(STAGING_DIR_HOST)/bin/pgen2
+ $(INSTALL_BIN) $(HOST_BUILD_DIR)/Parser/pgen $(STAGING_DIR)/host/bin/pgen2
endef
$(eval $(call HostBuild))
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+HOST_PYTHON_INC_DIR:=$(STAGING_DIR)/host/usr/include/python$(PYTHON_VERSION)
+
+HOST_PYTHON_PKG_DIR:=/usr/lib/python$(PYTHON_VERSION)/site-packages
+
+HOST_PYTHONPATH:=$(HOST_PYTHON_LIB_DIR):$(STAGING_DIR)/host/$(HOST_PYTHON_PKG_DIR)
+define HostPython
+ if [ "$(strip $(3))" == "HOST" ]; then \
+ export PYTHONPATH="$(HOST_PYTHONPATH)"; \
+ export _python_sysroot="$(STAGING_DIR)/host"; \
+ else \
+ export PYTHONPATH="$(PYTHONPATH)"; \
+ export _python_sysroot="$(STAGING_DIR)"; \
+ fi; \
+ export PYTHONOPTIMIZE=""; \
+ export PYTHONDONTWRITEBYTECODE=1; \
+ export _python_prefix="/usr"; \
+ export _python_exec_prefix="/usr"; \
+ $(1) \
+ $(HOST_PYTHON_BIN) $(2);
+endef
+
+# These configure args are needed in detection of path to Python header files
+# using autotools.
+HOST_CONFIGURE_ARGS += \
+ _python_sysroot="$(STAGING_DIR)/host" \
+ _python_prefix="/usr" \
+ _python_exec_prefix="/usr"
+
+# $(1) => build subdir
+# $(2) => additional arguments to setup.py
+# $(3) => additional variables
+define Build/Compile/HostPyMod
+ $(call HostPython, \
+ cd $(HOST_BUILD_DIR)/$(strip $(1)); \
+ CC="$(HOSTCC)" \
+ CCSHARED="$(HOSTCC) $(HOST_FPIC)" \
+ CXX="$(HOSTCXX)" \
+ LD="$(HOSTCC)" \
+ LDSHARED="$(HOSTCC) -shared" \
+ CFLAGS="$(HOST_CFLAGS)" \
+ CPPFLAGS="$(HOST_CPPFLAGS) -I$(HOST_PYTHON_INC_DIR)" \
+ LDFLAGS="$(HOST_LDFLAGS) -lpython$(PYTHON_VERSION)" \
+ _PYTHON_HOST_PLATFORM=linux2 \
+ __PYVENV_LAUNCHER__="/usr/bin/$(PYTHON)" \
+ $(3) \
+ , \
+ ./setup.py $(2) \
+ , \
+ HOST \
+ )
+endef
+
--- /dev/null
+#
+# Copyright (C) 2006-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Package/python-dev
+$(call Package/python/Default)
+ TITLE:=Python $(PYTHON_VERSION) development files
+ DEPENDS:=+python
+endef
+
+define PyPackage/python-dev/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(CP) $(PKG_INSTALL_DIR)/usr/bin/python*config $(1)/usr/bin
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpython$(PYTHON_VERSION).so* $(1)/usr/lib
+endef
+
+$(eval $(call PyBasePackage,python-dev, \
+ /usr/lib/python$(PYTHON_VERSION)/config \
+ /usr/include/python$(PYTHON_VERSION) \
+ /usr/lib/pkgconfig \
+ , \
+ DO_NOT_ADD_TO_PACKAGE_DEPENDS \
+))
+
--- /dev/null
+#
+# Copyright (C) 2006-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Package/python-lib2to3
+$(call Package/python/Default)
+ TITLE:=Python $(PYTHON_VERSION) lib2to3 module
+ DEPENDS:=+python
+endef
+
+$(eval $(call PyBasePackage,python-lib2to3, \
+ /usr/lib/python$(PYTHON_VERSION)/lib2to3 \
+ , \
+ DO_NOT_ADD_TO_PACKAGE_DEPENDS \
+))
define Package/python-xml
$(call Package/python/Default)
TITLE:=Python $(PYTHON_VERSION) xml libs
- DEPENDS:=+python-light
+ DEPENDS:=+python-light +libexpat
endef
$(eval $(call PyBasePackage,python-xml, \
#
PYTHON_VERSION:=2.7
-PYTHON_VERSION_MICRO:=10
+PYTHON_VERSION_MICRO:=11
PYTHON_DIR:=$(STAGING_DIR)/usr
PYTHON_BIN_DIR:=$(PYTHON_DIR)/bin
PYTHON:=python$(PYTHON_VERSION)
-HOST_PYTHON_LIB_DIR:=$(STAGING_DIR_HOST)/lib/python$(PYTHON_VERSION)
-HOST_PYTHON_BIN:=$(STAGING_DIR_HOST)/bin/python2
+HOST_PYTHON_LIB_DIR:=$(STAGING_DIR)/host/usr/lib/python$(PYTHON_VERSION)
+HOST_PYTHON_BIN:=$(STAGING_DIR)/host/bin/python2
PYTHONPATH:=$(PYTHON_LIB_DIR):$(STAGING_DIR)/$(PYTHON_PKG_DIR):$(PKG_INSTALL_DIR)/$(PYTHON_PKG_DIR)
-define HostPython
- ( export PYTHONPATH="$(PYTHONPATH)"; \
- export PYTHONOPTIMIZE=""; \
- export PYTHONDONTWRITEBYTECODE=1; \
- export _python_sysroot="$(STAGING_DIR)"; \
- export _python_prefix="/usr"; \
- export _python_exec_prefix="/usr"; \
- $(1) \
- $(HOST_PYTHON_BIN) $(2); \
- )
-endef
# These configure args are needed in detection of path to Python header files
# using autotools.
endef
endef
+$(call include_mk, python-host.mk)
+
# $(1) => build subdir
# $(2) => additional arguments to setup.py
# $(3) => additional variables
find $(PKG_INSTALL_DIR) -name "*\.pyc" -o -name "*\.pyo" | xargs rm -f
endef
+define PyMod/Default
+ define Build/Compile
+ $$(call Build/Compile/PyMod,,install --prefix=/usr --root=$(PKG_INSTALL_DIR))
+ endef
+
+ define Package/$(PKG_NAME)/install
+ $(INSTALL_DIR) $$(1)$(PYTHON_PKG_DIR) $$(1)/usr/bin
+ if [ -d $(PKG_INSTALL_DIR)/usr/bin ]; then find $(PKG_INSTALL_DIR)/usr/bin -mindepth 1 -maxdepth 1 -type f -exec $(CP) \{\} $$(1)/usr/bin/ \; ; fi
+ find $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR) -mindepth 1 -maxdepth 1 \( -type f -o -type d \) -exec $(CP) \{\} $$(1)$(PYTHON_PKG_DIR)/ \;
+ endef
+
+ define Build/InstallDev
+ $(INSTALL_DIR) $$(1)/usr/bin $$(1)$(PYTHON_PKG_DIR)
+ if [ -d $(PKG_INSTALL_DIR)/usr/bin ]; then find $(PKG_INSTALL_DIR)/usr/bin -mindepth 1 -maxdepth 1 -type f -exec $(CP) \{\} $$(1)/usr/bin/ \; ; fi
+ find $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR) -mindepth 1 -maxdepth 1 \( -type f -o -type d \) -exec $(CP) \{\} $$(1)$(PYTHON_PKG_DIR)/ \;
+ endef
+endef
+
--- /dev/null
+#
+# Copyright (C) 2014-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=python3-pip
+PKG_VERSION:=7.1.2
+PKG_RELEASE:=1
+
+PKG_SOURCE:=pip-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://pypi.python.org/packages/source/p/pip/
+PKG_MD5SUM:=3823d2343d9f3aaab21cf9c917710196
+
+PKG_LICENSE:=MIT
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/pip-$(PKG_VERSION)
+PKG_USE_MIPS16:=0
+
+include $(INCLUDE_DIR)/package.mk
+$(call include_mk, python3-package.mk)
+
+define Package/python3-pip
+ SUBMENU:=Python
+ SECTION:=lang
+ CATEGORY:=Languages
+ TITLE:=Tool for installing Python $(PYTHON3_VERSION) packages.
+ URL:=https://pip.pypa.io
+ DEPENDS:=+python3 +python3-dev +python3-lib2to3 +python3-setuptools
+ MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
+endef
+
+define Package/python3-pip/description
+ A tool for installing and managing Python $(PYTHON3_VERSION) packages.
+endef
+
+define Build/Compile
+ $(call Build/Compile/Py3Mod,,\
+ install --root="$(PKG_INSTALL_DIR)" --prefix="/usr" \
+ --single-version-externally-managed \
+ )
+endef
+
+define Py3Package/python3-pip/filespec
++|$(PYTHON3_PKG_DIR)
+-|$(PYTHON3_PKG_DIR)/_vendor/distlib/*.exe
+-|$(PYTHON3_PKG_DIR)/utils/outdated.py
+endef
+
+define Py3Package/python3-pip/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(CP) $(PKG_INSTALL_DIR)/usr/bin/pip$(PYTHON3_VERSION) $(1)/usr/bin
+ $(LN) pip$(PYTHON3_VERSION) $(1)/usr/bin/pip3
+endef
+
+$(eval $(call Py3Package,python3-pip))
+$(eval $(call BuildPackage,python3-pip))
--- /dev/null
+From 771a1407b15538697a7f38209e40dbbf58828d33 Mon Sep 17 00:00:00 2001
+From: Florian Fieber <florian@florianfieber.de>
+Date: Tue, 9 Jun 2015 15:59:04 +0200
+Subject: [PATCH] Remove self version checking
+
+Signed-off-by: Florian Fieber <florian@florianfieber.de>
+---
+ pip/basecommand.py | 10 ----------
+ pip/cmdoptions.py | 10 ----------
+ 2 files changed, 20 deletions(-)
+
+diff --git a/pip/basecommand.py b/pip/basecommand.py
+index 854d113..c2337a4 100644
+--- a/pip/basecommand.py
++++ b/pip/basecommand.py
+@@ -22,7 +22,6 @@ from pip.status_codes import (
+ from pip.utils import get_prog, normalize_path
+ from pip.utils.deprecation import RemovedInPip8Warning
+ from pip.utils.logging import IndentingFormatter
+-from pip.utils.outdated import pip_version_check
+
+
+ __all__ = ['Command']
+@@ -237,15 +236,6 @@ class Command(object):
+ logger.critical('Exception:', exc_info=True)
+
+ return UNKNOWN_ERROR
+- finally:
+- # Check if we're using the latest version of pip available
+- if (not options.disable_pip_version_check and not
+- getattr(options, "no_index", False)):
+- with self._build_session(
+- options,
+- retries=0,
+- timeout=min(5, options.timeout)) as session:
+- pip_version_check(session)
+
+ return SUCCESS
+
+diff --git a/pip/cmdoptions.py b/pip/cmdoptions.py
+index 9a0446a..4fa29d3 100644
+--- a/pip/cmdoptions.py
++++ b/pip/cmdoptions.py
+@@ -514,15 +514,6 @@ no_clean = partial(
+ default=False,
+ help="Don't clean up build directories.")
+
+-disable_pip_version_check = partial(
+- Option,
+- "--disable-pip-version-check",
+- dest="disable_pip_version_check",
+- action="store_true",
+- default=False,
+- help="Don't periodically check PyPI to determine whether a new version "
+- "of pip is available for download. Implied with --no-index.")
+-
+ # Deprecated, Remove later
+ always_unzip = partial(
+ Option,
+@@ -560,7 +551,6 @@ general_group = {
+ client_cert,
+ cache_dir,
+ no_cache,
+- disable_pip_version_check,
+ ]
+ }
+
+--
+2.6.2
+
--- /dev/null
+#
+# Copyright (C) 2014-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=python3-setuptools
+PKG_VERSION:=19.4
+PKG_RELEASE:=1
+
+PKG_SOURCE:=setuptools-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://pypi.python.org/packages/source/s/setuptools/
+PKG_MD5SUM:=c5a7d90c1e0acf8c4ec5c2bf31bc25b5
+
+PKG_LICENSE:=PSF
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/setuptools-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+$(call include_mk, python3-package.mk)
+
+define Package/python3-setuptools
+ SUBMENU:=Python
+ SECTION:=lang
+ CATEGORY:=Languages
+ TITLE:=Tool for installing Python $(PYTHON3_VERSION) packages.
+ URL:=https://bitbucket.org/pypa/setuptools
+ DEPENDS:=+python3 +python3-dev +python3-lib2to3
+ MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
+endef
+
+define Package/python3-setuptools/description
+ Easily download, build, install, upgrade, and uninstall Python $(PYTHON3_VERSION) packages
+endef
+
+define Build/Compile
+ $(call Build/Compile/Py3Mod,,\
+ install --root="$(PKG_INSTALL_DIR)" --prefix="/usr" \
+ --single-version-externally-managed \
+ )
+endef
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(PYTHON3_LIB_DIR)
+ $(CP) \
+ $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/* \
+ $(PYTHON3_LIB_DIR)
+endef
+
+define Py3Package/python3-setuptools/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/easy_install-$(PYTHON3_VERSION) $(1)/usr/bin/
+ $(LN) easy_install-$(PYTHON3_VERSION) $(1)/usr/bin/easy_install3
+endef
+
+$(eval $(call Py3Package,python3-setuptools))
+$(eval $(call BuildPackage,python3-setuptools))
--- /dev/null
+diff --git a/setuptools/dist.py b/setuptools/dist.py
+index 7785541..23108c7 100644
+--- a/setuptools/dist.py
++++ b/setuptools/dist.py
+@@ -18,7 +18,6 @@ from setuptools.extern.six.moves import map
+ from pkg_resources.extern import packaging
+
+ from setuptools.depends import Require
+-from setuptools import windows_support
+ import pkg_resources
+
+
+@@ -335,7 +334,6 @@ class Distribution(_Distribution):
+ egg_cache_dir = os.path.join(os.curdir, '.eggs')
+ if not os.path.exists(egg_cache_dir):
+ os.mkdir(egg_cache_dir)
+- windows_support.hide_file(egg_cache_dir)
+ readme_txt_filename = os.path.join(egg_cache_dir, 'README.txt')
+ with open(readme_txt_filename, 'w') as f:
+ f.write('This directory contains eggs that were downloaded '
--- /dev/null
+diff --git a/setuptools/command/easy_install.py b/setuptools/command/easy_install.py
+index df1655b..24c34e5 100755
+--- a/setuptools/command/easy_install.py
++++ b/setuptools/command/easy_install.py
+@@ -1885,7 +1885,7 @@ class CommandSpec(list):
+ return param
+ if isinstance(param, list):
+ return cls(param)
+- if param is None:
++ if param is None or os.environ.get('__PYVENV_LAUNCHER__'):
+ return cls.from_environment()
+ # otherwise, assume it's a string.
+ return cls.from_string(param)
PYTHON_VERSION_MICRO:=$(PYTHON3_VERSION_MICRO)
PKG_NAME:=python3
-PKG_RELEASE:=1
+PKG_RELEASE:=3
PKG_VERSION:=$(PYTHON_VERSION).$(PYTHON_VERSION_MICRO)
PKG_SOURCE:=Python-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=http://www.python.org/ftp/python/$(PKG_VERSION)
+PKG_SOURCE_URL:=https://www.python.org/ftp/python/$(PKG_VERSION)
PKG_MD5SUM:=d149d2812f10cbe04c042232e7964171
PKG_LICENSE:=PSF
SECTION:=lang
CATEGORY:=Languages
TITLE:=Python $(PYTHON_VERSION) programming language
- URL:=http://www.python.org/
+ URL:=https://www.python.org/
MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
endef
define Package/python3
$(call Package/python3/Default)
- DEPENDS:=+python3-light $(foreach package,$(PYTHON3_PACKAGES),+$(package))
+ DEPENDS:=+python3-light $(foreach package,$(filter-out python3-dev python3-lib2to3,$(PYTHON3_PACKAGES)),+$(package))
endef
define Package/python3/description
$(PKG_INSTALL_DIR)/usr/include/python$(PYTHON_VERSION) \
$(1)/usr/include/
$(CP) \
- $(STAGING_DIR_HOST)/lib/python$(PYTHON_VERSION) \
+ $(STAGING_DIR)/host/lib/python$(PYTHON_VERSION) \
$(PKG_INSTALL_DIR)/usr/lib/libpython$(PYTHON_VERSION).so* \
$(1)/usr/lib/
$(CP) \
define Py3Package/python3-light/filespec
+|/usr/lib/python$(PYTHON_VERSION)
--|/usr/lib/python$(PYTHON_VERSION)/config-$(PYTHON_VERSION)
-|/usr/lib/python$(PYTHON_VERSION)/distutils/cygwinccompiler.py
-|/usr/lib/python$(PYTHON_VERSION)/distutils/command/wininst*
-|/usr/lib/python$(PYTHON_VERSION)/ensurepip
-|/usr/lib/python$(PYTHON_VERSION)/idlelib
--|/usr/lib/python$(PYTHON_VERSION)/lib2to3
-|/usr/lib/python$(PYTHON_VERSION)/tkinter
-|/usr/lib/python$(PYTHON_VERSION)/turtledemo
-|/usr/lib/python$(PYTHON_VERSION)/lib-dynload/_test*.so
--without-cxx-main \
--without-pymalloc \
--with-threads \
- --prefix=$(STAGING_DIR_HOST) \
- --with-system-expat=$(STAGING_DIR_HOST) \
+ --prefix=$(STAGING_DIR)/host \
+ --with-system-expat=$(STAGING_DIR)/host \
--with-ensurepip=upgrade \
CONFIG_SITE= \
CFLAGS="$(HOST_CFLAGS)"
endef
define Host/Install
- $(INSTALL_DIR) $(STAGING_DIR_HOST)/bin/
+ $(INSTALL_DIR) $(STAGING_DIR)/host/bin/
$(MAKE) -C $(HOST_BUILD_DIR) install
- $(INSTALL_BIN) $(HOST_BUILD_DIR)/Parser/pgen $(STAGING_DIR_HOST)/bin/pgen3
- $(INSTALL_BIN) $(HOST_BUILD_DIR)/Programs/_freeze_importlib $(STAGING_DIR_HOST)/bin/_freeze_importlib
+ $(INSTALL_BIN) $(HOST_BUILD_DIR)/Parser/pgen $(STAGING_DIR)/host/bin/pgen3
+ $(INSTALL_BIN) $(HOST_BUILD_DIR)/Programs/_freeze_importlib $(STAGING_DIR)/host/bin/_freeze_importlib
endef
$(eval $(call HostBuild))
--- /dev/null
+#
+# Copyright (C) 2006-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Package/python3-dev
+$(call Package/python3/Default)
+ TITLE:=Python $(PYTHON3_VERSION) development files
+ DEPENDS:=+python3
+endef
+
+define Py3Package/python3-dev/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(CP) $(PKG_INSTALL_DIR)/usr/bin/python$(PYTHON3_VERSION)-config $(1)/usr/bin
+ $(LN) python$(PYTHON3_VERSION)-config $(1)/usr/bin/python3-config
+ $(LN) python$(PYTHON_VERSION)/config-$(PYTHON_VERSION)/libpython$(PYTHON3_VERSION).a $(1)/usr/lib/libpython$(PYTHON3_VERSION).a
+endef
+
+$(eval $(call Py3BasePackage,python3-dev, \
+ /usr/lib/python$(PYTHON_VERSION)/config-$(PYTHON_VERSION) \
+ /usr/include/python$(PYTHON_VERSION) \
+ /usr/lib/pkgconfig \
+))
--- /dev/null
+#
+# Copyright (C) 2006-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Package/python3-lib2to3
+$(call Package/python3/Default)
+ TITLE:=Python $(PYTHON3_VERSION) lib2to3 module
+ DEPENDS:=+python3
+endef
+
+$(eval $(call Py3BasePackage,python3-lib2to3, \
+ /usr/lib/python$(PYTHON3_VERSION)/lib2to3 \
+))
#
-# Copyright (C) 2007-2014 OpenWrt.org
+# Copyright (C) 2007-2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PYTHON3:=python$(PYTHON3_VERSION)
-HOST_PYTHON3_LIB_DIR:=$(STAGING_DIR_HOST)/lib/python$(PYTHON3_VERSION)
-HOST_PYTHON3_BIN:=$(STAGING_DIR_HOST)/bin/python3
+HOST_PYTHON3_LIB_DIR:=$(STAGING_DIR)/host/lib/python$(PYTHON3_VERSION)
+HOST_PYTHON3_BIN:=$(STAGING_DIR)/host/bin/python3
PYTHON3PATH:=$(PYTHON3_LIB_DIR):$(STAGING_DIR)/$(PYTHON3_PKG_DIR):$(PKG_INSTALL_DIR)/$(PYTHON3_PKG_DIR)
define HostPython3
( export PYTHONPATH="$(PYTHON3PATH)"; \
export PYTHONOPTIMIZE=""; \
export PYTHONDONTWRITEBYTECODE=1; \
+ export _python_sysroot="$(STAGING_DIR)"; \
+ export _python_prefix="/usr"; \
+ export _python_exec_prefix="/usr"; \
$(1) \
$(HOST_PYTHON3_BIN) $(2); \
)
endef
+# These configure args are needed in detection of path to Python header files
+# using autotools.
+CONFIGURE_ARGS += \
+ _python_sysroot="$(STAGING_DIR)" \
+ _python_prefix="/usr" \
+ _python_exec_prefix="/usr"
+
PKG_USE_MIPS16:=0
# This is required in addition to PKG_USE_MIPS16:=0 because otherwise MIPS16
# flags are inherited from the Python base package (via sysconfig module)
#
-# Copyright (C) 2006-2015 OpenWrt.org
+# Copyright (C) 2006-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=ruby
-PKG_VERSION:=2.2.3
-PKG_RELEASE:=1
+PKG_VERSION:=2.2.4
+PKG_RELEASE:=2
PKG_LIBVER:=2.2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://cache.ruby-lang.org/pub/ruby/$(PKG_LIBVER)/
-PKG_MD5SUM:=f49a734729a71774d4a94a9a603114b2
+PKG_MD5SUM:=c3d65f6d2ebe90dda81a37885ea244f5
PKG_MAINTAINER:=Luiz Angelo Daros de Luca <luizluca@gmail.com>
PKG_LICENSE:=BSD-2-Clause
PKG_LICENSE_FILES:=COPYING
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk
+HOST_CONFIGURE_ARGS += \
+ --disable-install-doc \
+ --disable-install-rdoc \
+ --disable-install-capi \
+ --with-static-linked-ext \
+ --with-out-ext=tk,tk/tkutil,win32,win32ole,dbm,gdbm,readline \
+
+# even not used, host build with restricted exts results in gems not being
+# compiled for target (probably some cross compiling problem like checking
+# host for selecting target features)
+# --with-out-ext \
+# --with-ext=thread,stringio \
+
+CONFIGURE_ARGS += \
+ --enable-shared \
+ --enable-static \
+ --disable-rpath \
+ $(call autoconf_bool,CONFIG_IPV6,ipv6) \
+ --disable-install-doc \
+ --disable-install-capi \
+ --with-ruby-version=minor \
+ --with-iconv-dir=$(ICONV_PREFIX) \
+ --with-out-ext=tk,tk/tkutil,win32,win32ole
+
+ifndef CONFIG_RUBY_DIGEST_USE_OPENSSL
+CONFIGURE_ARGS += \
+ --with-bundled-sha1\
+ --with-bundled-md5\
+ --with-bundled-rmd160\
+ --with-bundled-sha2 \
+
+endif
+
+TARGET_LDFLAGS += -L$(PKG_BUILD_DIR)
+
+# Ruby uses DLDFLAGS and not LDFLAGS for libraries. LDFLAGS is only for execs.
+# However, DLDFLAGS from configure is not passed to Makefile when target is linux.
+# XLDFLAGS is used by both libraries and execs. This is somehow brute force but
+# if will fix when some LD_FLAGS is needef for libraries. As side effect, it will
+# duplicate ld args for binaries.
+CONFIGURE_VARS += XLDFLAGS="$(TARGET_LDFLAGS)"
+
+MAKE_FLAGS += \
+ DESTDIR="$(PKG_INSTALL_DIR)" \
+ SHELL="/bin/bash"
+
+define Build/InstallDev
+ ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
+ . \
+ ) | ( cd $(1); $(TAR) -xf - )
+endef
+
define Package/ruby/Default
SUBMENU:=Ruby
SECTION:=lang
$(call Package/ruby/Default/description)
endef
+define RubyDependency
+ $(eval \
+ $(call Package/Default)
+ $(call Package/ruby-$(1))
+ FILTER_CONFIG:=$$(strip \
+ $$(foreach config_dep, \
+ $$(filter @%, \
+ $$(foreach v, \
+ $$(DEPENDS), \
+ $$(if $$(findstring :,$$v),,$$v) \
+ ) \
+ ), \
+ $$(subst @,,$$(config_dep)) \
+ ) \
+ )
+ ifneq (,$$(FILTER_CONFIG))
+ FILTER_CONFIG:=($$(subst $$(space),&&,$$(FILTER_CONFIG))):
+ endif
+ ) \
+ +$(FILTER_CONFIG)ruby-$(1)
+endef
+
+define Package/ruby/config
+ comment "Standard Library"
+ depends on PACKAGE_ruby
+
+ config PACKAGE_ruby-stdlib
+ depends on PACKAGE_ruby
+ default m if ALL
+ prompt "Select Ruby Complete Standard Library (ruby-stdlib)"
+
+endef
+
+define Package/ruby/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_DIR) $(1)/usr/lib/ruby/$(PKG_LIBVER)
+ $(INSTALL_DIR) $(1)/usr/lib/ruby/vendor_ruby/$(PKG_LIBVER)
+ $(INSTALL_DIR) $(1)/usr/lib/ruby/site_ruby/$(PKG_LIBVER)
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ruby $(1)/usr/lib/ruby/ruby$(PKG_LIBVER)-bin
+ $(INSTALL_BIN) ./files/ruby $(1)/usr/bin/ruby
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/vendor_ruby/$(PKG_LIBVER)/* $(1)/usr/lib/ruby/vendor_ruby/$(PKG_LIBVER)/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/site_ruby/$(PKG_LIBVER)/* $(1)/usr/lib/ruby/site_ruby/$(PKG_LIBVER)/
+ $(SED) "s%@RUBY_LIBPATH@%/usr/lib/ruby/$(PKG_LIBVER)%" $(1)/usr/bin/ruby
+ $(SED) "s%@RUBY_BINPATH@%/usr/lib/ruby/ruby$(PKG_LIBVER)-bin%" $(1)/usr/bin/ruby
+endef
+
define Package/libruby
$(call Package/ruby/Default)
SUBMENU:=
TITLE+= (shared library)
DEPENDS+= +libpthread +librt +libgmp
endef
+define Package/libruby/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libruby.so.* $(1)/usr/lib/
+endef
+RUBY_STDLIB :=
define Package/ruby-stdlib
$(call Package/ruby/Default)
TITLE:=Ruby standard libraries (metadata for all stdlib subsets)
- DEPENDS:=ruby +ruby-misc +ruby-bigdecimal +ruby-cgi +ruby-csv +ruby-datetime +ruby-dbm +ruby-debuglib\
- +ruby-digest +ruby-drb +ruby-enc +ruby-enc-extra +ruby-erb +ruby-gdbm +ruby-gems \
- +ruby-json +ruby-io-console +ruby-irb +ruby-fiddle +ruby-filelib +ruby-logger +ruby-math \
- +ruby-minitest +ruby-mkmf +ruby-multithread +ruby-nkf +ruby-net +ruby-openssl +ruby-optparse \
- +ruby-patterns +ruby-powerassert +ruby-prettyprint +ruby-pstore +ruby-psych +ruby-racc +ruby-rake \
- +ruby-rbconfig +ruby-rdoc +ruby-readline +ruby-rexml +ruby-rinda +ruby-ripper +ruby-rss +ruby-sdbm \
- +ruby-shell +ruby-socket +ruby-testunit +ruby-unicodenormalize +ruby-uri +ruby-webrick +ruby-xmlrpc \
- +ruby-yaml +ruby-zlib
+ DEPENDS:=ruby $(foreach subpackage,$(RUBY_STDLIB),$(strip $(call RubyDependency,$(subpackage))))
+ HIDDEN:=1
endef
define Package/ruby-stdlib/description
endef
-define Package/ruby-bigdecimal
-$(call Package/ruby/Default)
- TITLE:=Arbitrary-precision decimal floating-point lib for Ruby
- DEPENDS:=ruby
-endef
-
-define Package/ruby-bigdecimal/description
- Provides bigdecimal* files
-endef
-
-define Package/ruby-cgi
-$(call Package/ruby/Default)
- TITLE:=Ruby CGI support toolkit
- DEPENDS:=ruby +ruby-filelib +ruby-pstore
-endef
-
-define Package/ruby-bigdecimal/description
- Provides bigdecimal* files
-
-endef
-
-define Package/ruby-csv
-$(call Package/ruby/Default)
- TITLE+=CSV library
- DEPENDS:=ruby +ruby-patterns +ruby-datetime +ruby-enc
+# nothing to do
+define Package/ruby-stdlib/install
+ /bin/true
endef
-define Package/ruby-csv/description
- Provides csv.rb file
-
+define Package/ruby-bigdecimal/files
+/usr/lib/ruby/$(PKG_LIBVER)/*/bigdecimal.so
+/usr/lib/ruby/$(PKG_LIBVER)/bigdecimal/
+/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/bigdecimal-*.gemspec
endef
-define Package/ruby-datetime
-$(call Package/ruby/Default)
- TITLE+= date library
- DEPENDS:=ruby
+define Package/ruby-cgi/files
+/usr/lib/ruby/$(PKG_LIBVER)/cgi
+/usr/lib/ruby/$(PKG_LIBVER)/cgi.rb
endef
-define Package/ruby-datetime/description
- Provides date.rb and time.rb
-
+define Package/ruby-csv/files
+/usr/lib/ruby/$(PKG_LIBVER)/csv.rb
endef
-define Package/ruby-dbm
-$(call Package/ruby/Default)
- TITLE:=Ruby support for dbm
- DEPENDS:=ruby +libdb47
+define Package/ruby-datetime/files
+/usr/lib/ruby/$(PKG_LIBVER)/time.rb
+/usr/lib/ruby/$(PKG_LIBVER)/date.rb
+/usr/lib/ruby/$(PKG_LIBVER)/*/date_core.so
endef
define Package/ruby-dbm/description
This package provides dbm.so file.
endef
-
-define Package/ruby-debuglib
-$(call Package/ruby/Default)
- TITLE+= debug library
- DEPENDS:=ruby +ruby-multithread +ruby-prettyprint
-endef
-
-define Package/ruby-debuglib/description
- Provides files for debugging:
- - benchmark.rb
- - debug.rb
- - objspace.so
- - profile.rb
- - profiler.rb
- - tracer.rb
-
+define Package/ruby-dbm/files
+/usr/lib/ruby/$(PKG_LIBVER)/*/dbm.so
endef
-define Package/ruby-digest
-$(call Package/ruby/Default)
- TITLE:=Ruby Digest Library
- DEPENDS:=ruby +RUBY_DIGEST_USE_OPENSSL:libopenssl
+define Package/ruby-debuglib/files
+/usr/lib/ruby/$(PKG_LIBVER)/profile.rb
+/usr/lib/ruby/$(PKG_LIBVER)/profiler.rb
+/usr/lib/ruby/$(PKG_LIBVER)/debug.rb
+/usr/lib/ruby/$(PKG_LIBVER)/tracer.rb
+/usr/lib/ruby/$(PKG_LIBVER)/benchmark.rb
+/usr/lib/ruby/$(PKG_LIBVER)/*/objspace.so
endef
define Package/ruby-digest/description
bundled hash functions.
endef
-
define Package/ruby-digest/config
config RUBY_DIGEST_USE_OPENSSL
default n
endef
-
-define Package/ruby-drb
-$(call Package/ruby/Default)
- TITLE:=Ruby distributed object system
- DEPENDS:=ruby +ruby-filelib +ruby-patterns +ruby-socket
-endef
-
-define Package/ruby-drb/description
- Provides drb* files
-
-endef
-
-define Package/ruby-enc
-$(call Package/ruby/Default)
- TITLE:=Ruby character re-coding library charset (small subset)
- DEPENDS:=ruby
-endef
-
-define Package/ruby-enc/description
- Provides ruby encoding library for encodings used directly by
- libraries in Ruby Standard Library:
- - enc/encdb.so
- - enc/euc_jp.so
- - enc/iso_8859_1.so
- - enc/utf_16be.so
- - enc/utf_16le.so
- - enc/utf_32be.so
- - enc/utf_32le.so
- FYI: ASCII-8BIT, UTF-7, UTF-8 and US-ASCII are already in Core.
-
-endef
-
-define Package/ruby-enc-extra
-$(call Package/ruby/Default)
- TITLE:=Ruby character re-coding library charset (extra subset)
- DEPENDS:=ruby +ruby-enc
-endef
-
-define Package/ruby-enc-extra/description
- Provides extra encodings not provided by ruby-enc:
- - enc/big5.so
- - enc/cp949.so
- - enc/emacs_mule.so
- - enc/euc_kr.so
- - enc/euc_tw.so
- - enc/gb18030.so
- - enc/gb2312.so
- - enc/gbk.so
- - enc/iso_8859_10.so
- - enc/iso_8859_11.so
- - enc/iso_8859_13.so
- - enc/iso_8859_14.so
- - enc/iso_8859_15.so
- - enc/iso_8859_16.so
- - enc/iso_8859_2.so
- - enc/iso_8859_3.so
- - enc/iso_8859_4.so
- - enc/iso_8859_5.so
- - enc/iso_8859_6.so
- - enc/iso_8859_7.so
- - enc/iso_8859_8.so
- - enc/iso_8859_9.so
- - enc/koi8_r.so
- - enc/koi8_u.so
- - enc/shift_jis.so
- - enc/trans/big5.so
- - enc/trans/chinese.so
- - enc/trans/emoji.so
- - enc/trans/emoji_iso2022_kddi.so
- - enc/trans/emoji_sjis_docomo.so
- - enc/trans/emoji_sjis_kddi.so
- - enc/trans/emoji_sjis_softbank.so
- - enc/trans/escape.so
- - enc/trans/gb18030.so
- - enc/trans/gbk.so
- - enc/trans/iso2022.so
- - enc/trans/japanese.so
- - enc/trans/japanese_euc.so
- - enc/trans/japanese_sjis.so
- - enc/trans/korean.so
- - enc/trans/single_byte.so
- - enc/trans/transdb.so
- - enc/trans/utf8_mac.so
- - enc/trans/utf_16_32.so
- - enc/windows_1251.so
- - enc/windows_31j.so
-
-endef
-
-define Package/ruby-erb
-$(call Package/ruby/Default)
- TITLE+= (embedded interpreter)
- DEPENDS:=ruby +ruby-cgi
-endef
-
-define Package/ruby-erb/description
- Provides erb* files
-
-endef
-
-define Package/ruby-fiddle
-$(call Package/ruby/Default)
- TITLE:=A libffi wrapper for Ruby
- DEPENDS:=ruby +libffi
-endef
-
-define Package/ruby-fiddle/description
- Provides fiddle* files
-
-endef
-
-define Package/ruby-filelib
-$(call Package/ruby/Default)
- TITLE+= File utils library
- DEPENDS:=ruby +ruby-enc +ruby-misc
-endef
-
-define Package/ruby-filelib/description
- Provides filesystem interaction files, including
- path and temp:
- - fileutils.rb
- - find.rb
- - pathname.rb
- - pathname.so
- - tempfile.rb
- - tmpdir.rb
-
-endef
-
-define Package/ruby-gdbm
-$(call Package/ruby/Default)
- TITLE:=Ruby support for gdbm
- DEPENDS:=ruby +libgdbm
-endef
-
-define Package/ruby-gdbm/description
- Provides gdbm* files
-
-endef
-
-define Package/ruby-gems
-$(call Package/ruby/Default)
- TITLE:=Ruby gems packet management
- DEPENDS:=ruby +ruby-net +ruby-rdoc
-endef
-
-define Package/ruby-gems/description
- Provides rubygems for gems usage, download and installation
-
-endef
-
-define Package/ruby-io-console
-$(call Package/ruby/Default)
- TITLE+= Console interface
- DEPENDS:=ruby
-endef
-
-define Package/ruby-io-console/description
- Provides io-console* files
-
-endef
-
-define Package/ruby-irb
-$(call Package/ruby/Default)
- TITLE+= (interactive shell)
- DEPENDS:=ruby +ruby-debuglib +ruby-filelib +ruby-math
-endef
-
-define Package/ruby-irb/description
- Provides irb* files
-
-endef
-
-define Package/ruby-json
-$(call Package/ruby/Default)
- TITLE:=Ruby support for JSON
- DEPENDS:=ruby +ruby-datetime +ruby-misc
-endef
-
-define Package/ruby-json/description
- Provides json* files
-
+define Package/ruby-digest/files
+/usr/lib/ruby/$(PKG_LIBVER)/digest
+/usr/lib/ruby/$(PKG_LIBVER)/digest.rb
+/usr/lib/ruby/$(PKG_LIBVER)/*/digest.so
+/usr/lib/ruby/$(PKG_LIBVER)/*/digest/*
endef
-define Package/ruby-logger
-$(call Package/ruby/Default)
- TITLE+= logger and syslog library
- DEPENDS:=ruby +ruby-multithread
+define Package/ruby-drb/files
+/usr/lib/ruby/$(PKG_LIBVER)/drb.rb
+/usr/lib/ruby/$(PKG_LIBVER)/drb
endef
-define Package/ruby-logger/description
- Provides log library, including syslog:
- - logger.rb
- - syslog.so
- - syslog/logger.rb
-
+define Package/ruby-enc/files
+/usr/lib/ruby/$(PKG_LIBVER)/*/enc/encdb.so
+/usr/lib/ruby/$(PKG_LIBVER)/*/enc/iso_8859_1.so
+/usr/lib/ruby/$(PKG_LIBVER)/*/enc/utf_*.so
+/usr/lib/ruby/$(PKG_LIBVER)/*/enc/euc_jp.so
endef
-define Package/ruby-math
-$(call Package/ruby/Default)
- TITLE+= math library
- DEPENDS:=ruby +ruby-patterns
+define Package/ruby-enc-extra/files
+/usr/lib/ruby/$(PKG_LIBVER)/*/enc
endef
-
-define Package/ruby-math/description
- Provides math related files:
- - cmath.rb
- - complex.rb
- - mathn.rb
- - mathn/complex.so
- - mathn/rational.so
- - matrix.rb
- - matrix/eigenvalue_decomposition.rb
- - matrix/lup_decomposition.rb
- - prime.rb
- - rational.rb
-
+define Package/ruby-enc-extra/files-excluded
+$(call Package/ruby-enc/files)
endef
-define Package/ruby-minitest
-$(call Package/ruby/Default)
- TITLE:=Gem minitest shipped with Ruby
- DEPENDS:=ruby +ruby-gems
+define Package/ruby-erb/files
+/usr/bin/erb
+/usr/lib/ruby/$(PKG_LIBVER)/erb.rb
endef
-define Package/ruby-minitest/description
- Provides minitest gem
-
+define Package/ruby-fiddle/files
+/usr/lib/ruby/$(PKG_LIBVER)/fiddle.rb
+/usr/lib/ruby/$(PKG_LIBVER)/fiddle/
+/usr/lib/ruby/$(PKG_LIBVER)/*/fiddle.so
endef
-define Package/ruby-misc
-$(call Package/ruby/Default)
- TITLE:=Ruby standard libraries subset (miscelaneous files)
- DEPENDS:=ruby
-endef
-
-define Package/ruby-misc/description
- This package contains miscellaneous files from stdlib
- not splitted in other ruby packages like stringio:
- - English.rb
- - abbrev.rb
- - base64.rb
- - continuation.so
- - coverage.so
- - delegate.rb
- - e2mmap.rb
- - etc.so
- - expect.rb
- - fcntl.so
- - fiber.so
- - getoptlong.rb
- - open3.rb
- - ostruct.rb
- - pty.so
- - scanf.rb
- - securerandom.rb
- - set.rb
- - shellwords.rb
- - stringio.so
- - strscan.so
- - tsort.rb
- - weakref.rb
-
-endef
-
-define Package/ruby-mkmf
-$(call Package/ruby/Default)
- TITLE+= makefile library
- DEPENDS:=ruby +ruby-filelib +ruby-optparse +ruby-rbconfig
+define Package/ruby-filelib/files
+/usr/lib/ruby/$(PKG_LIBVER)/tmpdir.rb
+/usr/lib/ruby/$(PKG_LIBVER)/tempfile.rb
+/usr/lib/ruby/$(PKG_LIBVER)/pathname.rb
+/usr/lib/ruby/$(PKG_LIBVER)/*/pathname.so
+/usr/lib/ruby/$(PKG_LIBVER)/find.rb
+/usr/lib/ruby/$(PKG_LIBVER)/fileutils.rb
endef
-define Package/ruby-mkmf/description
- Provides mkmf* files
-
+define Package/ruby-gdbm/files
+/usr/lib/ruby/$(PKG_LIBVER)/*/gdbm.so
endef
-define Package/ruby-multithread
-$(call Package/ruby/Default)
- TITLE+= multithread library
- DEPENDS:=ruby +ruby-misc
+define Package/ruby-gems/files
+/usr/lib/ruby/$(PKG_LIBVER)/ubygems.rb
+/usr/lib/ruby/$(PKG_LIBVER)/rubygems.rb
+/usr/lib/ruby/$(PKG_LIBVER)/rubygems
endef
-
-define Package/ruby-multithread/description
- Provides files for multithread usage:
- - io/nonblock.so
- - io/wait.so
- - thread.so (FYI, Thread is a core class)
- - monitor.rb
- - mutex_m.rb
- - sync.rb
- - thwait.rb
- - timeout.rb
-
+define Package/ruby-gems/files-excluded
+/usr/lib/ruby/$(PKG_LIBVER)/rubygems/test_case.rb
+/usr/lib/ruby/$(PKG_LIBVER)/rubygems/package/tar_test_case.rb
+/usr/lib/ruby/$(PKG_LIBVER)/rubygems/installer_test_case.rb
endef
-
-define Package/ruby-net
-$(call Package/ruby/Default)
- TITLE:=Ruby Network Protocols Library
- DEPENDS:=ruby +ruby-datetime +ruby-digest +ruby-filelib +ruby-uri
+define Package/ruby-gems/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/gem $(1)/usr/bin/
+ $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default
+ $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems
+ $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/doc
+ $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/cache
+ $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/extensions
+ $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/build_info
+ $(call RubyBuildPackage/install,gems,$(1))
endef
-define Package/ruby-net/description
- Provides net* files
-
+define Package/ruby-io-console/files
+/usr/lib/ruby/$(PKG_LIBVER)/*/io/console.so
+/usr/lib/ruby/$(PKG_LIBVER)/io/console/
+/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/io-console-*.gemspec
endef
-define Package/ruby-nkf
-$(call Package/ruby/Default)
- TITLE:=Ruby Network Kanji Filter
- DEPENDS:=ruby +ruby-enc
+define Package/ruby-irb/files
+/usr/lib/ruby/$(PKG_LIBVER)/irb
+/usr/lib/ruby/$(PKG_LIBVER)/irb.rb
endef
-
-define Package/ruby-nkf/description
- Provides nkf* files
-
+define Package/ruby-irb/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/irb $(1)/usr/bin/
+ $(call RubyBuildPackage/install,irb,$(1))
endef
-define Package/ruby-openssl
-$(call Package/ruby/Default)
- TITLE:=Ruby support for openssl
- DEPENDS:=ruby +ruby-enc +libopenssl +ruby-misc
+define Package/ruby-json/files
+/usr/lib/ruby/$(PKG_LIBVER)/json.rb
+/usr/lib/ruby/$(PKG_LIBVER)/json
+/usr/lib/ruby/$(PKG_LIBVER)/*/json
+/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/json-*.gemspec
endef
-
-define Package/ruby-openssl/description
- Provides openssl* files
-
+define Package/ruby-json/files-excluded
+$(call Package/ruby-psych/files)
endef
-define Package/ruby-optparse
-$(call Package/ruby/Default)
- TITLE:=Ruby command-line option analysis
- DEPENDS:=ruby +ruby-misc
+define Package/ruby-logger/files
+/usr/lib/ruby/$(PKG_LIBVER)/logger.rb
+/usr/lib/ruby/$(PKG_LIBVER)/syslog/logger.rb
+/usr/lib/ruby/$(PKG_LIBVER)/*/syslog.so
endef
-define Package/ruby-optparse/description
- Provides optparse* files
-
+define Package/ruby-math/files
+/usr/lib/ruby/$(PKG_LIBVER)/prime.rb
+/usr/lib/ruby/$(PKG_LIBVER)/mathn.rb
+/usr/lib/ruby/$(PKG_LIBVER)/cmath.rb
+/usr/lib/ruby/$(PKG_LIBVER)/*/mathn
+/usr/lib/ruby/$(PKG_LIBVER)/matrix.rb
+/usr/lib/ruby/$(PKG_LIBVER)/matrix
endef
-define Package/ruby-patterns
-$(call Package/ruby/Default)
- TITLE:=Ruby design patterns implementation
- DEPENDS:=ruby +ruby-multithread
+define Package/ruby-minitest/files
+/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/minitest-*.gemspec
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/minitest-*
endef
-
-define Package/ruby-patterns/description
- Provides design patterns helpers files:
- - forwardable.rb
- - observer.rb
- - singleton.rb
-
+define Package/ruby-minitest/files-excluded
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/minitest-*/test
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/minitest-*/*.txt
endef
-define Package/ruby-powerassert
-$(call Package/ruby/Default)
- TITLE:=Gem power_assert shipped with Ruby
- DEPENDS:=ruby +ruby-ripper
+define Package/ruby-misc/files
+/usr/lib/ruby/$(PKG_LIBVER)/English.rb
+/usr/lib/ruby/$(PKG_LIBVER)/abbrev.rb
+/usr/lib/ruby/$(PKG_LIBVER)/base64.rb
+/usr/lib/ruby/$(PKG_LIBVER)/delegate.rb
+/usr/lib/ruby/$(PKG_LIBVER)/e2mmap.rb
+/usr/lib/ruby/$(PKG_LIBVER)/expect.rb
+/usr/lib/ruby/$(PKG_LIBVER)/getoptlong.rb
+/usr/lib/ruby/$(PKG_LIBVER)/open3.rb
+/usr/lib/ruby/$(PKG_LIBVER)/ostruct.rb
+/usr/lib/ruby/$(PKG_LIBVER)/scanf.rb
+/usr/lib/ruby/$(PKG_LIBVER)/securerandom.rb
+/usr/lib/ruby/$(PKG_LIBVER)/set.rb
+/usr/lib/ruby/$(PKG_LIBVER)/shellwords.rb
+/usr/lib/ruby/$(PKG_LIBVER)/tsort.rb
+/usr/lib/ruby/$(PKG_LIBVER)/weakref.rb
+/usr/lib/ruby/$(PKG_LIBVER)/*/continuation.so
+/usr/lib/ruby/$(PKG_LIBVER)/*/coverage.so
+/usr/lib/ruby/$(PKG_LIBVER)/*/etc.so
+/usr/lib/ruby/$(PKG_LIBVER)/*/fcntl.so
+/usr/lib/ruby/$(PKG_LIBVER)/*/fiber.so
+/usr/lib/ruby/$(PKG_LIBVER)/*/pty.so
+/usr/lib/ruby/$(PKG_LIBVER)/*/stringio.so
+/usr/lib/ruby/$(PKG_LIBVER)/*/strscan.so
endef
-define Package/ruby-powerassert/description
- Power Assert gem for Ruby. Power Assert shows each value of variables
- and method calls in the expression. It is useful for testing, providing
- which value wasn't correct when the condition is not satisfied
-
+define Package/ruby-mkmf/files
+/usr/lib/ruby/$(PKG_LIBVER)/mkmf.rb
+/usr/lib/ruby/$(PKG_LIBVER)/un.rb
endef
-define Package/ruby-prettyprint
-$(call Package/ruby/Default)
- TITLE:=Ruby PrettyPrint librart
- DEPENDS:=ruby +ruby-misc
+define Package/ruby-multithread/files
+/usr/lib/ruby/$(PKG_LIBVER)/monitor.rb
+/usr/lib/ruby/$(PKG_LIBVER)/timeout.rb
+/usr/lib/ruby/$(PKG_LIBVER)/thwait.rb
+/usr/lib/ruby/$(PKG_LIBVER)/mutex_m.rb
+/usr/lib/ruby/$(PKG_LIBVER)/sync.rb
+/usr/lib/ruby/$(PKG_LIBVER)/*/thread.so
+/usr/lib/ruby/$(PKG_LIBVER)/*/io/wait.so
+/usr/lib/ruby/$(PKG_LIBVER)/*/io/nonblock.so
endef
-define Package/ruby-prettyprint/description
- Provides Pretty Print library:
- - pp.rb
- - prettyprint.rb
-
+define Package/ruby-net/files
+/usr/lib/ruby/$(PKG_LIBVER)/open-uri.rb
+/usr/lib/ruby/$(PKG_LIBVER)/net/*
endef
-define Package/ruby-pstore
-$(call Package/ruby/Default)
- TITLE+=file based persistence
- DEPENDS:=ruby +ruby-digest +ruby-enc
+define Package/ruby-nkf/files
+/usr/lib/ruby/$(PKG_LIBVER)/kconv.rb
+/usr/lib/ruby/$(PKG_LIBVER)/*/nkf.so
endef
-define Package/ruby-pstore/description
- Provides pstore.rb file
-
+define Package/ruby-openssl/files
+/usr/lib/ruby/$(PKG_LIBVER)/openssl
+/usr/lib/ruby/$(PKG_LIBVER)/openssl.rb
+/usr/lib/ruby/$(PKG_LIBVER)/*/openssl.so
endef
-define Package/ruby-psych
-$(call Package/ruby/Default)
- TITLE+=YAML parser and emitter
- DEPENDS:=ruby +ruby-bigdecimal +ruby-datetime +ruby-misc +ruby-enc +libyaml
+define Package/ruby-optparse/files
+/usr/lib/ruby/$(PKG_LIBVER)/optparse.rb
+/usr/lib/ruby/$(PKG_LIBVER)/optionparser.rb
+/usr/lib/ruby/$(PKG_LIBVER)/optparse
endef
-define Package/ruby-psych/description
- Provides psych* files
-
+define Package/ruby-patterns/files
+/usr/lib/ruby/$(PKG_LIBVER)/observer.rb
+/usr/lib/ruby/$(PKG_LIBVER)/singleton.rb
+/usr/lib/ruby/$(PKG_LIBVER)/forwardable.rb
endef
-define Package/ruby-racc
-$(call Package/ruby/Default)
- TITLE:=LALR parser generator in Ruby
- DEPENDS:=ruby
+define Package/ruby-powerassert/files
+/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/power_assert-*.gemspec
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/power_assert-*
endef
-
-define Package/ruby-racc/description
- Provides racc* files
-
+define Package/ruby-powerassert/files-excluded
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/power_assert-*/test
endef
-define Package/ruby-rake
-$(call Package/ruby/Default)
- TITLE+=Ruby Rake (make replacement)
- DEPENDS:=ruby +ruby-datetime +ruby-filelib +ruby-optparse +ruby-patterns +ruby-rbconfig
+define Package/ruby-prettyprint/files
+/usr/lib/ruby/$(PKG_LIBVER)/pp.rb
+/usr/lib/ruby/$(PKG_LIBVER)/prettyprint.rb
endef
-define Package/ruby-rake/description
- Provides rake* files
-
+define Package/ruby-pstore/files
+/usr/lib/ruby/$(PKG_LIBVER)/pstore.rb
endef
-define Package/ruby-rbconfig
-$(call Package/ruby/Default)
- TITLE+=Ruby RbConfig
- DEPENDS:=ruby
+define Package/ruby-psych/files
+/usr/lib/ruby/$(PKG_LIBVER)/psych
+/usr/lib/ruby/$(PKG_LIBVER)/psych.rb
+/usr/lib/ruby/$(PKG_LIBVER)/*/psych.so
+/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/psych-*.gemspec
endef
-define Package/ruby-rbconfig/description
- Provides rbconfig file
-
+define Package/ruby-racc/files
+/usr/lib/ruby/$(PKG_LIBVER)/racc
+/usr/lib/ruby/$(PKG_LIBVER)/*/racc/*.so
endef
-define Package/ruby-rdoc
-$(call Package/ruby/Default)
- TITLE+= (documentation generator)
- DEPENDS:=ruby +ruby-erb +ruby-irb +ruby-json +ruby-racc +ruby-rake +ruby-yaml +ruby-zlib
+define Package/ruby-rake/files
+/usr/lib/ruby/$(PKG_LIBVER)/rake/
+/usr/lib/ruby/$(PKG_LIBVER)/rake.rb
+/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/rake-*.gemspec
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/rake-*/
endef
-
-define Package/ruby-rdoc/description
- Provides rdoc* and ri files
-
+define Package/ruby-rake/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/rake $(1)/usr/bin/;
+ $(call RubyBuildPackage/install,rake,$(1))
endef
-
-define Package/ruby-readline
-$(call Package/ruby/Default)
- TITLE:=Ruby support for readline
- DEPENDS:=ruby +libncurses +libreadline
+define Package/ruby-rake/files-excluded
+/usr/lib/ruby/$(PKG_LIBVER)/rake/runtest.rb
endef
-define Package/ruby-readline/description
- Provides readline* files
-
+define Package/ruby-rbconfig/files
+/usr/lib/ruby/$(PKG_LIBVER)/*/rbconfig.rb
+/usr/lib/ruby/$(PKG_LIBVER)/rbconfig/*
+/usr/lib/ruby/$(PKG_LIBVER)/*/rbconfig/*.so
endef
-define Package/ruby-rexml
-$(call Package/ruby/Default)
- TITLE:=Ruby XML toolkit
- DEPENDS:=ruby +ruby-patterns +ruby-enc
+define Package/ruby-rdoc/files
+ /usr/lib/ruby/$(PKG_LIBVER)/rdoc.rb
+ /usr/lib/ruby/$(PKG_LIBVER)/rdoc
+ /usr/lib/ruby/gems/$(PKG_LIBVER)/gems/rdoc-*
+ /usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/rdoc-*.gemspec
endef
-
-define Package/ruby-rexml/description
- Provides rexml* files
-
+define Package/ruby-rdoc/files-excluded
+ /usr/lib/ruby/$(PKG_LIBVER)/rdoc/test_case.rb
+ /usr/lib/ruby/$(PKG_LIBVER)/rdoc/markup/formatter_test_case.rb
+ /usr/lib/ruby/$(PKG_LIBVER)/rdoc/markup/text_formatter_test_case.rb
endef
-
-define Package/ruby-rinda
-$(call Package/ruby/Default)
- TITLE:=Ruby Linda paradigm implementation
- DEPENDS:=ruby +ruby-drb
+define Package/ruby-rdoc/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/rdoc $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ri $(1)/usr/bin/
+ $(call RubyBuildPackage/install,rdoc,$(1))
endef
-define Package/ruby-rinda/description
- Provides rinda* files
-
+define Package/ruby-readline/files
+/usr/lib/ruby/$(PKG_LIBVER)/*/readline.so
endef
-define Package/ruby-ripper
-$(call Package/ruby/Default)
- TITLE:=Ruby script parser
- DEPENDS:=ruby
+define Package/ruby-rexml/files
+/usr/lib/ruby/$(PKG_LIBVER)/rexml
endef
-define Package/ruby-ripper/description
- Provides ripper* files
-
+define Package/ruby-rinda/files
+/usr/lib/ruby/$(PKG_LIBVER)/rinda
endef
-define Package/ruby-rss
-$(call Package/ruby/Default)
- TITLE:=Ruby RSS toolkit
- DEPENDS:=ruby +ruby-net +ruby-nkf +ruby-rexml
+define Package/ruby-ripper/files
+/usr/lib/ruby/$(PKG_LIBVER)/ripper.rb
+/usr/lib/ruby/$(PKG_LIBVER)/ripper
+/usr/lib/ruby/$(PKG_LIBVER)/*/ripper.so
endef
-define Package/ruby-rss/description
- Provides rss* files
-
+define Package/ruby-rss/files
+/usr/lib/ruby/$(PKG_LIBVER)/rss
+/usr/lib/ruby/$(PKG_LIBVER)/rss.rb
endef
-define Package/ruby-sdbm
-$(call Package/ruby/Default)
- TITLE:=Ruby simple file-based key-value dbm implementation
- DEPENDS:=ruby
+define Package/ruby-sdbm/files
+/usr/lib/ruby/$(PKG_LIBVER)/*/sdbm.so
endef
-define Package/ruby-sdbm/description
- Provides sdbm* files
-
+define Package/ruby-shell/files
+/usr/lib/ruby/$(PKG_LIBVER)/shell.rb
+/usr/lib/ruby/$(PKG_LIBVER)/shell
endef
-define Package/ruby-shell
-$(call Package/ruby/Default)
- TITLE:=Ruby idiomatic Ruby interface
- DEPENDS:=ruby +ruby-patterns
+define Package/ruby-socket/files
+/usr/lib/ruby/$(PKG_LIBVER)/ipaddr.rb
+/usr/lib/ruby/$(PKG_LIBVER)/resolv-replace.rb
+/usr/lib/ruby/$(PKG_LIBVER)/resolv.rb
+/usr/lib/ruby/$(PKG_LIBVER)/socket.rb
+/usr/lib/ruby/$(PKG_LIBVER)/*/socket.so
endef
-define Package/ruby-shell/description
- Provides shell* files
-
+define Package/ruby-testunit/files
+/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/test-unit-*.gemspec
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/test-unit-*
endef
-
-define Package/ruby-socket
-$(call Package/ruby/Default)
- TITLE+= socket support
- DEPENDS:=ruby +ruby-multithread
+define Package/ruby-testunit/files-excluded
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/test-unit-*/doc
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/test-unit-*/test
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/test-unit-*/sample
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/test-unit-*/*.md
endef
-define Package/ruby-socket/description
- Provides socket-related files:
- - gserver.rb
- - ipaddr.rb
- - resolv-replace.rb
- - resolv.rb
- - socket.rb
- - socket.so
-
+define Package/ruby-unicodenormalize/files
+/usr/lib/ruby/$(PKG_LIBVER)/unicode_normalize.rb
+/usr/lib/ruby/$(PKG_LIBVER)/unicode_normalize
endef
-define Package/ruby-testunit
-$(call Package/ruby/Default)
- TITLE:=Gem test-unit shipped with Ruby
- DEPENDS:=ruby +ruby-csv +ruby-erb +ruby-optparse +ruby-powerassert +ruby-prettyprint +ruby-rexml +ruby-yaml
+define Package/ruby-uri/files
+/usr/lib/ruby/$(PKG_LIBVER)/uri.rb
+/usr/lib/ruby/$(PKG_LIBVER)/uri
endef
-define Package/ruby-testunit/description
- Provides test/unit* files
-
+define Package/ruby-webrick/files
+/usr/lib/ruby/$(PKG_LIBVER)/webrick
+/usr/lib/ruby/$(PKG_LIBVER)/webrick.rb
endef
-define Package/ruby-unicodenormalize
-$(call Package/ruby/Default)
- TITLE:=Ruby String additions for Unicode normalization
- DEPENDS:=ruby +ruby-enc +ruby-enc-extra
+define Package/ruby-xmlrpc/files
+/usr/lib/ruby/$(PKG_LIBVER)/xmlrpc
+/usr/lib/ruby/$(PKG_LIBVER)/xmlrpc.rb
endef
-define Package/ruby-unicodenormalize/description
- Additions to class String for Unicode normalization
-
+define Package/ruby-yaml/files
+/usr/lib/ruby/$(PKG_LIBVER)/yaml
+/usr/lib/ruby/$(PKG_LIBVER)/yaml.rb
endef
-define Package/ruby-uri
-$(call Package/ruby/Default)
- TITLE:=Ruby library to handle URI
- DEPENDS:=ruby +ruby-socket +ruby-enc
+define Package/ruby-zlib/files
+/usr/lib/ruby/$(PKG_LIBVER)/*/zlib.so
endef
-define Package/ruby-uri/description
- Provides uri* files
-
-endef
+RUBY_FILES = $(strip $(call Package/ruby-$(1)/files))
+RUBY_FILES_EXCLUDED = $(strip $(call Package/ruby-$(1)/files-excluded))
-define Package/ruby-webrick
-$(call Package/ruby/Default)
- TITLE:=Ruby Web server toolkit
- DEPENDS:=ruby +ruby-erb +ruby-net +ruby-patterns +ruby-rbconfig
+# 1: short name
+# 2: install dir
+define RubyBuildPackage/install
+ ( \
+ cd $(PKG_INSTALL_DIR) && \
+ $(TAR) -cf - \
+ --files-from <(ls -1d $(patsubst /%,%,$(RUBY_FILES))) \
+ $(if $(RUBY_FILES_EXCLUDED),--exclude-from <(ls -1d $(patsubst /%,%,$(RUBY_FILES_EXCLUDED)))) \
+ ) | ( \
+ [ -n "$(2)" ] && cd $(2) && $(TAR) -xf - \
+ )
endef
-define Package/ruby-webrick/description
- Provides webrick* files
+# 1: short name
+# 2: description
+# 3: dependencies on other packages
+define RubyBuildPackage
+ RUBY_STDLIB += $(1)
-endef
+ # Package definition
+ ifndef Package/ruby-$(1)
+ define Package/ruby-$(1)
+ $(call Package/ruby/Default)
+ TITLE:=Ruby $(2)
+ DEPENDS:=ruby $(3)
+ endef
+ endif
-define Package/ruby-xmlrpc
-$(call Package/ruby/Default)
- TITLE:=Ruby XML-RPC toolkit
- DEPENDS:=ruby +ruby-rexml +ruby-webrick
-endef
+ ifndef Package/ruby-$(1)/description
+ define Package/ruby-$(1)/description
+ This package contains the ruby $(2).
-define Package/ruby-xmlrpc/description
- Provides xmlrpc* files
+ endef
+ endif
-endef
+ # Description
+ ifndef Package/ruby-$(1)/install
+ ifndef Package/ruby-$(1)/files
+ $$(error It must exists either a Package/ruby-$(1)/install or Package/ruby-$(1)/files)
+ endif
-define Package/ruby-yaml
-$(call Package/ruby/Default)
- TITLE:=Ruby YAML toolkit
- DEPENDS:=ruby +ruby-dbm +ruby-pstore +ruby-psych
-endef
+ define Package/ruby-$(1)/description +=
-define Package/ruby-yaml/description
- Provides yaml* files
+Provides:
+$(patsubst /%,
+ - /%,$(RUBY_FILES))
-endef
+ endef
-define Package/ruby-zlib
-$(call Package/ruby/Default)
- TITLE:=Ruby support for zlib
- DEPENDS:=ruby +zlib
-endef
+ ifneq ($(RUBY_FILES_EXCLUDED),)
+ define Package/ruby-$(1)/description +=
-define Package/ruby-zlib/description
- Provides zlib* files
+Except:
+$(patsubst /%,
+ - /%,$(RUBY_FILES_EXCLUDED))
-endef
+ endef
+ endif
-HOST_CONFIGURE_ARGS += \
- --disable-install-doc \
- --disable-install-rdoc \
- --disable-install-capi \
- --with-static-linked-ext \
- --with-out-ext=tk,tk/tkutil,win32,win32ole,dbm,gdbm,readline \
+ Package/ruby-$(1)/install=$(call RubyBuildPackage/install,$(1),$$(1))
+ endif
-# even not used, host build with restricted exts results in gems not being
-# compiling for target (probably some cross compiling problem like checking
-# host for selecting target features)
-# --with-out-ext \
-# --with-ext=thread,stringio \
-
-CONFIGURE_ARGS += \
- --enable-shared \
- --enable-static \
- --disable-rpath \
- $(call autoconf_bool,CONFIG_IPV6,ipv6) \
- --disable-install-doc \
- --disable-install-capi \
- --with-ruby-version=minor \
- --with-iconv-dir=$(ICONV_PREFIX) \
- --with-out-ext=tk,tk/tkutil,win32,win32ole
-
-ifndef CONFIG_RUBY_DIGEST_USE_OPENSSL
-CONFIGURE_ARGS += \
- --with-bundled-sha1\
- --with-bundled-md5\
- --with-bundled-rmd160\
- --with-bundled-sha2 \
-
-endif
-
-TARGET_LDFLAGS += -L$(PKG_BUILD_DIR)
-
-MAKE_FLAGS += \
- DESTDIR="$(PKG_INSTALL_DIR)" \
- SHELL="/bin/bash"
-
-define Package/ruby/install
- $(INSTALL_DIR) $(1)/usr/bin
- $(INSTALL_DIR) $(1)/usr/lib/ruby/$(PKG_LIBVER)
- $(INSTALL_DIR) $(1)/usr/lib/ruby/vendor_ruby/$(PKG_LIBVER)
- $(INSTALL_DIR) $(1)/usr/lib/ruby/site_ruby/$(PKG_LIBVER)
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ruby $(1)/usr/lib/ruby/ruby$(PKG_LIBVER)-bin
- $(INSTALL_BIN) ./files/ruby $(1)/usr/bin/ruby
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/vendor_ruby/$(PKG_LIBVER)/* $(1)/usr/lib/ruby/vendor_ruby/$(PKG_LIBVER)/
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/site_ruby/$(PKG_LIBVER)/* $(1)/usr/lib/ruby/site_ruby/$(PKG_LIBVER)/
- sed -i -e "s%@RUBY_LIBPATH@%/usr/lib/ruby/$(PKG_LIBVER)%" $(1)/usr/bin/ruby
- sed -i -e "s%@RUBY_BINPATH@%/usr/lib/ruby/ruby$(PKG_LIBVER)-bin%" $(1)/usr/bin/ruby
-endef
-
-define Package/libruby/install
- $(INSTALL_DIR) $(1)/usr/lib
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/libruby.so.* $(1)/usr/lib/
-endef
-
-define Package/ruby-stdlib/install
- # nothing to do
-endef
-
-define Package/ruby-bigdecimal/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/*/bigdecimal.so \
- usr/lib/ruby/$(PKG_LIBVER)/bigdecimal/ \
- usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/bigdecimal-*.gemspec \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-cgi/install
- $(INSTALL_DIR) $(1)/usr/lib/ruby/$(PKG_LIBVER)
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/cgi $(1)/usr/lib/ruby/$(PKG_LIBVER)/
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/cgi.rb $(1)/usr/lib/ruby/$(PKG_LIBVER)/
-endef
-
-define Package/ruby-csv/install
- $(INSTALL_DIR) $(1)/usr/lib/ruby/$(PKG_LIBVER)
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/csv.rb $(1)/usr/lib/ruby/$(PKG_LIBVER)/
-endef
-
-define Package/ruby-datetime/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/time.rb \
- usr/lib/ruby/$(PKG_LIBVER)/date.rb \
- usr/lib/ruby/$(PKG_LIBVER)/*/date_core.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-dbm/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/*/dbm.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-debuglib/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/profile.rb \
- usr/lib/ruby/$(PKG_LIBVER)/profiler.rb \
- usr/lib/ruby/$(PKG_LIBVER)/debug.rb \
- usr/lib/ruby/$(PKG_LIBVER)/tracer.rb \
- usr/lib/ruby/$(PKG_LIBVER)/benchmark.rb \
- usr/lib/ruby/$(PKG_LIBVER)/*/objspace.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-digest/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/digest \
- usr/lib/ruby/$(PKG_LIBVER)/digest.rb \
- usr/lib/ruby/$(PKG_LIBVER)/*/digest.so \
- usr/lib/ruby/$(PKG_LIBVER)/*/digest/* \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-drb/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/drb.rb \
- usr/lib/ruby/$(PKG_LIBVER)/drb \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-enc/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/*/enc/encdb.so \
- usr/lib/ruby/$(PKG_LIBVER)/*/enc/iso_8859_1.so \
- usr/lib/ruby/$(PKG_LIBVER)/*/enc/utf_* \
- usr/lib/ruby/$(PKG_LIBVER)/*/enc/euc_jp.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-enc-extra/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) \
- --exclude=usr/lib/ruby/$(PKG_LIBVER)/*/enc/encdb.so \
- --exclude=usr/lib/ruby/$(PKG_LIBVER)/*/enc/iso_8859_1.so \
- --exclude=usr/lib/ruby/$(PKG_LIBVER)/*/enc/utf_* \
- --exclude=usr/lib/ruby/$(PKG_LIBVER)/*/enc/euc_jp.so \
- -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/*/enc \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-erb/install
- $(INSTALL_DIR) $(1)/usr/bin
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/erb $(1)/usr/bin/
- $(INSTALL_DIR) $(1)/usr/lib/ruby/$(PKG_LIBVER)/
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/erb.rb $(1)/usr/lib/ruby/$(PKG_LIBVER)/
-endef
-
-define Package/ruby-fiddle/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/fiddle.rb \
- usr/lib/ruby/$(PKG_LIBVER)/fiddle/ \
- usr/lib/ruby/$(PKG_LIBVER)/*/fiddle.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-filelib/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/tmpdir.rb \
- usr/lib/ruby/$(PKG_LIBVER)/tempfile.rb \
- usr/lib/ruby/$(PKG_LIBVER)/pathname.rb \
- usr/lib/ruby/$(PKG_LIBVER)/*/pathname.so \
- usr/lib/ruby/$(PKG_LIBVER)/find.rb \
- usr/lib/ruby/$(PKG_LIBVER)/fileutils.rb \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-gdbm/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/*/gdbm.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-gems/install
- $(INSTALL_DIR) $(1)/usr/bin
- $(CP) $(PKG_INSTALL_DIR)/usr/bin/gem $(1)/usr/bin/
- $(INSTALL_DIR) $(1)/usr/lib/ruby/$(PKG_LIBVER)
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/ubygems.rb $(1)/usr/lib/ruby/$(PKG_LIBVER)/
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rubygems.rb $(1)/usr/lib/ruby/$(PKG_LIBVER)/
- # Remove tests (avoids extra deps)
- $(RM) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rubygems/test_case.rb
- $(RM) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rubygems/package/tar_test_case.rb
- $(RM) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rubygems/installer_test_case.rb
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rubygems $(1)/usr/lib/ruby/$(PKG_LIBVER)/
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/doc
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/cache
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/extensions
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/build_info
-endef
-
-define Package/ruby-io-console/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/*/io/console.so \
- usr/lib/ruby/$(PKG_LIBVER)/io/console/ \
- usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/io-console-*.gemspec \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-irb/install
- $(INSTALL_DIR) $(1)/usr/bin
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/irb $(1)/usr/bin/
- $(INSTALL_DIR) $(1)/usr/lib/ruby/$(PKG_LIBVER)
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/irb $(1)/usr/lib/ruby/$(PKG_LIBVER)/
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/irb.rb $(1)/usr/lib/ruby/$(PKG_LIBVER)/
-endef
-
-define Package/ruby-json/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/json.rb \
- usr/lib/ruby/$(PKG_LIBVER)/json \
- usr/lib/ruby/$(PKG_LIBVER)/*/json \
- usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/json-*.gemspec \
- ) | ( cd $(1); $(TAR) -xf - )
- rm -rf \
- $(1)/usr/lib/ruby/$(PKG_LIBVER)/psych/json
-endef
-
-define Package/ruby-logger/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/logger.rb \
- usr/lib/ruby/$(PKG_LIBVER)/syslog/logger.rb \
- usr/lib/ruby/$(PKG_LIBVER)/*/syslog.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-math/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/prime.rb \
- usr/lib/ruby/$(PKG_LIBVER)/mathn.rb \
- usr/lib/ruby/$(PKG_LIBVER)/cmath.rb \
- usr/lib/ruby/$(PKG_LIBVER)/*/mathn \
- usr/lib/ruby/$(PKG_LIBVER)/matrix.rb \
- usr/lib/ruby/$(PKG_LIBVER)/matrix \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-minitest/install
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/minitest-*.gemspec $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/
- # Remove tests (avoids extra deps)
- $(RM) -rf $(PKG_INSTALL_DIR)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/minitest-*/test
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/minitest-* $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/
-endef
-
-define Package/ruby-misc/install
- $(INSTALL_DIR) $(1)/usr/lib
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/English.rb \
- usr/lib/ruby/$(PKG_LIBVER)/abbrev.rb \
- usr/lib/ruby/$(PKG_LIBVER)/base64.rb \
- usr/lib/ruby/$(PKG_LIBVER)/delegate.rb \
- usr/lib/ruby/$(PKG_LIBVER)/e2mmap.rb \
- usr/lib/ruby/$(PKG_LIBVER)/expect.rb \
- usr/lib/ruby/$(PKG_LIBVER)/getoptlong.rb \
- usr/lib/ruby/$(PKG_LIBVER)/open3.rb \
- usr/lib/ruby/$(PKG_LIBVER)/ostruct.rb \
- usr/lib/ruby/$(PKG_LIBVER)/scanf.rb \
- usr/lib/ruby/$(PKG_LIBVER)/securerandom.rb \
- usr/lib/ruby/$(PKG_LIBVER)/set.rb \
- usr/lib/ruby/$(PKG_LIBVER)/shellwords.rb \
- usr/lib/ruby/$(PKG_LIBVER)/tsort.rb \
- usr/lib/ruby/$(PKG_LIBVER)/weakref.rb \
- usr/lib/ruby/$(PKG_LIBVER)/*/continuation.so \
- usr/lib/ruby/$(PKG_LIBVER)/*/coverage.so \
- usr/lib/ruby/$(PKG_LIBVER)/*/etc.so \
- usr/lib/ruby/$(PKG_LIBVER)/*/fcntl.so \
- usr/lib/ruby/$(PKG_LIBVER)/*/fiber.so \
- usr/lib/ruby/$(PKG_LIBVER)/*/pty.so \
- usr/lib/ruby/$(PKG_LIBVER)/*/stringio.so \
- usr/lib/ruby/$(PKG_LIBVER)/*/strscan.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-
-
-define Package/ruby-mkmf/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/mkmf.rb \
- usr/lib/ruby/$(PKG_LIBVER)/un.rb \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-multithread/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/monitor.rb \
- usr/lib/ruby/$(PKG_LIBVER)/timeout.rb \
- usr/lib/ruby/$(PKG_LIBVER)/thwait.rb \
- usr/lib/ruby/$(PKG_LIBVER)/mutex_m.rb \
- usr/lib/ruby/$(PKG_LIBVER)/sync.rb \
- usr/lib/ruby/$(PKG_LIBVER)/*/thread.so \
- usr/lib/ruby/$(PKG_LIBVER)/*/io/wait.so \
- usr/lib/ruby/$(PKG_LIBVER)/*/io/nonblock.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-net/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/open-uri.rb \
- usr/lib/ruby/$(PKG_LIBVER)/net/* \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-nkf/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/kconv.rb \
- usr/lib/ruby/$(PKG_LIBVER)/*/nkf.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-openssl/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/openssl \
- usr/lib/ruby/$(PKG_LIBVER)/openssl.rb \
- usr/lib/ruby/$(PKG_LIBVER)/*/openssl.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-optparse/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/optparse.rb \
- usr/lib/ruby/$(PKG_LIBVER)/optionparser.rb \
- usr/lib/ruby/$(PKG_LIBVER)/optparse \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-patterns/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/observer.rb \
- usr/lib/ruby/$(PKG_LIBVER)/singleton.rb \
- usr/lib/ruby/$(PKG_LIBVER)/forwardable.rb \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-powerassert/install
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/power_assert-*.gemspec $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/
- # Remove tests (avoids extra deps)
- $(RM) -rf $(PKG_INSTALL_DIR)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/power_assert-*/test
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/power_assert-* $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/
-endef
-
-define Package/ruby-prettyprint/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/pp.rb \
- usr/lib/ruby/$(PKG_LIBVER)/prettyprint.rb \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-pstore/install
- $(INSTALL_DIR) $(1)/usr/lib/ruby/$(PKG_LIBVER)
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/pstore.rb $(1)/usr/lib/ruby/$(PKG_LIBVER)/
-endef
-
-define Package/ruby-psych/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/psych \
- usr/lib/ruby/$(PKG_LIBVER)/psych.rb \
- usr/lib/ruby/$(PKG_LIBVER)/*/psych.so \
- usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/psych-*.gemspec \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-racc/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/racc \
- usr/lib/ruby/$(PKG_LIBVER)/*/racc/*.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-rake/install
- $(INSTALL_DIR) $(1)/usr/bin
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/rake $(1)/usr/bin/
- $(INSTALL_DIR) $(1)/usr/lib/ruby/$(PKG_LIBVER)
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rake.rb $(1)/usr/lib/ruby/$(PKG_LIBVER)/
- # Remove tests (avoids extra deps)
- $(RM) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rake/runtest.rb
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rake $(1)/usr/lib/ruby/$(PKG_LIBVER)/
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/rake-*.gemspec \
- $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/rake-* $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/
-endef
-
-define Package/ruby-rbconfig/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/*/rbconfig.rb \
- usr/lib/ruby/$(PKG_LIBVER)/rbconfig/* \
- usr/lib/ruby/$(PKG_LIBVER)/*/rbconfig/*.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-rdoc/install
- $(INSTALL_DIR) $(1)/usr/bin
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/rdoc $(1)/usr/bin/
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ri $(1)/usr/bin/
- $(INSTALL_DIR) $(1)/usr/lib/ruby/$(PKG_LIBVER)
- # Remove tests (avoids extra deps)
- $(RM) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rdoc/test_case.rb
- $(RM) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rdoc/markup/formatter_test_case.rb
- $(RM) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rdoc/markup/text_formatter_test_case.rb
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rdoc.rb $(1)/usr/lib/ruby/$(PKG_LIBVER)/
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rdoc $(1)/usr/lib/ruby/$(PKG_LIBVER)/
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/rdoc-*.gemspec \
- $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/rdoc-* \
- $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/
-endef
-
-define Package/ruby-readline/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/*/readline.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-rexml/install
- $(INSTALL_DIR) $(1)/usr/lib/ruby/$(PKG_LIBVER)
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rexml $(1)/usr/lib/ruby/$(PKG_LIBVER)/
-endef
-
-define Package/ruby-rinda/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/rinda \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-ripper/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/ripper.rb \
- usr/lib/ruby/$(PKG_LIBVER)/ripper \
- usr/lib/ruby/$(PKG_LIBVER)/*/ripper.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-rss/install
- $(INSTALL_DIR) $(1)/usr/lib/ruby/$(PKG_LIBVER)
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rss $(1)/usr/lib/ruby/$(PKG_LIBVER)/
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/rss.rb $(1)/usr/lib/ruby/$(PKG_LIBVER)/
-endef
-
-define Package/ruby-sdbm/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/*/sdbm.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-shell/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/shell.rb \
- usr/lib/ruby/$(PKG_LIBVER)/shell \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-socket/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/ipaddr.rb \
- usr/lib/ruby/$(PKG_LIBVER)/resolv-replace.rb \
- usr/lib/ruby/$(PKG_LIBVER)/resolv.rb \
- usr/lib/ruby/$(PKG_LIBVER)/socket.rb \
- usr/lib/ruby/$(PKG_LIBVER)/*/socket.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-testunit/install
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications
- $(INSTALL_DIR) $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/test-unit-*.gemspec $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/
- # Remove tests (avoids extra deps)
- $(RM) -rf $(PKG_INSTALL_DIR)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/test-unit-*/test
- $(RM) -rf $(PKG_INSTALL_DIR)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/test-unit-*/sample
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/test-unit-* $(1)/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/
-endef
-
-define Package/ruby-unicodenormalize/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/unicode_normalize.rb \
- usr/lib/ruby/$(PKG_LIBVER)/unicode_normalize \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-uri/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/uri.rb \
- usr/lib/ruby/$(PKG_LIBVER)/uri \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-webrick/install
- $(INSTALL_DIR) $(1)/usr/lib/ruby/$(PKG_LIBVER)
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/webrick $(1)/usr/lib/ruby/$(PKG_LIBVER)/
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/webrick.rb $(1)/usr/lib/ruby/$(PKG_LIBVER)/
-endef
-
-define Package/ruby-xmlrpc/install
- $(INSTALL_DIR) $(1)/usr/lib/ruby/$(PKG_LIBVER)
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/xmlrpc $(1)/usr/lib/ruby/$(PKG_LIBVER)/
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/ruby/$(PKG_LIBVER)/xmlrpc.rb $(1)/usr/lib/ruby/$(PKG_LIBVER)/
-endef
-
-define Package/ruby-yaml/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/yaml \
- usr/lib/ruby/$(PKG_LIBVER)/yaml.rb \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Package/ruby-zlib/install
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- usr/lib/ruby/$(PKG_LIBVER)/*/zlib.so \
- ) | ( cd $(1); $(TAR) -xf - )
-endef
-
-define Build/InstallDev
- ( cd $(PKG_INSTALL_DIR); $(TAR) -cf - \
- . \
- ) | ( cd $(1); $(TAR) -xf - )
+ $$(eval $$(call BuildPackage,ruby-$(1)))
endef
$(eval $(call BuildPackage,ruby))
$(eval $(call BuildPackage,libruby))
+$(eval $(call RubyBuildPackage,bigdecimal,Arbitrary-precision decimal floating-point library,))
+$(eval $(call RubyBuildPackage,cgi,CGI support toolkit,+ruby-filelib +ruby-pstore))
+$(eval $(call RubyBuildPackage,csv,CSV library,+ruby-patterns +ruby-datetime +ruby-enc))
+$(eval $(call RubyBuildPackage,datetime,date library))
+$(eval $(call RubyBuildPackage,dbm,support for dbm,+libdb47))
+$(eval $(call RubyBuildPackage,debuglib,debug library,+ruby-multithread +ruby-prettyprint))
+$(eval $(call RubyBuildPackage,digest,Digest Library,+RUBY_DIGEST_USE_OPENSSL:libopenssl))
+$(eval $(call RubyBuildPackage,drb,distributed object system,+ruby-filelib +ruby-patterns +ruby-socket))
+$(eval $(call RubyBuildPackage,enc,character re-coding library charset (small subset),))
+$(eval $(call RubyBuildPackage,enc-extra,character re-coding library charset (extra subset),+ruby-enc))
+$(eval $(call RubyBuildPackage,erb,(embedded interpreter),+ruby-cgi))
+$(eval $(call RubyBuildPackage,fiddle,libffi wrapper,+libffi))
+$(eval $(call RubyBuildPackage,filelib,file utils library,+ruby-enc +ruby-misc))
+$(eval $(call RubyBuildPackage,gdbm,support for gdbm,+libgdbm))
+$(eval $(call RubyBuildPackage,gems,gems packet management,+ruby-net +ruby-rdoc))
+$(eval $(call RubyBuildPackage,io-console,Console interface,))
+$(eval $(call RubyBuildPackage,irb,(interactive shell),+ruby-debuglib +ruby-filelib +ruby-math))
+$(eval $(call RubyBuildPackage,json,support for JSON,+ruby-datetime +ruby-misc))
+$(eval $(call RubyBuildPackage,logger,logger and syslog library,+ruby-multithread))
+$(eval $(call RubyBuildPackage,math,math library,+ruby-patterns))
+$(eval $(call RubyBuildPackage,minitest,Gem minitest,+ruby-gems))
+$(eval $(call RubyBuildPackage,misc,standard libraries subset (miscelaneous files),))
+$(eval $(call RubyBuildPackage,mkmf,makefile library,+ruby-filelib +ruby-optparse +ruby-rbconfig))
+$(eval $(call RubyBuildPackage,multithread,multithread library,+ruby-misc))
+$(eval $(call RubyBuildPackage,net,Network Protocols Library,+ruby-datetime +ruby-digest +ruby-filelib +ruby-uri))
+$(eval $(call RubyBuildPackage,nkf,Network Kanji Filter,+ruby-enc))
+$(eval $(call RubyBuildPackage,openssl,support for openssl,+ruby-enc +ruby-misc +libopenssl))
+$(eval $(call RubyBuildPackage,optparse,command-line option analysis,+ruby-misc))
+$(eval $(call RubyBuildPackage,patterns,design patterns implementation,+ruby-multithread))
+$(eval $(call RubyBuildPackage,powerassert,Gem power_assert,+ruby-ripper))
+$(eval $(call RubyBuildPackage,prettyprint,PrettyPrint library,+ruby-misc))
+$(eval $(call RubyBuildPackage,pstore,file based persistence,+ruby-digest +ruby-enc))
+$(eval $(call RubyBuildPackage,psych,YAML parser and emitter,+ruby-bigdecimal +ruby-datetime +ruby-misc +ruby-enc +libyaml))
+$(eval $(call RubyBuildPackage,racc,LALR parser generator,))
+$(eval $(call RubyBuildPackage,rake,Rake (make replacement),+ruby-datetime +ruby-filelib +ruby-optparse +ruby-patterns +ruby-rbconfig))
+$(eval $(call RubyBuildPackage,rbconfig,RbConfig,))
+$(eval $(call RubyBuildPackage,rdoc,documentation generator,+ruby-erb +ruby-irb +ruby-json +ruby-racc +ruby-rake +ruby-yaml +ruby-zlib))
+$(eval $(call RubyBuildPackage,readline,support for readline,+libncurses +libreadline))
+$(eval $(call RubyBuildPackage,rexml,XML toolkit,+ruby-patterns +ruby-enc))
+$(eval $(call RubyBuildPackage,rinda,Linda paradigm implementation,+ruby-drb))
+$(eval $(call RubyBuildPackage,ripper,script parser,))
+$(eval $(call RubyBuildPackage,rss,RSS toolkit,+ruby-net +ruby-nkf +ruby-rexml))
+$(eval $(call RubyBuildPackage,sdbm,simple file-based key-value dbm implementation,))
+$(eval $(call RubyBuildPackage,shell,idiomatic Ruby interface,+ruby-patterns))
+$(eval $(call RubyBuildPackage,socket,socket support,+ruby-multithread))
+$(eval $(call RubyBuildPackage,testunit,Gem test-unit,+ruby-csv +ruby-erb +ruby-optparse +ruby-powerassert +ruby-prettyprint +ruby-rexml +ruby-yaml))
+$(eval $(call RubyBuildPackage,unicodenormalize,String additions for Unicode normalization,+ruby-enc +ruby-enc-extra))
+$(eval $(call RubyBuildPackage,uri,library to handle URI,+ruby-socket +ruby-enc))
+$(eval $(call RubyBuildPackage,webrick,Web server toolkit,+ruby-erb +ruby-net +ruby-patterns +ruby-rbconfig))
+$(eval $(call RubyBuildPackage,xmlrpc,XML-RPC toolkit,+ruby-rexml +ruby-webrick))
+$(eval $(call RubyBuildPackage,yaml,YAML toolkit,+ruby-dbm +ruby-pstore +ruby-psych))
+$(eval $(call RubyBuildPackage,zlib,support for zlib,+zlib))
$(eval $(call BuildPackage,ruby-stdlib))
-$(eval $(call BuildPackage,ruby-bigdecimal))
-$(eval $(call BuildPackage,ruby-cgi))
-$(eval $(call BuildPackage,ruby-csv))
-$(eval $(call BuildPackage,ruby-datetime))
-$(eval $(call BuildPackage,ruby-dbm))
-$(eval $(call BuildPackage,ruby-debuglib))
-$(eval $(call BuildPackage,ruby-digest))
-$(eval $(call BuildPackage,ruby-drb))
-$(eval $(call BuildPackage,ruby-enc))
-$(eval $(call BuildPackage,ruby-enc-extra))
-$(eval $(call BuildPackage,ruby-erb))
-$(eval $(call BuildPackage,ruby-fiddle))
-$(eval $(call BuildPackage,ruby-filelib))
-$(eval $(call BuildPackage,ruby-gdbm))
-$(eval $(call BuildPackage,ruby-gems))
-$(eval $(call BuildPackage,ruby-io-console))
-$(eval $(call BuildPackage,ruby-irb))
-$(eval $(call BuildPackage,ruby-json))
-$(eval $(call BuildPackage,ruby-logger))
-$(eval $(call BuildPackage,ruby-math))
-$(eval $(call BuildPackage,ruby-minitest))
-$(eval $(call BuildPackage,ruby-misc))
-$(eval $(call BuildPackage,ruby-mkmf))
-$(eval $(call BuildPackage,ruby-multithread))
-$(eval $(call BuildPackage,ruby-net))
-$(eval $(call BuildPackage,ruby-nkf))
-$(eval $(call BuildPackage,ruby-openssl))
-$(eval $(call BuildPackage,ruby-optparse))
-$(eval $(call BuildPackage,ruby-patterns))
-$(eval $(call BuildPackage,ruby-powerassert))
-$(eval $(call BuildPackage,ruby-prettyprint))
-$(eval $(call BuildPackage,ruby-pstore))
-$(eval $(call BuildPackage,ruby-psych))
-$(eval $(call BuildPackage,ruby-racc))
-$(eval $(call BuildPackage,ruby-rake))
-$(eval $(call BuildPackage,ruby-rbconfig))
-$(eval $(call BuildPackage,ruby-rdoc))
-$(eval $(call BuildPackage,ruby-readline))
-$(eval $(call BuildPackage,ruby-rexml))
-$(eval $(call BuildPackage,ruby-rinda))
-$(eval $(call BuildPackage,ruby-ripper))
-$(eval $(call BuildPackage,ruby-rss))
-$(eval $(call BuildPackage,ruby-sdbm))
-$(eval $(call BuildPackage,ruby-shell))
-$(eval $(call BuildPackage,ruby-socket))
-$(eval $(call BuildPackage,ruby-testunit))
-$(eval $(call BuildPackage,ruby-unicodenormalize))
-$(eval $(call BuildPackage,ruby-uri))
-$(eval $(call BuildPackage,ruby-webrick))
-$(eval $(call BuildPackage,ruby-xmlrpc))
-$(eval $(call BuildPackage,ruby-yaml))
-$(eval $(call BuildPackage,ruby-zlib))
$(eval $(call HostBuild))
# Must run inside a openwrt with all *ruby* packages installed
#
+RUBY_SIMPLE_VERSION = RUBY_VERSION.split(".")[0..1].join(".")
failed = false
puts "Looking for installed ruby packages..."
packages=`opkg list-installed '*ruby*' | cut -d' ' -f 1`.split("\n")
puts "Looking for packages files..."
-package_files=Hash.new([])
+package_files=Hash.new { |h,k| h[k]=[] }
packages.each do
|pkg|
files=`opkg files "#{pkg}" | sed -e 1d`.split("\n")
require_ignore=%w{drb/invokemethod16 foo rubygems/defaults/operating_system win32console java Win32API
builder/xchar json/pure simplecov win32/sspi rdoc/markdown/literals_1_8 enumerator win32/resolv rbtree
nqxml/streamingparser nqxml/treeparser xmlscan/parser xmlscan/scanner xmltreebuilder xml/parser xmlparser xml/encoding-ja xmlencoding-ja
- iconv uconv win32ole gettext/po_parser gettext/mo libxml}
+ iconv uconv win32ole gettext/po_parser gettext/mo libxml psych.jar jar-dependencies}
builtin_enc=[
Encoding.find("ASCII-8BIT"),
]
puts "Looking for requires in files..."
-files_requires=Hash.new([])
+files_requires=Hash.new { |h,k| h[k]=[] }
packages.each do
|pkg|
package_files[pkg].each do
next
end
- files_requires[file]=files_requires[file] + [require]
+ files_requires[file] += [require]
when /Encoding::/
encs=line.scan(/Encoding::[[:alnum:]_]+/).collect {|enc| eval(enc) }.select {|enc| enc.kind_of? Encoding }
required_encs = (encs - builtin_enc).collect {|enc| "enc/#{enc.name.downcase.gsub("-","_")}" }
required_encs << "enc/encdb" if need_encdb
- files_requires[file] = files_requires[file] + required_encs
+ files_requires[file] += required_encs
end
end
end
end
end; end
-puts "Merging requirements into packages..."
-package_requires = Hash[packages.collect { |pkg| [pkg, package_files[pkg].collect {|file| files_requires[file] }.inject([],:+).uniq] }]
+puts "Grouping package requirements per package"
+package_requires_files = Hash.new{|h,k| h[k] = Hash.new { |h2,k2| h2[k2] = [] } }
+package_files.each do |(pkg,files)|
+ package_requires_files[pkg]
+ files.each do |file|
+ files_requires[file].each do |requires|
+ package_requires_files[pkg][requires] << file
+ end
+ end
+end
-weak_dependency=Hash.new([])
+weak_dependency=Hash.new { |h,k| h[k]=[] }
weak_dependency.merge!({
"ruby-misc"=>["ruby-openssl","ruby-fiddle"], #securerandom.rb
"ruby-debuglib"=>["ruby-readline"], #debug.rb
"ruby-rdoc"=>["ruby-gems","ruby-readline","ruby-webrick", #/usr/bin/rdoc and others
"ruby-io-console"], #rdoc/stats/normal.rb
"ruby-webrick"=>["ruby-openssl"], #webrick/ssl.rb
+"ruby-testunit"=>["ruby-io-console"], #gems/test-unit-3.1.5/lib/test/unit/ui/console/testrunner.rb
})
puts "Preloading gems..."
puts "Looking for package dependencies..."
package_provides = {}
-package_dependencies = Hash.new([])
-package_requires.each do
- |(pkg,requires)|
+package_dependencies = Hash.new { |h,k| h[k]=[] }
+package_requires_files.each do
+ |(pkg,requires_files)|
- requires.each do
- |require|
+ requires_files.each do
+ |(require,files)|
if package_provides.include?(require)
found = package_provides[require]
else
next
end
found = found.first
- package_provides[require]=found
+ package_provides[require] = found
end
if weak_dependency[pkg].include?(found)
- puts "#{pkg}: #{found} provides #{require} (ignored WEAK dep)"
+ puts "#{pkg}: #{found} provides #{require} (weak depedendency ignored)"
else
- puts "#{pkg}: #{found} provides #{require}"
- package_dependencies[pkg]=package_dependencies[pkg] + [found]
+ puts "#{pkg}: #{found} provides #{require} for #{files.collect {|file| file.sub("/usr/lib/ruby/","") }.join(",")}"
+ package_dependencies[pkg] += [found]
end
end
end
puts "Please, fix the missing files or ignore them on require_ignore var"
exit(1)
end
-
-package_dependencies.each do
- |(pkg,deps)|
- package_dependencies[pkg]=deps.uniq.sort - [pkg]
-end
+# Remove self dependency
+package_dependencies = Hash[package_dependencies.collect {|(pkg,deps)| [pkg,package_dependencies[pkg]=deps.uniq.sort - [pkg]]}]
+package_dependencies.default = []
puts "Expanding dependencies..."
begin
changed=false
package_dependencies.each do
|(pkg,deps)|
-
next if deps.empty?
-
deps_new = deps.collect {|dep| [dep] + package_dependencies[dep] }.inject([],:+).uniq.sort
if not deps == deps_new
puts "#{pkg}: #{deps.join(",")}"
end
end if not changed
+puts "Removing redundant dependencies..."
+package_dependencies.each do
+ |(pkg,deps)|
+ package_dependencies[pkg]=deps.uniq - [pkg]
+end
+
puts "Checking for mutual dependencies..."
package_dependencies.each do
|(pkg,deps)|
end
exit(1) if failed
-puts "Removing redundant dependencies..."
-package_dependencies.each do
- |(pkg,deps)|
- package_dependencies[pkg]=deps.uniq - [pkg]
-end
package_dependencies2=package_dependencies.dup
package_dependencies.each do
puts "All dependencies are OK." if ok
-
__END__
-
-puts RUBY_VERSION, RUBY_PLATFORM
-puts 123
-
-puts Object.contants
-
-#RUBY_VER=2.1
-#RUBY_ARCH=i486-linux-gnu
-#RUBYLIB=/usr/lib/ruby/$RUBY_VER/
-#RUBYLIB_A=/usr/lib/ruby/$RUBY_ARCH/$RUBY_VER/
#!/bin/bash
#
+# bash feeds/packages/lang/ruby/ruby_missingfiles staging_dir/target-i386_i486_musl-1.1.11/ bin/x86/packages/packages/*ruby*_2.3.0*
+#
function list_staging_files {
- cd staging_dir/target-*/; find \
+ cd "$1"; find \
\( \( -name "root-x86" -or -name "packages" -or -name "stamp" -or -name "pkginfo" \) -prune \) -or -true \
\( -path "*ruby*" -or -name "erb" -or -name "gem" -or -name "irb" -or -name "rake" -or -name "rdoc" -or -name "ri" -or -name "testrb" \) \
+ -not -path "*/usr/include/*" -not -path "*/usr/lib/pkgconfig/*" -not -path "*/usr/lib/lib*.a" \
+ -not -path "*/usr/lib/ruby/gems/*/cache/*" \
-print | sort
}
function list_ipkg_files {
- for OPKG in bin/*/packages/packages/*ruby*; do
+ for OPKG; do
tar --to-stdout -xzf "$OPKG" ./data.tar.gz | tar tz | sed -e 's%/$%%'
done | sort -u
}
-echo " Staging Packages"
-diff -y <(list_staging_files) <(list_ipkg_files)
+echo " Staging Packages"
+
+: ${1:?First arg is staging_dir}
+: ${2:?Second and following args are ruby ipkg packages}
+STAGING_DIR=$1; shift
+diff -d -y <(list_staging_files "$STAGING_DIR") <(list_ipkg_files "$@")
--- /dev/null
+#
+# Copyright (C) 2006-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=tcl
+PKG_VERSION:=8.6.4
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)$(PKG_VERSION)-src.tar.gz
+PKG_SOURCE_URL:=@SF/$(PKG_NAME)
+PKG_MD5SUM:=d7cbb91f1ded1919370a30edd1534304
+
+PKG_LICENSE:=TCL
+PKG_LICENSE_FILES:=license.terms
+PKG_MAINTAINER:=Joe Mistachkin <joe@mistachkin.com>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)$(PKG_VERSION)
+
+PKG_FIXUP:=autoreconf
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/tcl
+ SUBMENU:=Tcl
+ SECTION:=lang
+ CATEGORY:=Languages
+ DEPENDS:=+libpthread
+ TITLE:=The Tcl language
+ URL:=http://www.tcl.tk/
+endef
+
+define Package/tcl/description
+ Tcl, or Tool Command Language, is a an elegant, versatile, feature-rich,
+ simple-to-learn yet very powerful industrial-strength open-source
+ programming language and development platform. It is renowned for its
+ stability and utility, and its emphasis on providing a cross-platform
+ programming API makes it an ideal choice for an enormous variety of
+ programming jobs.
+endef
+
+CONFIGURE_PATH := unix
+
+CONFIGURE_VARS += \
+ tcl_cv_strtod_unbroken=ok
+
+CONFIGURE_ARGS += \
+ --enable-threads
+
+MAKE_PATH := unix
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)/usr/include
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/
+
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libtcl*.{a,so*} $(1)/usr/lib/
+endef
+
+define Package/tcl/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so $(1)/usr/lib
+
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(CP) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin
+endef
+
+$(eval $(call BuildPackage,tcl))
--- /dev/null
+--- a/unix/Makefile.in
++++ b/unix/Makefile.in
+@@ -817,15 +817,15 @@ install-tzdata: tclsh
+ @echo "Installing time zone data"
+ @@LD_LIBRARY_PATH_VAR@="`pwd`:$${@LD_LIBRARY_PATH_VAR@}"; export @LD_LIBRARY_PATH_VAR@; \
+ TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"; export TCL_LIBRARY; \
+- ./tclsh $(TOOL_DIR)/installData.tcl \
+- $(TOP_DIR)/library/tzdata "$(SCRIPT_INSTALL_DIR)"/tzdata
++ #./tclsh $(TOOL_DIR)/installData.tcl \
++ # $(TOP_DIR)/library/tzdata "$(SCRIPT_INSTALL_DIR)"/tzdata
+
+ install-msgs: tclsh
+ @echo "Installing message catalogs"
+ @@LD_LIBRARY_PATH_VAR@="`pwd`:$${@LD_LIBRARY_PATH_VAR@}"; export @LD_LIBRARY_PATH_VAR@; \
+ TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"; export TCL_LIBRARY; \
+- ./tclsh $(TOOL_DIR)/installData.tcl \
+- $(TOP_DIR)/library/msgs "$(SCRIPT_INSTALL_DIR)"/msgs
++ #./tclsh $(TOOL_DIR)/installData.tcl \
++ # $(TOP_DIR)/library/msgs "$(SCRIPT_INSTALL_DIR)"/msgs
+
+ install-doc: doc
+ @for i in "$(MAN_INSTALL_DIR)" "$(MAN1_INSTALL_DIR)" "$(MAN3_INSTALL_DIR)" "$(MANN_INSTALL_DIR)" ; \
--- /dev/null
+--- a/generic/tclStrToD.c
++++ b/generic/tclStrToD.c
+@@ -73,7 +73,7 @@ typedef unsigned int fpu_control_t __att
+ * MIPS floating-point units need special settings in control registers
+ * to use gradual underflow as we expect.
+ */
+-#if defined(__mips)
++#if defined(__sgi) && defined(_COMPILER_VERSION)
+ #include <sys/fpu.h>
+ #endif
+ /*
+@@ -2166,7 +2166,7 @@ TclInitDoubleConversion(void)
+ } bitwhack;
+ #endif
+
+-#if defined(__mips)
++#if defined(__sgi) && defined(_COMPILER_VERSION)
+ union fpc_csr mipsCR;
+
+ mipsCR.fc_word = get_fpc_csr();
--- /dev/null
+#
+# Copyright (C) 2006-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=zope.interface
+PKG_VERSION:=4.1.3
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://pypi.python.org/packages/source/z/zope.interface
+PKG_MD5SUM:=9ae3d24c0c7415deb249dd1a132f0f79
+
+PKG_BUILD_DEPENDS:=python python-setuptools
+
+PKG_LICENSE:=ZPL-2.1
+PKG_LICENSE_FILES:=LICENSE.txt
+PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
+
+include $(INCLUDE_DIR)/package.mk
+$(call include_mk, python-package.mk)
+
+define Package/zope-interface
+ SECTION:=lang
+ CATEGORY:=Languages
+ SUBMENU:=Python
+ TITLE:=Zope interface
+ URL:=https://github.com/zopefoundation/zope.interface
+ DEPENDS:=+python-light
+endef
+
+define Package/zope-interface/description
+This package provides an implementation of "object interfaces" for
+Python. Interfaces are a mechanism for labeling objects as conforming to
+a given API or contract. So, this package can be considered as
+implementation of the Design By Contract methodology support in Python.
+endef
+
+define PyPackage/zope-interface/filespec
++|$(PYTHON_PKG_DIR)
+-|$(PYTHON_PKG_DIR)/zope/interface/common/tests
+-|$(PYTHON_PKG_DIR)/zope/interface/tests
+endef
+
+define Build/Compile
+ $(call Build/Compile/PyMod,, \
+ install --prefix="/usr" --root="$(PKG_INSTALL_DIR)" --no-compile, \
+ )
+endef
+
+$(eval $(call PyPackage,zope-interface))
+$(eval $(call BuildPackage,zope-interface))
#
-# Copyright (C) 2007-2014 OpenWrt.org
+# Copyright (C) 2007-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=apr-util
PKG_VERSION:=1.5.4
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=https://archive.apache.org/dist/apr/
+PKG_SOURCE_URL:=@APACHE/apr/
PKG_MD5SUM:=2202b18f269ad606d70e1864857ed93c
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
PKG_LICENSE:=Apache License
--with-apr="$(STAGING_DIR)/usr/bin/apr-1-config" \
--with-expat="$(STAGING_DIR)/usr" \
--without-sqlite2 \
- --with-sqlite3="$(STAGING_DIR)/usr" \
- --with-iconv="$(ICONV_PREFIX)" \
+ --with-sqlite3="$(STAGING_DIR)/usr"
+
+ifdef $(CONFIG_BUILD_NLS)
+ CONFIGURE_ARGS += --with-iconv="$(ICONV_PREFIX)"
+else
+ CONFIGURE_ARGS += --without-iconv
+endif
CONFIGURE_VARS += \
ac_cv_file_dbd_apr_dbd_mysql_c=no \
ac_cv_path_ODBC_CONFIG= \
- APR_BUILD_DIR="$(STAGING_DIR)/usr/share/build-1" \
+ APR_BUILD_DIR="$(STAGING_DIR)/usr/share/build-1"
MAKE_FLAGS += \
- APRUTIL_LIBS="-lsqlite3 $(TARGET_LDFLAGS) -lexpat $(if $(ICONV_FULL),-liconv) -lapr-1 -luuid -lm -lcrypt" \
+ APRUTIL_LIBS="-lsqlite3 $(TARGET_LDFLAGS) -lexpat $(if $(ICONV_FULL),-liconv) -lapr-1 -luuid -lm -lcrypt"
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/bin $(1)/usr/include/apr-1/ $(1)/usr/lib $(1)/usr/lib/pkgconfig/
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=http://mirrors.ibiblio.org/apache/apr/
+PKG_SOURCE_URL:=@APACHE/apr/
PKG_MD5SUM:=4e9769f3349fe11fc0a5e1b224c236aa
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
PKG_LICENSE:=Apache License
--- /dev/null
+diff --git a/avahi-common/simple-watch.c b/avahi-common/simple-watch.c
+index 8df18dd..08d8090 100644
+--- a/avahi-common/simple-watch.c
++++ b/avahi-common/simple-watch.c
+@@ -21,7 +21,7 @@
+ #include <config.h>
+ #endif
+
+-#include <sys/poll.h>
++#include <poll.h>
+ #include <assert.h>
+ #include <string.h>
+ #include <errno.h>
+diff --git a/avahi-common/simple-watch.h b/avahi-common/simple-watch.h
+index 72c1905..db87122 100644
+--- a/avahi-common/simple-watch.h
++++ b/avahi-common/simple-watch.h
+@@ -22,7 +22,7 @@
+
+ /** \file simple-watch.h Simple poll() based main loop implementation */
+
+-#include <sys/poll.h>
++#include <poll.h>
+ #include <avahi-common/cdecl.h>
+ #include <avahi-common/watch.h>
+
+diff --git a/avahi-common/thread-watch.c b/avahi-common/thread-watch.c
+index c0cadeb..ecb202b 100644
+--- a/avahi-common/thread-watch.c
++++ b/avahi-common/thread-watch.c
+@@ -21,7 +21,7 @@
+ #include <config.h>
+ #endif
+
+-#include <sys/poll.h>
++#include <poll.h>
+ #include <assert.h>
+ #include <string.h>
+ #include <errno.h>
+diff --git a/avahi-common/thread-watch.h b/avahi-common/thread-watch.h
+index dec0cf3..1b44ccb 100644
+--- a/avahi-common/thread-watch.h
++++ b/avahi-common/thread-watch.h
+@@ -22,7 +22,7 @@
+
+ /** \file thread-watch.h Threaded poll() based main loop implementation */
+
+-#include <sys/poll.h>
++#include <poll.h>
+ #include <avahi-common/cdecl.h>
+ #include <avahi-common/watch.h>
+
+diff --git a/avahi-common/watch.h b/avahi-common/watch.h
+index 86e63d3..eea12ec 100644
+--- a/avahi-common/watch.h
++++ b/avahi-common/watch.h
+@@ -22,7 +22,7 @@
+
+ /** \file watch.h Simplistic main loop abstraction */
+
+-#include <sys/poll.h>
++#include <poll.h>
+ #include <sys/time.h>
+
+ #include <avahi-common/cdecl.h>
include $(INCLUDE_DIR)/target.mk
PKG_NAME:=boost
-PKG_VERSION:=1_59_0
-PKG_RELEASE:=3
+PKG_VERSION:=1_60_0
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/boost
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)_$(PKG_VERSION)
HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/$(PKG_NAME)_$(PKG_VERSION)
-PKG_MD5SUM:=51528a0e3b33d9e10aaa311d9eb451e3
+PKG_MD5SUM:=28f58b9a33469388302110562bdf6188
PKG_LICENSE:=Boost Software License <http://www.boost.org/users/license.html>
PKG_MAINTAINER:=Carlos M. Ferreira <carlosmf.pt@gmail.com>
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/host-build.mk
-# For now, the combination TARGET_mpc85xx&&USE_UCLIBC disables boost due to incompatibility
+
define Package/boost/Default
SECTION:=libs
CATEGORY:=Libraries
TITLE:=Boost C++ source library
URL:=http://www.boost.org
- DEPENDS:=@(!(TARGET_mpc85xx&&USE_UCLIBC)) +libstdcpp +libpthread +librt
+ DEPENDS:=+libstdcpp +libpthread +librt
endef
define Package/boost/description/Default
- Boost provides free peer-reviewed portable C++ source libraries
+ true
+endef
+
+define Package/boost/description
+This package provides the Boost v1.59 libraries.
+Boost is a set of free, peer-reviewed, portable C++ source libraries.
+This package provides the following libraries:
+ - atomic
+ - chrono
+ - container
+ - context
+ - coroutine
+ - - coroutine2 (requires GCC v5 and up)
+ - date_time
+ - exception
+ - filesystem
+ - graph
+ - - graph-parallel
+ - iostreams
+ - locale
+ - log
+ - math
+ - program_options
+ - python
+ - python3
+ - random
+ - regex
+ - serialization
+ - signals
+ - system
+ - thread
+ - timer
+ - wave
endef
BOOST_LIBS =
true
endef
-# For now, the combination TARGET_mpc85xx&&USE_UCLIBC disables boost due to incompatibility
+
define Package/boost
$(call Package/boost/Default)
TITLE+= packages
- DEPENDS:=@(!(TARGET_mpc85xx&&USE_UCLIBC)) +ALL:boost-libs +ALL:boost-test
+ DEPENDS:=+ALL:boost-libs +ALL:boost-test
endef
define Package/boost/config
- menu "Select Boost libraries"
+ menu "Select Boost Options"
depends on PACKAGE_boost
+ comment "Boost compilation options."
+
+ choice
+ prompt "Compile Boost libraries."
+ default boost-static-and-shared-libs
+ help
+ Choose which version to compile.
+ -> Shared:
+ - Only Shared libs will be compiled.
+ -> Static:
+ - Only Static libs will be compiled.
+ -> Both:
+ - Both Static and Shared libs will be compiled.
+
+ config boost-shared-libs
+ bool "Shared"
+
+ config boost-static-libs
+ bool "Static"
+
+ config boost-static-and-shared-libs
+ bool "Both"
+ endchoice
+
+ choice
+ prompt "Selects Boost Runtime linkage."
+ default boost-runtime-shared
+ help
+ Choose which C and C++ runtimes to use:
+ -> Use Shared runtimes.
+ -> Use Static runtimes.
+ - Not available if Shared libs are to be built.
+ -> Use both runtimes.
+ - Not available if Shared libs are to be built.
+ - Two seperate versions of Boost are built, linking each to a different runtime.
+ - This option requires "Use tagged names" option to be active.
+
+ config boost-runtime-shared
+ bool "Shared"
+
+ config boost-runtime-static
+ depends on @(!boost-shared-libs&&!boost-static-and-shared-libs)
+ bool "Static"
+
+ config boost-runtime-static-and-shared
+ depends on @(boost-use-name-tags&&!boost-shared-libs&&!boost-static-and-shared-libs)
+ bool "Both"
+ endchoice
+
+ choice
+ prompt "Select a Variant."
+ default boost-variant-release
+ help
+ Chooses which boost variant should be selected:
+ -> Release: Optimizes Boost for release.
+ - Optimization: Speed; Debug Symbols: Off; Inlining: Full; Runtime Debugging: Off.
+ -> Debug:
+ - Optimization: Off; Debug Symbols: On; Inlining: Off; Runtime Debugging: On.
+ -> Profile:
+ - Profiling: On; Debug Symbols: On.
+
+ config boost-variant-release
+ bool "Release"
+
+ config boost-variant-debug
+ bool "Debug"
+
+ config boost-variant-profile
+ bool "Profile"
+ endchoice
+
+ config boost-use-name-tags
+ bool "Use tagged names."
+ help
+ Add name tags the lib files, to diferentiate each library version:
+ "-mt" for multi-threading.
+ "-d" for debugging.
+ "-s" for runtime static link".
+ Might break compatibility with libraries that expect boost libs with default names.
+ default n
+
+ config boost-single-thread
+ depends on @boost-use-name-tags
+ bool "Single thread Support."
+ help
+ Compile Boost libraries in single-thread mode.
+ default n
+
+ config boost-build-type-complete
+ depends on @boost-use-name-tags
+ bool "Complete Boost Build."
+ help
+ Builds both release and debug libs. It will take much longer to compile.
+ default n
+ endmenu
- config boost-libs-all
- bool "Include all Boost libraries"
- select PACKAGE_boost-libs
-
- config boost-test-pkg
- bool "Boost test package"
- select PACKAGE_boost-test
-
- comment "Libraries"
-
- $(foreach lib,$(BOOST_LIBS), \
- config PACKAGE_boost-$(lib)
- prompt "Boost $(lib) library"
-
- )
-
- endmenu
+ menu "Select Boost libraries"
+ depends on PACKAGE_boost
+ comment "Libraries"
+
+ config boost-libs-all
+ bool "Include all Boost libraries."
+ select PACKAGE_boost-libs
+
+ config boost-test-pkg
+ bool "Boost test package."
+ select PACKAGE_boost-test
+
+ config boost-coroutine2
+ depends on @GCC_VERSION_5
+ bool "Boost couroutine2 support."
+ select PACKAGE_boost-coroutine
+ default n
+
+ config boost-graph-parallel
+ bool "Boost parallel graph support."
+ select PACKAGE_boost-graph
+ default n
+
+ $(foreach lib,$(BOOST_LIBS), \
+ config PACKAGE_boost-$(lib)
+ prompt "Boost $(lib) library."
+ )
+ endmenu
endef
endef
endef
+
$(eval $(call DefineBoostLibrary,atomic,system,))
$(eval $(call DefineBoostLibrary,chrono,system,))
$(eval $(call DefineBoostLibrary,container,,))
#$(eval $(call DefineBoostLibrary,exception,,))
$(eval $(call DefineBoostLibrary,filesystem,system,))
$(eval $(call DefineBoostLibrary,graph,regex,))
-#$(eval $(call DefineBoostLibrary,graph_parallel,,))
-$(eval $(call DefineBoostLibrary,iostreams,,+zlib))
-$(eval $(call DefineBoostLibrary,locale,system,$(ICONV_DEPENDS) +@BUILD_NLS))
+$(eval $(call DefineBoostLibrary,iostreams,,+PACKAGE_boost-iostreams:zlib))
+$(eval $(call DefineBoostLibrary,locale,system,$(ICONV_DEPENDS) @BUILD_NLS))
$(eval $(call DefineBoostLibrary,log,system chrono date_time thread filesystem regex,))
$(eval $(call DefineBoostLibrary,math,,))
-#$(eval $(call DefineBoostLibrary,mpi,,))
+#$(eval $(call DefineBoostLibrary,mpi,,)) # OpenMPI does no exist in OpenWRT at this time.
$(eval $(call DefineBoostLibrary,program_options,,))
-$(eval $(call DefineBoostLibrary,random,system,))
-
-# We need a beter way to provide this package, information regarding the Python packages
-# such as Python version and directories locations.
-# Python 2.7 version is for now hard-coded. Python 3 is (until this date) broken in the trunk tree.
$(eval $(call DefineBoostLibrary,python,,+PACKAGE_boost-python:python))
+$(eval $(call DefineBoostLibrary,python3,,+PACKAGE_boost-python3:python3))
+$(eval $(call DefineBoostLibrary,random,system,))
$(eval $(call DefineBoostLibrary,regex,,))
$(eval $(call DefineBoostLibrary,serialization,,))
$(eval $(call DefineBoostLibrary,signals,,))
$(eval $(call DefineBoostLibrary,timer,chrono))
$(eval $(call DefineBoostLibrary,wave,date_time thread filesystem,))
+
define Host/Compile
- # bjam does not provide a configure-script nor a Makefile
+ # b2 does not provide a configure-script nor a Makefile
( cd $(HOST_BUILD_DIR)/tools/build/src/engine ; ./build.sh gcc )
endef
CONFIGURE_PREFIX:=$(PKG_INSTALL_DIR)
TARGET_LDFLAGS += -pthread -lrt
-TARGET_CFLAGS += $(if $(CONFIG_SOFT_FLOAT),-DBOOST_NO_FENV_H)
+TARGET_CFLAGS += \
+ $(if $(CONFIG_PACKAGE_boost-python), -I$(STAGING_DIR)/usr/include/python2.7/) \
+ $(if $(CONFIG_PACKAGE_boost-python3), -I$(STAGING_DIR)/usr/include/python3.5/) \
+ $(if $(CONFIG_SOFT_FLOAT),-DBOOST_NO_FENV_H) -fPIC
ifneq ($(findstring mips,$(ARCH)),)
BOOST_ABI = o32
BOOST_ABI = sysv
endif
+comma := ,
define Build/Compile
$(info Selected Boost API $(BOOST_ABI) for architecture $(ARCH) and cpu $(CPU_TYPE) $(CPU_SUBTYPE))
( cd $(PKG_BUILD_DIR) ; \
echo "using gcc : $(ARCH) : $(GNU_TARGET_NAME)-gcc : <compileflags>\"$(TARGET_CFLAGS)\" <cxxflags>\"$(TARGET_CXXFLAGS)\" <linkflags>\"$(TARGET_LDFLAGS)\" ;" > tools/build/src/user-config.jam ; \
+ $(if $(CONFIG_PACKAGE_boost-python3), \
+ echo "using python : 3.5 : $(STAGING_DIR_ROOT)/usr/bin/python3 : $(STAGING_DIR)/usr/include/python3.5/ ;" >> \
+ tools/build/src/user-config.jam; \
+ ) \
$(if $(CONFIG_PACKAGE_boost-python), \
- echo "using python : : $(STAGING_DIR_ROOT)/usr/bin/python : $(STAGING_DIR)/usr/include/python2.7/ ;" >> \
+ echo "using python : 2.7 : $(STAGING_DIR_ROOT)/usr/bin/python : $(STAGING_DIR)/usr/include/python2.7/ ;" >> \
tools/build/src/user-config.jam; \
) \
- bjam \
- '-sBUILD=release <optimization>space <inlining>on <debug-symbols>off' \
+ b2 \
+ $(CONFIGURE_ARGS) \
--ignore-site-config \
- --toolset=gcc-$(ARCH) --build-type=minimal --layout=system abi=$(BOOST_ABI) \
+ --toolset=gcc-$(ARCH) abi=$(BOOST_ABI) \
--disable-long-double \
- $(CONFIGURE_ARGS) \
+ $(if $(CONFIG_boost-variant-release), variant=release,) \
+ $(if $(CONFIG_boost-variant-debug), variant=debug,) \
+ $(if $(CONFIG_boost-variant-profile), variant=profile,) \
+ $(if $(CONFIG_boost-use-name-tags),--layout=tagged,--layout=system) \
+ $(if $(CONFIG_boost-build-type-complete),--build-type=complete,--build-type=minimal) \
+ $(if $(CONFIG_boost-shared-libs),link=shared,) \
+ $(if $(CONFIG_boost-static-libs),link=static,) \
+ $(if $(CONFIG_boost-static-and-shared-libs),link=static$(comma)shared,) \
+ $(if $(CONFIG_boost-runtime-shared),runtime-link=shared,) \
+ $(if $(CONFIG_boost-runtime-static),runtime-link=static,) \
+ $(if $(CONFIG_boost-runtime-static-and-shared),runtime-link=shared$(comma)static,) \
+ $(if $(CONFIG_boost-single-thread),threading=single,) \
+ threading=multi \
--without-mpi \
+ $(if $(CONFIG_boost-coroutine2),,--without-coroutine2) \
+ $(if $(CONFIG_boost-graph-parallel),,--without-graph_parallel) \
$(if $(CONFIG_PACKAGE_boost-test),,--without-test) \
$(foreach lib,$(BOOST_LIBS), \
- $(if $(CONFIG_PACKAGE_boost-$(lib)),,--without-$(lib)) \
+ $(if $(findstring python,$(lib)), \
+ $(if $(or $(CONFIG_PACKAGE_boost-python),$(CONFIG_PACKAGE_boost-python3)),,--without-python), \
+ $(if $(CONFIG_PACKAGE_boost-$(lib)),,--without-$(lib))) \
) \
- $(if $(CONFIG_PACKAGE_boost-locale),boost.locale.iconv=on -sICONV_PATH=$(ICONV_PREFIX) boost.locale.posix=$(if $(USE_UCLIBC),on,off), \
+ $(if $(CONFIG_PACKAGE_boost-locale),boost.locale.iconv=on -sICONV_PATH=$(ICONV_PREFIX) boost.locale.posix=$(if $(USE_MUSL),on,off), \
boost.locale.iconv=off) \
\
$(if $(CONFIG_PACKAGE_boost-iostreams),-sNO_BZIP2=1 -sZLIB_INCLUDE=$(STAGING_DIR)/usr/include \
# copies _all_ header files - independent of <--with-library>-argument above
$(INSTALL_DIR) $(1)/usr/lib
- -$(CP) $(PKG_INSTALL_DIR)/lib/*.a $(1)/usr/lib/
- -$(CP) $(PKG_INSTALL_DIR)/lib/*.so* $(1)/usr/lib/
+ $(CP) -v $(PKG_INSTALL_DIR)/lib/*.a $(1)/usr/lib/ # copies all compiled archive files
+ $(FIND) $(PKG_INSTALL_DIR)/lib/ -name '*.so*' -exec $(CP) {} $(1)/usr/lib/ \; # copies all the shared objects files
endef
define Host/Install
$(INSTALL_DIR) \
- $(STAGING_DIR_HOST)/bin
+ $(STAGING_DIR)/host/bin
$(CP) \
- $(HOST_BUILD_DIR)/tools/build/src/engine/bin.*/bjam \
- $(STAGING_DIR_HOST)/bin/
+ $(HOST_BUILD_DIR)/tools/build/src/engine/bin.*/b2 \
+ $(STAGING_DIR)/host/bin/
endef
define Package/boost/Default/install
$(INSTALL_DIR) \
$(1)/usr/lib
- $(CP) \
- $(PKG_INSTALL_DIR)/lib/libboost_$(2)*.so* \
- $(1)/usr/lib/
+ $(FIND) \
+ $(PKG_INSTALL_DIR)/lib/ -name 'libboost_$(2)*.so*' -exec $(CP) {} $(1)/usr/lib/ \;
endef
-define Package/boost-test/install
- $(INSTALL_DIR) \
- $(1)/usr/lib
+define Package/boost-test/install
+ $(INSTALL_DIR) \
+ $(1)/usr/lib
- $(CP) \
- $(PKG_INSTALL_DIR)/lib/libboost_unit_test_framework*.so* \
- $(1)/usr/lib/
-
- $(CP) \
- $(PKG_INSTALL_DIR)/lib/libboost_prg_exec_monitor*.so* \
- $(1)/usr/lib/
+ $(FIND) \
+ $(PKG_INSTALL_DIR)/lib/ -name 'libboost_unit_test_framework*.so*' -exec $(CP) {} $(1)/usr/lib/ \;
+
+ $(FIND) \
+ $(PKG_INSTALL_DIR)/lib/ -name 'libboost_prg_exec_monitor*.so*' -exec $(CP) {} $(1)/usr/lib/ \;
endef
define BuildBoostLibrary
$(foreach lib,$(BOOST_LIBS),$(eval $(call BuildBoostLibrary,$(lib))))
$(eval $(call BuildPackage,boost-test))
-
$(eval $(call BuildPackage,boost-libs))
$(eval $(call BuildPackage,boost))
endef
define Package/file
-$(call package/file/Default)
+$(call Package/file/Default)
SECTION:=utils
CATEGORY:=Utilities
TITLE+= utility
endef
define Package/libmagic
-$(call package/file/Default)
+$(call Package/file/Default)
SECTION:=libs
CATEGORY:=Libraries
TITLE+= library
PKG_REMOVE_FILES:=Makefile compat/Makefile doc/Makefile export/Makefile src/Makefile tests/Makefile
PKG_BUILD_PARALLEL:=0
+PKG_BUILD_DEPENDS:=gettext-full/host
+
include $(INCLUDE_DIR)/package.mk
define Package/libgdbm
PKG_BUILD_PARALLEL:=1
HOST_BUILD_PARALLEL:=1
PKG_BUILD_DEPENDS:=glib2/host libpthread zlib libintl libffi
-HOST_BUILD_DEPENDS:=libintl/host libiconv/host libffi/host
+HOST_BUILD_DEPENDS:=gettext-full/host libiconv/host libffi/host
PKG_INSTALL:=1
PKG_USE_MIPS16:=0
endef
HOST_CONFIGURE_ARGS += \
- --disable-selinux
+ --disable-selinux \
+ --with-libiconv=gnu
CONFIGURE_ARGS += \
--enable-shared \
--enable-debug=no \
--disable-selinux \
--disable-fam \
- $(if $(ICONV_FULL),--with-libiconv=gnu)
+ --with-libiconv=gnu
CONFIGURE_VARS += \
glib_cv_stack_grows=no \
glib_cv_uscore=no \
- ac_cv_path_GLIB_GENMARSHAL=$(STAGING_DIR_HOST)/bin/glib-genmarshal \
+ ac_cv_path_GLIB_GENMARSHAL=$(STAGING_DIR)/host/bin/glib-genmarshal \
ac_cv_func_mmap_fixed_mapped=yes \
ac_cv_func_posix_getpwuid_r=yes \
ac_cv_func_posix_getgrgid_r=yes
include $(TOPDIR)/rules.mk
PKG_NAME:=glpk
-PKG_VERSION:=4.55
+PKG_VERSION:=4.57
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@GNU/$(PKG_NAME)
-PKG_MD5SUM:=c632a7a631b8aed02e28eafcd99477f
+PKG_MD5SUM:=237531a54f73155842f8defe51aedb0f
PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=gnutls
-PKG_VERSION:=3.4.6
+PKG_VERSION:=3.4.9
PKG_RELEASE:=1
PKG_USE_MIPS16:=0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=ftp://ftp.gnutls.org/gcrypt/gnutls/v3.4
-PKG_MD5SUM:=4f2c4b4483da65de7edfeb050911fafb
+PKG_MD5SUM:=1b3b6d55d0e2b6d01a54f53129f1da9b
#PKG_FIXUP:=autoreconf gettext-version
PKG_MAINTAINER:=Nikos Mavrogiannopoulos <nmav@gnutls.org>
PKG_LICENSE:=LGPLv2.1+
PKG_NAME:=ibrcommon
PKG_VERSION:=1.0.1
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.ibr.cs.tu-bs.de/projects/ibr-dtn/releases
--- /dev/null
+diff --git a/ibrcommon/data/File.cpp b/ibrcommon/data/File.cpp
+index 31af4ae..9b49890 100644
+--- a/ibrcommon/data/File.cpp
++++ b/ibrcommon/data/File.cpp
+@@ -35,9 +35,7 @@
+ #include <cerrno>
+ #include <fstream>
+
+-#if !defined(HAVE_FEATURES_H) || defined(ANDROID)
+ #include <libgen.h>
+-#endif
+
+ #ifdef __WIN32__
+ #include <io.h>
+@@ -226,7 +224,7 @@ namespace ibrcommon
+ std::string File::getBasename() const
+ {
+ #if !defined(ANDROID) && defined(HAVE_FEATURES_H)
+- return std::string(basename(_path.c_str()));
++ return std::string(basename((char *)_path.c_str()));
+ #else
+ char path[_path.length()+1];
+ ::memcpy(&path, _path.c_str(), _path.length()+1);
--- /dev/null
+#
+# Copyright (C) 2006-2010 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=icu4c
+PKG_VERSION:=55.1
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-55_1-src.tgz
+PKG_SOURCE_URL:=http://download.icu-project.org/files/icu4c/55.1
+PKG_MD5SUM:=e2d523df79d6cb7855c2fbe284f4db29
+
+PKG_LICENSE:=ICU-1.8.1+
+PKG_LICENSE_FILES:=license.html
+
+PKG_MAINTAINER:=Mirko Vogt <mirko@openwrt.org>
+
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
+
+PKG_BUILD_DEPENDS:=icu/host
+
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+
+TAR_OPTIONS+= icu/source --strip-components 2
+TAR_CMD=$(HOST_TAR) -C $(1) $(TAR_OPTIONS)
+
+define Package/icu
+ SECTION:=libs
+ CATEGORY:=Libraries
+ TITLE:=International Components for Unicode
+ URL:=http://icu-project.org
+ DEPENDS:=+libstdcpp +libpthread
+endef
+
+define Build/Configure
+ $(call Build/Configure/Default, \
+ --disable-debug \
+ --enable-release \
+ --enable-shared \
+ --enable-static \
+ --enable-draft \
+ --enable-renaming \
+ --disable-tracing \
+ --disable-extras \
+ --enable-dyload \
+ --enable-layout \
+ --enable-layoutex \
+ --disable-tools \
+ --disable-tests \
+ --disable-samples \
+ --with-cross-build="$(HOST_BUILD_DIR)" \
+ )
+endef
+
+define Build/InstallDev
+ $(INSTALL_DIR) \
+ $(1)/usr/include
+
+ $(CP) \
+ $(PKG_INSTALL_DIR)/usr/include/* \
+ $(1)/usr/include/
+
+ $(INSTALL_DIR) \
+ $(1)/usr/lib
+
+ $(CP) \
+ $(PKG_INSTALL_DIR)/usr/lib/* \
+ $(1)/usr/lib/
+endef
+
+define Host/install
+endef
+
+define Package/icu/install
+ $(INSTALL_DIR) \
+ $(1)/usr/lib
+
+ $(CP) \
+ $(PKG_INSTALL_DIR)/usr/lib/*.so.* \
+ $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,icu))
+$(eval $(call HostBuild))
--- /dev/null
+diff --git a/Makefile.in b/Makefile.in
+index 9db6c52..6aa2273 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -180,7 +180,6 @@ install-icu: $(INSTALLED_BUILT_FILES)
+ $(INSTALL_SCRIPT) $(top_srcdir)/install-sh $(DESTDIR)$(pkgdatadir)/install-sh
+ @$(MKINSTALLDIRS) $(DESTDIR)$(libdir)/pkgconfig
+ $(INSTALL_DATA) $(ALL_PKGCONFIG_FILES) $(DESTDIR)$(libdir)/pkgconfig/
+- $(INSTALL_DATA) $(top_srcdir)/../license.html $(DESTDIR)$(pkgdatadir)/license.html
+ $(INSTALL_SCRIPT) $(top_builddir)/config/icu-config $(DESTDIR)$(bindir)/icu-config
+ $(INSTALL_DATA) $(top_builddir)/config/Makefile.inc $(DESTDIR)$(pkglibdir)/Makefile.inc
+ $(INSTALL_DATA) $(top_builddir)/config/pkgdata.inc $(DESTDIR)$(pkglibdir)/pkgdata.inc
PKG_NAME:=libev
PKG_VERSION:=4.20
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://dist.schmorp.de/libev/Attic/
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include
- $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/event.h $(1)/usr/include/ev_event_compat.h
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/ev.h $(1)/usr/include/
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/ev++.h $(1)/usr/include/
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libev.{a,so*} $(1)/usr/lib/
endef
include $(TOPDIR)/rules.mk
PKG_NAME:=libevdev
-PKG_VERSION:=1.4.4
+PKG_VERSION:=1.4.6
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://www.freedesktop.org/software/libevdev/
-PKG_MD5SUM:=b66443bb664cfaf2ba7b3f8c238ea951
+PKG_MD5SUM:=9b3f25bd8fb0f8efa4944d34668dddc0
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=COPYING
$(INSTALL_DIR) $(1)/usr/include
$(CP) \
- $(PKG_INSTALL_DIR)/usr/lib/libffi-$(PKG_VERSION)/include/*.h \
+ $(PKG_INSTALL_DIR)/usr/include/*.h \
$(1)/usr/include/
endef
--- /dev/null
+--- a/libffi.pc.in
++++ b/libffi.pc.in
+@@ -1,10 +1,10 @@
+ prefix=@prefix@
+ exec_prefix=@exec_prefix@
+ libdir=@libdir@
+-includedir=${libdir}/@PACKAGE_NAME@-@PACKAGE_VERSION@/include
++includedir=@includedir@
+
+ Name: @PACKAGE_NAME@
+ Description: Library supporting Foreign Function Interfaces
+ Version: @PACKAGE_VERSION@
+-Libs: -L${libdir} -lffi
+-Cflags: -I${includedir}
++Libs: -lffi
++Cflags:
+--- a/include/Makefile.am
++++ b/include/Makefile.am
+@@ -5,5 +5,5 @@ AUTOMAKE_OPTIONS=foreign
+ DISTCLEANFILES=ffitarget.h
+ EXTRA_DIST=ffi.h.in ffi_common.h
+
+-includesdir = $(libdir)/@PACKAGE_NAME@-@PACKAGE_VERSION@/include
++includesdir = $(includedir)
+ nodist_includes_HEADERS = ffi.h ffitarget.h
+--- a/include/Makefile.in
++++ b/include/Makefile.in
+@@ -250,7 +250,7 @@ top_srcdir = @top_srcdir@
+ AUTOMAKE_OPTIONS = foreign
+ DISTCLEANFILES = ffitarget.h
+ EXTRA_DIST = ffi.h.in ffi_common.h
+-includesdir = $(libdir)/@PACKAGE_NAME@-@PACKAGE_VERSION@/include
++includesdir = $(includedir)
+ nodist_includes_HEADERS = ffi.h ffitarget.h
+ all: all-am
+
--- /dev/null
+--- a/src/mips/o32.S
++++ b/src/mips/o32.S
+@@ -82,13 +82,16 @@ sixteen:
+
+ ADDU $sp, 4 * FFI_SIZEOF_ARG # adjust $sp to new args
+
++#ifndef __mips_soft_float
+ bnez t0, pass_d # make it quick for int
++#endif
+ REG_L a0, 0*FFI_SIZEOF_ARG($sp) # just go ahead and load the
+ REG_L a1, 1*FFI_SIZEOF_ARG($sp) # four regs.
+ REG_L a2, 2*FFI_SIZEOF_ARG($sp)
+ REG_L a3, 3*FFI_SIZEOF_ARG($sp)
+ b call_it
+
++#ifndef __mips_soft_float
+ pass_d:
+ bne t0, FFI_ARGS_D, pass_f
+ l.d $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args
+@@ -130,6 +133,7 @@ pass_f_d:
+ # bne t0, FFI_ARGS_F_D, call_it
+ l.s $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args
+ l.d $f14, 2*FFI_SIZEOF_ARG($sp) # passing double and float
++#endif
+
+ call_it:
+ # Load the function pointer
+@@ -158,14 +162,23 @@ retfloat:
+ bne t2, FFI_TYPE_FLOAT, retdouble
+ jalr t9
+ REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
++#ifndef __mips_soft_float
+ s.s $f0, 0(t0)
++#else
++ REG_S v0, 0(t0)
++#endif
+ b epilogue
+
+ retdouble:
+ bne t2, FFI_TYPE_DOUBLE, noretval
+ jalr t9
+ REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
++#ifndef __mips_soft_float
+ s.d $f0, 0(t0)
++#else
++ REG_S v1, 4(t0)
++ REG_S v0, 0(t0)
++#endif
+ b epilogue
+
+ noretval:
+@@ -261,9 +274,11 @@ $LCFI7:
+ li $13, 1 # FFI_O32
+ bne $16, $13, 1f # Skip fp save if FFI_O32_SOFT_FLOAT
+
++#ifndef __mips_soft_float
+ # Store all possible float/double registers.
+ s.d $f12, FA_0_0_OFF2($fp)
+ s.d $f14, FA_1_0_OFF2($fp)
++#endif
+ 1:
+ # Call ffi_closure_mips_inner_O32 to do the work.
+ la t9, ffi_closure_mips_inner_O32
+@@ -281,6 +296,7 @@ $LCFI7:
+ li $13, 1 # FFI_O32
+ bne $16, $13, 1f # Skip fp restore if FFI_O32_SOFT_FLOAT
+
++#ifndef __mips_soft_float
+ li $9, FFI_TYPE_FLOAT
+ l.s $f0, V0_OFF2($fp)
+ beq $8, $9, closure_done
+@@ -288,6 +304,7 @@ $LCFI7:
+ li $9, FFI_TYPE_DOUBLE
+ l.d $f0, V0_OFF2($fp)
+ beq $8, $9, closure_done
++#endif
+ 1:
+ REG_L $3, V1_OFF2($fp)
+ REG_L $2, V0_OFF2($fp)
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=https://download.gnome.org/sources/libgee/0.18/
+PKG_SOURCE_URL:=@GNOME/libgee/0.18/
PKG_MD5SUM:=29ea6125e653d7e60b49a9a9544abc96
PKG_FIXUP:=autoreconf
$(INSTALL_DATA) \
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/*.pc \
$(1)/usr/lib/pkgconfig/
+ $(INSTALL_DIR) $(STAGING_DIR)/host/share/vala-0.30/vapi/
+ $(INSTALL_DATA) \
+ $(PKG_INSTALL_DIR)/usr/share/vala/vapi/* \
+ $(STAGING_DIR)/host/share/vala-0.30/vapi
endef
define Package/libgee/install
--- /dev/null
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Mon, 16 Mar 2015 17:40:12 +0000 (-0400)
+Subject: Avoid breakage with gcc 5
+X-Git-Tag: libgpg-error-1.19~7
+X-Git-Url: http://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgpg-error.git;a=commitdiff_plain;h=c01c8f0c4f55d76b037c7f6aa44ad25ede18d38a
+
+Avoid breakage with gcc 5
+
+* src/Makefile.am: Add -P to the C preprocessor when building
+mkerrcodes.h, to avoid a noisy intermediate pipeline.
+
+--
+
+With gcc 5 without this patch, we see many errors like the following:
+
+gcc -I. -I. -o mkerrcodes ./mkerrcodes.c
+In file included from ./mkerrcodes.c:26:0:
+./mkerrcodes.h:9:5: error: expected expression before ‘,’ token
+ { , "GPG_ERR_E2BIG" },
+ ^
+./mkerrcodes.h:10:5: error: expected expression before ‘,’ token
+ { , "GPG_ERR_EACCES" },
+ ^
+
+This patch cleans up the generated mkerrcodes.h by making the
+intermediate stage clean for all the versions of gcc i tested (4.x and
+5).
+
+Debian-Bug-Id: 777374
+Signed-Off-By: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+---
+
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -140,7 +140,7 @@ code-to-errno.h: Makefile mkerrnos.awk e
+ # It is correct to use $(CPP). We want the host's idea of the error codes.
+ mkerrcodes.h: Makefile mkerrcodes.awk $(gpg_extra_headers)
+ $(AWK) -f $(srcdir)/mkerrcodes1.awk $(srcdir)/errnos.in >_$@
+- $(CPP) $(CPPFLAGS) $(extra_cppflags) _$@ | grep GPG_ERR_ | \
++ $(CPP) $(CPPFLAGS) $(extra_cppflags) -P _$@ | grep GPG_ERR_ | \
+ $(AWK) -f $(srcdir)/mkerrcodes.awk >$@
+ -rm _$@
+
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -979,7 +979,7 @@ code-to-errno.h: Makefile mkerrnos.awk e
+ # It is correct to use $(CPP). We want the host's idea of the error codes.
+ mkerrcodes.h: Makefile mkerrcodes.awk $(gpg_extra_headers)
+ $(AWK) -f $(srcdir)/mkerrcodes1.awk $(srcdir)/errnos.in >_$@
+- $(CPP) $(CPPFLAGS) $(extra_cppflags) _$@ | grep GPG_ERR_ | \
++ $(CPP) $(CPPFLAGS) $(extra_cppflags) -P _$@ | grep GPG_ERR_ | \
+ $(AWK) -f $(srcdir)/mkerrcodes.awk >$@
+ -rm _$@
+
include $(TOPDIR)/rules.mk
PKG_NAME:=libinput
-PKG_VERSION:=1.0.1
+PKG_VERSION:=1.1.7
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://www.freedesktop.org/software/libinput/
-PKG_MD5SUM:=f390e592aa09f77dabceabeb2ddd4419
+PKG_MD5SUM:=a501715a6135ac1f772bb5f3e3183481
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=COPYING
CATEGORY:=Libraries
TITLE:=a library to handle input devices
URL:=http://freedesktop.org/wiki/Software/libinput/
- DEPENDS:=+libevdev +mtdev +udev
+ DEPENDS:=+libevdev +mtdev +eudev
endef
define Package/libinput/description
endef
define Package/libinput/install
- $(INSTALL_DIR) $(1)/usr/lib/udev
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib/
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/udev/* $(1)/usr/lib/udev
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/{udev,*.so*} $(1)/usr/lib
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(CP) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin
endef
$(eval $(call BuildPackage,libinput))
include $(TOPDIR)/rules.mk
PKG_NAME:=libmicrohttpd
-PKG_VERSION:=0.9.42
-PKG_RELEASE:=3
+PKG_VERSION:=0.9.44
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@GNU/libmicrohttpd
-PKG_MD5SUM:=3b9cf0b67fc8ebc9e69f53c6bc84a88d
+PKG_MD5SUM:=9101b5ebf8f71792938ae672da314da2
PKG_MAINTAINER:=Martijn Zilverschoon <martijn@friedzombie.com>
+++ /dev/null
---- a/ChangeLog
-+++ b/ChangeLog
-@@ -1,3 +1,14 @@
-+Thu Jun 4 13:37:05 CEST 2015
-+ Fixing memory leak in digest authentication. -AW
-+
-+Wed Jun 03 21:23:47 CEST 2015
-+ Add deprecation compiler messages for deprecated functions
-+ and macros. -EG
-+
-+Fri May 29 12:23:01 CEST 2015
-+ Fixing digest authentication when used in combination
-+ with escaped characters in URLs. -CG/AW
-+
- Wed May 13 11:49:09 CEST 2015
- Releasing libmicrohttpd 0.9.42. -CG
-
---- a/src/microhttpd/response.c
-+++ b/src/microhttpd/response.c
-@@ -24,6 +24,8 @@
- * @author Christian Grothoff
- */
-
-+#define MHD_NO_DEPRECATION 1
-+
- #include "internal.h"
- #include "response.h"
-
---- a/src/microhttpd/digestauth.c
-+++ b/src/microhttpd/digestauth.c
-@@ -1,6 +1,6 @@
- /*
- This file is part of libmicrohttpd
-- Copyright (C) 2010, 2011, 2012 Daniel Pittman and Christian Grothoff
-+ Copyright (C) 2010, 2011, 2012, 2015 Daniel Pittman and Christian Grothoff
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
-@@ -472,8 +472,8 @@ test_header (struct MHD_Connection *conn
- *
- * @param connection connections with headers to compare against
- * @param args argument URI string (after "?" in URI)
-- * @return MHD_YES if the arguments match,
-- * MHD_NO if not
-+ * @return #MHD_YES if the arguments match,
-+ * #MHD_NO if not
- */
- static int
- check_argument_match (struct MHD_Connection *connection,
-@@ -508,7 +508,10 @@ check_argument_match (struct MHD_Connect
- connection,
- argp);
- if (MHD_YES != test_header (connection, argp, NULL))
-- return MHD_NO;
-+ {
-+ free(argb);
-+ return MHD_NO;
-+ }
- num_headers++;
- break;
- }
-@@ -527,10 +530,16 @@ check_argument_match (struct MHD_Connect
- connection,
- equals);
- if (! test_header (connection, argp, equals))
-- return MHD_NO;
-+ {
-+ free(argb);
-+ return MHD_NO;
-+ }
-+
- num_headers++;
- argp = amper;
- }
-+
-+ free(argb);
-
- /* also check that the number of headers matches */
- for (pos = connection->headers_received; NULL != pos; pos = pos->next)
-@@ -632,10 +641,83 @@ MHD_digest_auth_check (struct MHD_Connec
- header value. */
- return MHD_NO;
- }
-+ /* 8 = 4 hexadecimal numbers for the timestamp */
-+ nonce_time = strtoul (nonce + len - 8, (char **)NULL, 16);
-+ t = (uint32_t) MHD_monotonic_time();
-+ /*
-+ * First level vetting for the nonce validity: if the timestamp
-+ * attached to the nonce exceeds `nonce_timeout', then the nonce is
-+ * invalid.
-+ */
-+ if ( (t > nonce_time + nonce_timeout) ||
-+ (nonce_time + nonce_timeout < nonce_time) )
-+ {
-+ /* too old */
-+ return MHD_INVALID_NONCE;
-+ }
-+
-+ calculate_nonce (nonce_time,
-+ connection->method,
-+ connection->daemon->digest_auth_random,
-+ connection->daemon->digest_auth_rand_size,
-+ connection->url,
-+ realm,
-+ noncehashexp);
-+ /*
-+ * Second level vetting for the nonce validity
-+ * if the timestamp attached to the nonce is valid
-+ * and possibly fabricated (in case of an attack)
-+ * the attacker must also know the random seed to be
-+ * able to generate a "sane" nonce, which if he does
-+ * not, the nonce fabrication process going to be
-+ * very hard to achieve.
-+ */
-+
-+ if (0 != strcmp (nonce, noncehashexp))
-+ {
-+ return MHD_INVALID_NONCE;
-+ }
-+ if ( (0 == lookup_sub_value (cnonce,
-+ sizeof (cnonce),
-+ header, "cnonce")) ||
-+ (0 == lookup_sub_value (qop, sizeof (qop), header, "qop")) ||
-+ ( (0 != strcmp (qop, "auth")) &&
-+ (0 != strcmp (qop, "")) ) ||
-+ (0 == lookup_sub_value (nc, sizeof (nc), header, "nc")) ||
-+ (0 == lookup_sub_value (response, sizeof (response), header, "response")) )
-+ {
-+#if HAVE_MESSAGES
-+ MHD_DLOG (connection->daemon,
-+ "Authentication failed, invalid format.\n");
-+#endif
-+ return MHD_NO;
-+ }
-+ nci = strtoul (nc, &end, 16);
-+ if ( ('\0' != *end) ||
-+ ( (LONG_MAX == nci) &&
-+ (ERANGE == errno) ) )
-+ {
-+#if HAVE_MESSAGES
-+ MHD_DLOG (connection->daemon,
-+ "Authentication failed, invalid format.\n");
-+#endif
-+ return MHD_NO; /* invalid nonce format */
-+ }
-+ /*
-+ * Checking if that combination of nonce and nc is sound
-+ * and not a replay attack attempt. Also adds the nonce
-+ * to the nonce-nc map if it does not exist there.
-+ */
-+
-+ if (MHD_YES != check_nonce_nc (connection, nonce, nci))
-+ {
-+ return MHD_NO;
-+ }
-+
- {
- char *uri;
--
-- uri = malloc(left + 1);
-+
-+ uri = malloc (left + 1);
- if (NULL == uri)
- {
- #if HAVE_MESSAGES
-@@ -648,24 +730,31 @@ MHD_digest_auth_check (struct MHD_Connec
- left + 1,
- header, "uri"))
- {
-- free(uri);
-+ free (uri);
- return MHD_NO;
- }
-
-- /* 8 = 4 hexadecimal numbers for the timestamp */
-- nonce_time = strtoul (nonce + len - 8, (char **)NULL, 16);
-- t = (uint32_t) MHD_monotonic_time();
-- /*
-- * First level vetting for the nonce validity: if the timestamp
-- * attached to the nonce exceeds `nonce_timeout', then the nonce is
-- * invalid.
-- */
-- if ( (t > nonce_time + nonce_timeout) ||
-- (nonce_time + nonce_timeout < nonce_time) )
-- {
-- free(uri);
-- return MHD_INVALID_NONCE;
-- }
-+ digest_calc_ha1("md5",
-+ username,
-+ realm,
-+ password,
-+ nonce,
-+ cnonce,
-+ ha1);
-+ digest_calc_response (ha1,
-+ nonce,
-+ nc,
-+ cnonce,
-+ qop,
-+ connection->method,
-+ uri,
-+ hentity,
-+ respexp);
-+
-+ /* Need to unescape URI before comparing with connection->url */
-+ connection->daemon->unescape_callback (connection->daemon->unescape_callback_cls,
-+ connection,
-+ uri);
- if (0 != strncmp (uri,
- connection->url,
- strlen (connection->url)))
-@@ -674,9 +763,10 @@ MHD_digest_auth_check (struct MHD_Connec
- MHD_DLOG (connection->daemon,
- "Authentication failed, URI does not match.\n");
- #endif
-- free(uri);
-+ free (uri);
- return MHD_NO;
- }
-+
- {
- const char *args = strchr (uri, '?');
-
-@@ -692,89 +782,11 @@ MHD_digest_auth_check (struct MHD_Connec
- MHD_DLOG (connection->daemon,
- "Authentication failed, arguments do not match.\n");
- #endif
-- free(uri);
-+ free (uri);
- return MHD_NO;
- }
- }
-- calculate_nonce (nonce_time,
-- connection->method,
-- connection->daemon->digest_auth_random,
-- connection->daemon->digest_auth_rand_size,
-- connection->url,
-- realm,
-- noncehashexp);
-- /*
-- * Second level vetting for the nonce validity
-- * if the timestamp attached to the nonce is valid
-- * and possibly fabricated (in case of an attack)
-- * the attacker must also know the random seed to be
-- * able to generate a "sane" nonce, which if he does
-- * not, the nonce fabrication process going to be
-- * very hard to achieve.
-- */
--
-- if (0 != strcmp (nonce, noncehashexp))
-- {
-- free(uri);
-- return MHD_INVALID_NONCE;
-- }
-- if ( (0 == lookup_sub_value (cnonce,
-- sizeof (cnonce),
-- header, "cnonce")) ||
-- (0 == lookup_sub_value (qop, sizeof (qop), header, "qop")) ||
-- ( (0 != strcmp (qop, "auth")) &&
-- (0 != strcmp (qop, "")) ) ||
-- (0 == lookup_sub_value (nc, sizeof (nc), header, "nc")) ||
-- (0 == lookup_sub_value (response, sizeof (response), header, "response")) )
-- {
--#if HAVE_MESSAGES
-- MHD_DLOG (connection->daemon,
-- "Authentication failed, invalid format.\n");
--#endif
-- free(uri);
-- return MHD_NO;
-- }
-- nci = strtoul (nc, &end, 16);
-- if ( ('\0' != *end) ||
-- ( (LONG_MAX == nci) &&
-- (ERANGE == errno) ) )
-- {
--#if HAVE_MESSAGES
-- MHD_DLOG (connection->daemon,
-- "Authentication failed, invalid format.\n");
--#endif
-- free(uri);
-- return MHD_NO; /* invalid nonce format */
-- }
-- /*
-- * Checking if that combination of nonce and nc is sound
-- * and not a replay attack attempt. Also adds the nonce
-- * to the nonce-nc map if it does not exist there.
-- */
--
-- if (MHD_YES != check_nonce_nc (connection, nonce, nci))
-- {
-- free(uri);
-- return MHD_NO;
-- }
--
-- digest_calc_ha1("md5",
-- username,
-- realm,
-- password,
-- nonce,
-- cnonce,
-- ha1);
-- digest_calc_response (ha1,
-- nonce,
-- nc,
-- cnonce,
-- qop,
-- connection->method,
-- uri,
-- hentity,
-- respexp);
-- free(uri);
-+ free (uri);
- return (0 == strcmp(response, respexp))
- ? MHD_YES
- : MHD_NO;
-@@ -835,7 +847,7 @@ MHD_queue_auth_fail_response (struct MHD
- : "");
- {
- char *header;
--
-+
- header = malloc(hlen + 1);
- if (NULL == header)
- {
---- a/src/microhttpd/daemon.c
-+++ b/src/microhttpd/daemon.c
-@@ -73,7 +73,7 @@
- /**
- * Default connection limit.
- */
--#ifndef WINDOWS
-+#ifndef MHD_WINSOCK_SOCKETS
- #define MHD_MAX_CONNECTIONS_DEFAULT FD_SETSIZE - 4
- #else
- #define MHD_MAX_CONNECTIONS_DEFAULT FD_SETSIZE
-@@ -1271,7 +1271,7 @@ internal_add_connection (struct MHD_Daem
- return MHD_NO;
- }
-
--#ifndef WINDOWS
-+#ifndef MHD_WINSOCK_SOCKETS
- if ( (client_socket >= FD_SETSIZE) &&
- (0 == (daemon->options & (MHD_USE_POLL | MHD_USE_EPOLL_LINUX_ONLY))) )
- {
-@@ -1418,7 +1418,7 @@ internal_add_connection (struct MHD_Daem
- #endif
- {
- /* make socket non-blocking */
--#if !defined(WINDOWS) || defined(CYGWIN)
-+#if !defined(MHD_WINSOCK_SOCKETS)
- int flags = fcntl (connection->socket_fd, F_GETFL);
- if ( (-1 == flags) ||
- (0 != fcntl (connection->socket_fd, F_SETFL, flags | O_NONBLOCK)) )
-@@ -1797,7 +1797,7 @@ static void
- make_nonblocking_noninheritable (struct MHD_Daemon *daemon,
- MHD_socket sock)
- {
--#ifdef WINDOWS
-+#ifdef MHD_WINSOCK_SOCKETS
- DWORD dwFlags;
- unsigned long flags = 1;
-
-@@ -3611,7 +3611,7 @@ MHD_start_daemon_va (unsigned int flags,
- daemon->socket_fd = MHD_INVALID_SOCKET;
- daemon->listening_address_reuse = 0;
- daemon->options = flags;
--#if WINDOWS
-+#if defined(MHD_WINSOCK_SOCKETS) || defined(CYGWIN)
- /* Winsock is broken with respect to 'shutdown';
- this disables us calling 'shutdown' on W32. */
- daemon->options |= MHD_USE_EPOLL_TURBO;
-@@ -3650,7 +3650,7 @@ MHD_start_daemon_va (unsigned int flags,
- free (daemon);
- return NULL;
- }
--#ifndef WINDOWS
-+#ifndef MHD_WINSOCK_SOCKETS
- if ( (0 == (flags & (MHD_USE_POLL | MHD_USE_EPOLL_LINUX_ONLY))) &&
- (1 == use_pipe) &&
- (daemon->wpipe[0] >= FD_SETSIZE) )
-@@ -3934,7 +3934,7 @@ MHD_start_daemon_va (unsigned int flags,
- (http://msdn.microsoft.com/en-us/library/ms738574%28v=VS.85%29.aspx);
- and may also be missing on older POSIX systems; good luck if you have any of those,
- your IPv6 socket may then also bind against IPv4 anyway... */
--#ifndef WINDOWS
-+#ifndef MHD_WINSOCK_SOCKETS
- const int
- #else
- const char
-@@ -4016,7 +4016,7 @@ MHD_start_daemon_va (unsigned int flags,
- {
- socket_fd = daemon->socket_fd;
- }
--#ifndef WINDOWS
-+#ifndef MHD_WINSOCK_SOCKETS
- if ( (socket_fd >= FD_SETSIZE) &&
- (0 == (flags & (MHD_USE_POLL | MHD_USE_EPOLL_LINUX_ONLY)) ) )
- {
-@@ -4121,7 +4121,7 @@ MHD_start_daemon_va (unsigned int flags,
- if ( (daemon->worker_pool_size > 0) &&
- (0 == (daemon->options & MHD_USE_NO_LISTEN_SOCKET)) )
- {
--#if !defined(WINDOWS) || defined(CYGWIN)
-+#if !defined(MHD_WINSOCK_SOCKETS)
- int sk_flags;
- #else
- unsigned long sk_flags;
-@@ -4140,7 +4140,7 @@ MHD_start_daemon_va (unsigned int flags,
- /* Accept must be non-blocking. Multiple children may wake up
- * to handle a new connection, but only one will win the race.
- * The others must immediately return. */
--#if !defined(WINDOWS) || defined(CYGWIN)
-+#if !defined(MHD_WINSOCK_SOCKETS)
- sk_flags = fcntl (socket_fd, F_GETFL);
- if (sk_flags < 0)
- goto thread_failed;
-@@ -4150,7 +4150,7 @@ MHD_start_daemon_va (unsigned int flags,
- sk_flags = 1;
- if (SOCKET_ERROR == ioctlsocket (socket_fd, FIONBIO, &sk_flags))
- goto thread_failed;
--#endif /* WINDOWS && !CYGWIN */
-+#endif /* MHD_WINSOCK_SOCKETS */
-
- /* Allocate memory for pooled objects */
- daemon->worker_pool = malloc (sizeof (struct MHD_Daemon)
-@@ -4182,7 +4182,7 @@ MHD_start_daemon_va (unsigned int flags,
- #endif
- goto thread_failed;
- }
--#ifndef WINDOWS
-+#ifndef MHD_WINSOCK_SOCKETS
- if ( (0 == (flags & (MHD_USE_POLL | MHD_USE_EPOLL_LINUX_ONLY))) &&
- (MHD_USE_SUSPEND_RESUME == (flags & MHD_USE_SUSPEND_RESUME)) &&
- (d->wpipe[0] >= FD_SETSIZE) )
-@@ -4343,7 +4343,7 @@ close_all_connections (struct MHD_Daemon
- {
- shutdown (pos->socket_fd,
- (pos->read_closed == MHD_YES) ? SHUT_WR : SHUT_RDWR);
--#if WINDOWS
-+#if MHD_WINSOCK_SOCKETS
- if ( (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) &&
- (MHD_INVALID_PIPE_ != daemon->wpipe[1]) &&
- (1 != MHD_pipe_write_ (daemon->wpipe[1], "e", 1)) )
---- a/src/include/microhttpd.h
-+++ b/src/include/microhttpd.h
-@@ -130,7 +130,7 @@ typedef intptr_t ssize_t;
- * Current version of the library.
- * 0x01093001 = 1.9.30-1.
- */
--#define MHD_VERSION 0x00094200
-+#define MHD_VERSION 0x00094202
-
- /**
- * MHD-internal return code for "YES".
-@@ -194,6 +194,53 @@ typedef SOCKET MHD_socket;
- #endif /* MHD_SOCKET_DEFINED */
-
- /**
-+ * Define MHD_NO_DEPRECATION before including "microhttpd.h" to disable deprecation messages
-+ */
-+#ifdef MHD_NO_DEPRECATION
-+#define _MHD_DEPR_MACRO(msg)
-+#define _MHD_DEPR_FUNC(msg)
-+#endif /* MHD_NO_DEPRECATION */
-+
-+#ifndef _MHD_DEPR_MACRO
-+#if defined(_MSC_FULL_VER) && _MSC_VER+0 >= 1500
-+/* Stringify macros */
-+#define _MHD_INSTRMACRO(a) #a
-+#define _MHD_STRMACRO(a) _MHD_INSTRMACRO(a)
-+#define _MHD_DEPR_MACRO(msg) __pragma(message(__FILE__ "(" _MHD_STRMACRO(__LINE__)"): warning: " msg))
-+#elif defined(__clang__) || defined (__GNUC_PATCHLEVEL__)
-+#define _MHD_GCC_PRAG(x) _Pragma (#x)
-+#if __clang_major__+0 >= 5 || \
-+ (!defined(__apple_build_version__) && (__clang_major__+0 > 3 || (__clang_major__+0 == 3 && __clang_minor__ >= 3))) || \
-+ __GNUC__+0 > 4 || (__GNUC__+0 == 4 && __GNUC_MINOR__+0 >= 8)
-+#define _MHD_DEPR_MACRO(msg) _MHD_GCC_PRAG(GCC warning msg)
-+#else /* older clang or GCC */
-+#define _MHD_DEPR_MACRO(msg) _MHD_GCC_PRAG(message msg)
-+#endif
-+/* #elif defined(SOMEMACRO) */ /* add compiler-specific macros here if required */
-+#else /* other compilers */
-+#define _MHD_DEPR_MACRO(msg)
-+#endif
-+#endif /* _MHD_DEPR_MACRO */
-+
-+#ifndef _MHD_DEPR_FUNC
-+#if defined(_MSC_FULL_VER) && _MSC_VER+0 >= 1400
-+#define _MHD_DEPR_FUNC(msg) __declspec(deprecated(msg))
-+#elif defined(_MSC_FULL_VER) && _MSC_VER+0 >= 1310
-+/* VS .NET 2003 deprecation do not support custom messages */
-+#define _MHD_DEPR_FUNC(msg) __declspec(deprecated)
-+#elif defined (__clang__) && \
-+ (__clang_major__+0 >= 4 || (!defined(__apple_build_version__) && __clang_major__+0 >= 3))
-+#define _MHD_DEPR_FUNC(msg) __attribute__((deprecated(msg)))
-+#elif defined (__clang__) || __GNUC__+0 > 3 || (__GNUC__+0 == 3 && __GNUC_MINOR__+0 >= 1)
-+/* GCC-style deprecation do not support custom messages */
-+#define _MHD_DEPR_FUNC(msg) __attribute__((__deprecated__))
-+/* #elif defined(SOMEMACRO) */ /* add compiler-specific macros here if required */
-+#else /* other compilers */
-+#define _MHD_DEPR_FUNC(msg)
-+#endif
-+#endif /* _MHD_DEPR_FUNC */
-+
-+/**
- * Not all architectures and `printf()`'s support the `long long` type.
- * This gives the ability to replace `long long` with just a `long`,
- * standard `int` or a `short`.
-@@ -204,6 +251,8 @@ typedef SOCKET MHD_socket;
- */
- #define MHD_LONG_LONG long long
- #define MHD_UNSIGNED_LONG_LONG unsigned long long
-+#else /* MHD_LONG_LONG */
-+_MHD_DEPR_MACRO("Macro MHD_LONG_LONG is deprecated, use MHD_UNSIGNED_LONG_LONG")
- #endif
- /**
- * Format string for printing a variable of type #MHD_LONG_LONG.
-@@ -215,6 +264,8 @@ typedef SOCKET MHD_socket;
- */
- #define MHD_LONG_LONG_PRINTF "ll"
- #define MHD_UNSIGNED_LONG_LONG_PRINTF "%llu"
-+#else /* MHD_LONG_LONG_PRINTF */
-+_MHD_DEPR_MACRO("Macro MHD_LONG_LONG_PRINTF is deprecated, use MHD_UNSIGNED_LONG_LONG_PRINTF")
- #endif
-
-
-@@ -253,7 +304,8 @@ typedef SOCKET MHD_socket;
- #define MHD_HTTP_METHOD_NOT_ALLOWED 405
- #define MHD_HTTP_NOT_ACCEPTABLE 406
- /** @deprecated */
--#define MHD_HTTP_METHOD_NOT_ACCEPTABLE 406
-+#define MHD_HTTP_METHOD_NOT_ACCEPTABLE \
-+ _MHD_DEPR_MACRO("Value MHD_HTTP_METHOD_NOT_ACCEPTABLE is deprecated, use MHD_HTTP_NOT_ACCEPTABLE") 406
- #define MHD_HTTP_PROXY_AUTHENTICATION_REQUIRED 407
- #define MHD_HTTP_REQUEST_TIMEOUT 408
- #define MHD_HTTP_CONFLICT 409
-@@ -1953,6 +2005,7 @@ MHD_create_response_from_callback (uint6
- * @deprecated use #MHD_create_response_from_buffer instead
- * @ingroup response
- */
-+_MHD_DEPR_FUNC("MHD_create_response_from_data() is deprecated, use MHD_create_response_from_buffer()") \
- _MHD_EXTERN struct MHD_Response *
- MHD_create_response_from_data (size_t size,
- void *data,
-@@ -2023,6 +2076,8 @@ MHD_create_response_from_buffer (size_t
- * @return NULL on error (i.e. invalid arguments, out of memory)
- * @ingroup response
- */
-+/* NOTE: this should be 'uint64_t' instead of 'size_t', but changing
-+ this would break API compatibility. */
- _MHD_EXTERN struct MHD_Response *
- MHD_create_response_from_fd (size_t size,
- int fd);
-@@ -2044,6 +2099,8 @@ MHD_create_response_from_fd (size_t size
- * @return NULL on error (i.e. invalid arguments, out of memory)
- * @ingroup response
- */
-+/* NOTE: this should be 'uint64_t' instead of 'size_t', but changing
-+ this would break API compatibility. */
- _MHD_EXTERN struct MHD_Response *
- MHD_create_response_from_fd_at_offset (size_t size,
- int fd,
---- a/src/include/platform_interface.h
-+++ b/src/include/platform_interface.h
-@@ -82,14 +82,14 @@
-
-
- /* MHD_socket_close_(fd) close any FDs (non-W32) / close only socket FDs (W32) */
--#if !defined(_WIN32) || defined(__CYGWIN__)
-+#if !defined(MHD_WINSOCK_SOCKETS)
- #define MHD_socket_close_(fd) close((fd))
- #else
- #define MHD_socket_close_(fd) closesocket((fd))
- #endif
-
- /* MHD_socket_errno_ is errno of last function (non-W32) / errno of last socket function (W32) */
--#if !defined(_WIN32) || defined(__CYGWIN__)
-+#if !defined(MHD_WINSOCK_SOCKETS)
- #define MHD_socket_errno_ errno
- #else
- #define MHD_socket_errno_ MHD_W32_errno_from_winsock_()
-@@ -97,21 +97,21 @@
-
- /* MHD_socket_last_strerr_ is description string of last errno (non-W32) /
- * description string of last socket error (W32) */
--#if !defined(_WIN32) || defined(__CYGWIN__)
-+#if !defined(MHD_WINSOCK_SOCKETS)
- #define MHD_socket_last_strerr_() strerror(errno)
- #else
- #define MHD_socket_last_strerr_() MHD_W32_strerror_last_winsock_()
- #endif
-
- /* MHD_strerror_ is strerror (both non-W32/W32) */
--#if !defined(_WIN32) || defined(__CYGWIN__)
-+#if !defined(MHD_WINSOCK_SOCKETS)
- #define MHD_strerror_(errnum) strerror((errnum))
- #else
- #define MHD_strerror_(errnum) MHD_W32_strerror_((errnum))
- #endif
-
- /* MHD_set_socket_errno_ set errno to errnum (non-W32) / set socket last error to errnum (W32) */
--#if !defined(_WIN32) || defined(__CYGWIN__)
-+#if !defined(MHD_WINSOCK_SOCKETS)
- #define MHD_set_socket_errno_(errnum) errno=(errnum)
- #else
- #define MHD_set_socket_errno_(errnum) MHD_W32_set_last_winsock_error_((errnum))
---- a/src/testcurl/test_digestauth.c
-+++ b/src/testcurl/test_digestauth.c
-@@ -73,7 +73,8 @@ ahc_echo (void *cls,
- const char *url,
- const char *method,
- const char *version,
-- const char *upload_data, size_t *upload_data_size,
-+ const char *upload_data,
-+ size_t *upload_data_size,
- void **unused)
- {
- struct MHD_Response *response;
-@@ -82,44 +83,47 @@ ahc_echo (void *cls,
- const char *realm = "test@example.com";
- int ret;
-
-- username = MHD_digest_auth_get_username(connection);
-+ username = MHD_digest_auth_get_username (connection);
- if ( (username == NULL) ||
- (0 != strcmp (username, "testuser")) )
- {
-- response = MHD_create_response_from_buffer(strlen (DENIED),
-- DENIED,
-- MHD_RESPMEM_PERSISTENT);
-+ response = MHD_create_response_from_buffer (strlen (DENIED),
-+ DENIED,
-+ MHD_RESPMEM_PERSISTENT);
- ret = MHD_queue_auth_fail_response(connection, realm,
- MY_OPAQUE,
- response,
-- MHD_NO);
-- MHD_destroy_response(response);
-+ MHD_NO);
-+ MHD_destroy_response(response);
- return ret;
- }
- ret = MHD_digest_auth_check(connection, realm,
-- username,
-- password,
-+ username,
-+ password,
- 300);
- free(username);
- if ( (ret == MHD_INVALID_NONCE) ||
- (ret == MHD_NO) )
- {
-- response = MHD_create_response_from_buffer(strlen (DENIED),
-+ response = MHD_create_response_from_buffer(strlen (DENIED),
- DENIED,
-- MHD_RESPMEM_PERSISTENT);
-- if (NULL == response)
-+ MHD_RESPMEM_PERSISTENT);
-+ if (NULL == response)
- return MHD_NO;
- ret = MHD_queue_auth_fail_response(connection, realm,
- MY_OPAQUE,
- response,
-- (ret == MHD_INVALID_NONCE) ? MHD_YES : MHD_NO);
-- MHD_destroy_response(response);
-+ (ret == MHD_INVALID_NONCE) ? MHD_YES : MHD_NO);
-+ MHD_destroy_response(response);
- return ret;
- }
-- response = MHD_create_response_from_buffer(strlen(PAGE), PAGE,
-- MHD_RESPMEM_PERSISTENT);
-- ret = MHD_queue_response(connection, MHD_HTTP_OK, response);
-- MHD_destroy_response(response);
-+ response = MHD_create_response_from_buffer (strlen(PAGE),
-+ PAGE,
-+ MHD_RESPMEM_PERSISTENT);
-+ ret = MHD_queue_response (connection,
-+ MHD_HTTP_OK,
-+ response);
-+ MHD_destroy_response (response);
- return ret;
- }
-
-@@ -144,24 +148,24 @@ testDigestAuth ()
- fd = open("/dev/urandom", O_RDONLY);
- if (-1 == fd)
- {
-- fprintf(stderr, "Failed to open `%s': %s\n",
-- "/dev/urandom",
-- strerror(errno));
-- return 1;
-- }
-+ fprintf(stderr, "Failed to open `%s': %s\n",
-+ "/dev/urandom",
-+ strerror(errno));
-+ return 1;
-+ }
- while (off < 8)
-- {
-- len = read(fd, rnd, 8);
-- if (len == -1)
-- {
-- fprintf(stderr, "Failed to read `%s': %s\n",
-- "/dev/urandom",
-- strerror(errno));
-- (void) close(fd);
-- return 1;
-- }
-- off += len;
-- }
-+ {
-+ len = read(fd, rnd, 8);
-+ if (len == -1)
-+ {
-+ fprintf(stderr, "Failed to read `%s': %s\n",
-+ "/dev/urandom",
-+ strerror(errno));
-+ (void) close(fd);
-+ return 1;
-+ }
-+ off += len;
-+ }
- (void) close(fd);
- #else
- {
-@@ -193,7 +197,7 @@ testDigestAuth ()
- if (d == NULL)
- return 1;
- c = curl_easy_init ();
-- curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1337/");
-+ curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1337/bar%20 foo?a=bü%20");
- curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer);
- curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
- curl_easy_setopt (c, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
-@@ -225,7 +229,6 @@ testDigestAuth ()
- }
-
-
--
- int
- main (int argc, char *const *argv)
- {
---- a/src/testcurl/https/test_https_time_out.c
-+++ b/src/testcurl/https/test_https_time_out.c
-@@ -64,7 +64,7 @@ test_tls_session_time_out (gnutls_sessio
-
- gnutls_transport_set_ptr (session, (gnutls_transport_ptr_t) (intptr_t) sd);
-
-- ret = connect (sd, &sa, sizeof (struct sockaddr_in));
-+ ret = connect (sd, (struct sockaddr *) &sa, sizeof (struct sockaddr_in));
-
- if (ret < 0)
- {
CMAKE_OPTIONS=-DBUILDARCH=$(CONFIG_ARCH) \
-DENABLEEXAMPLES=0 \
- -DNODE_EXECUTABLE=$(STAGING_DIR_HOST)/bin/node \
- -DSWIG_DIR=$(STAGING_DIR_HOST)/bin
+ -DNODE_EXECUTABLE=$(STAGING_DIR)/host/bin/node \
+ -DSWIG_DIR=$(STAGING_DIR)/host/bin
TARGET_CFLAGS+=-I$(STAGING_DIR)/usr/include/node
#
-# Copyright (C) 2006-2014 OpenWrt.org
+# Copyright (C) 2006-2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=libpng
-PKG_VERSION:=1.2.52
+PKG_VERSION:=1.2.56
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@SF/libpng
-PKG_MD5SUM:=49d5c71929bf69a172147c47b9309fbe
+PKG_MD5SUM:=868562bd1c58b76ed8703f135a2e439a
PKG_MAINTAINER:=Jo-Philipp Wich <jow@openwrt.org>
PKG_LICENSE:=Libpng GPL-2.0+ BSD-3-Clause
include $(TOPDIR)/rules.mk
PKG_NAME:=libradcli
-PKG_VERSION:=1.2.3
+PKG_VERSION:=1.2.5
PKG_RELEASE:=1
PKG_SOURCE:=radcli-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://github.com/radcli/radcli/releases/download/radcli_1_2_3/
-PKG_MD5SUM:=e283db7db2248cd6499aff69813cb1ed
+PKG_SOURCE_URL:=https://github.com/radcli/radcli/releases/download/$(PKG_VERSION)/
+PKG_MD5SUM:=b94e46e37668cc562ea5420d095a836b
PKG_BUILD_DIR:=$(BUILD_DIR)/radcli-$(PKG_VERSION)
PKG_INSTALL:=1
endef
define Host/Install
- $(INSTALL_DIR) $(STAGING_DIR_HOST)/bin
- $(INSTALL_BIN) $(HOST_BUILD_DIR)/lib/searpc-codegen.py $(STAGING_DIR_HOST)/bin/
+ $(INSTALL_DIR) $(STAGING_DIR)/host/bin
+ $(INSTALL_BIN) $(HOST_BUILD_DIR)/lib/searpc-codegen.py $(STAGING_DIR)/host/bin/
endef
$(eval $(call HostBuild))
PKG_NAME:=libshout
PKG_VERSION:=2.3.1
-PKG_RELEASE:=1
+PKG_RELEASE:=3
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://downloads.us.xiph.org/releases/libshout/
PKG_MD5SUM:=11765b2592e7ea623ccd93d3f8df172c
include $(INCLUDE_DIR)/package.mk
-define Package/libshout
+define Package/libshout/default
SECTION:=libs
CATEGORY:=Libraries
- TITLE:=Library which can be used to write a source client like ices
+ TITLE:=Shoutcast client library
URL:=http://www.icecast.org/download.php
- DEPENDS:= +libspeex +libtheora +libvorbis +libvorbisidec +libpthread
+ DEPENDS:= +libvorbis +libvorbisidec +libpthread
+endef
+
+define Package/libshout
+ $(call Package/libshout/default)
+ TITLE+= (no speex & theora)
+ VARIANT:=nospeex
+endef
+
+define Package/libshout-full
+ $(call Package/libshout/default)
+ TITLE+= (all codecs)
+ DEPENDS+= +libspeex +libtheora
+ VARIANT:=full
endef
define Package/libshout/description
details.
endef
+Package/libshout-full/description=Package/libshout/description
+
CONFIGURE_ARGS += \
--enable-shared \
- --enable-static \
+ --enable-static
+
+ifeq ($(BUILD_VARIANT),nospeex)
+ CONFIGURE_ARGS += --disable-theora --disable-speex
+endif
CONFIGURE_VARS += \
VORBIS_CFLAGS="-I$(STAGING_DIR)/usr/include/tremor/" \
TARGET_CFLAGS += $(FPIC) -Wl,-rpath-link="$(STAGING_DIR)/usr/lib"
+PACKAGE_CONFIG_FILE=shout$(if $(findstring $(BUILD_VARIANT),full),-full).pc
+
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include
$(CP) $(PKG_INSTALL_DIR)/usr/include/shout $(1)/usr/include/
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libshout.{a,so*} $(1)/usr/lib/
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/shout.pc $(1)/usr/lib/pkgconfig/
- $(SED) 's| -I/usr/include||' $(1)/usr/lib/pkgconfig/shout.pc
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/shout.pc $(1)/usr/lib/pkgconfig/$(PACKAGE_CONFIG_FILE)
+ $(SED) 's| -I/usr/include||' $(1)/usr/lib/pkgconfig/$(PACKAGE_CONFIG_FILE)
endef
define Package/libshout/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libshout.so.* $(1)/usr/lib/
endef
+Package/libshout-full/install=$(Package/libshout/install)
$(eval $(call BuildPackage,libshout))
+$(eval $(call BuildPackage,libshout-full))
include $(TOPDIR)/rules.mk
PKG_NAME:=libsndfile
-PKG_VERSION:=1.0.25
+PKG_VERSION:=1.0.26
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.mega-nerd.com/libsndfile/files/
-PKG_MD5SUM:=e2b7bb637e01022c7d20f95f9c3990a2
+PKG_MD5SUM:=ec810a0c60c08772a8a5552704b63393
PKG_LICENSE:=LGPLv2.1
PKG_LICENSE_FILES:=COPYING
+++ /dev/null
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -1,5 +1,7 @@
- ## Process this file with automake to produce Makefile.in
-
-+ACLOCAL_AMFLAGS = -I M4
-+
- DISTCHECK_CONFIGURE_FLAGS = --enable-gcc-werror
-
- if BUILD_OCTAVE_MOD
include $(TOPDIR)/rules.mk
PKG_NAME:=libsodium
-PKG_VERSION:=1.0.6
+PKG_VERSION:=1.0.8
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://download.libsodium.org/libsodium/releases
-PKG_MD5SUM:=03e8e96cef9d18473aafef7d474a6e88
+PKG_MD5SUM:=0a66b86fd3aab3fe4c858edcd2772760
PKG_FIXUP:=libtool autoreconf
PKG_USE_MIPS16:=0
include $(TOPDIR)/rules.mk
PKG_NAME:=libsoup
-PKG_VERSION:=2.44.2
+PKG_VERSION:=2.53.2
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=@GNOME/$(PKG_NAME)/2.44
-PKG_MD5SUM:=92aa3667357157e8f3489bcca287f2fa
+PKG_SOURCE_URL:=@GNOME/$(PKG_NAME)/2.53
+PKG_MD5SUM:=dc23612d6365a0b8a6a650ffe0bdcb4c
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
--disable-glibtest \
--without-apache-httpd \
--without-gnome \
+ --enable-vala=no \
)
endef
th02 tm1637 tsl2561 ttp223 ublox6 uln200xa waterlevel wheelencoder wt5001 yg1006 zfm20
CMAKE_OPTIONS=-DBUILDARCH=$(CONFIG_ARCH) \
- -DNODE_EXECUTABLE=$(STAGING_DIR_HOST)/bin/node \
- -DSWIG_DIR=$(STAGING_DIR_HOST)/bin
+ -DNODE_EXECUTABLE=$(STAGING_DIR)/host/bin/node \
+ -DSWIG_DIR=$(STAGING_DIR)/host/bin
define Package/libupm/Default
SECTION:=libs
include $(TOPDIR)/rules.mk
PKG_NAME:=libwebsockets
-PKG_VERSION:=1.5-chrome47-firefox41
+PKG_VERSION:=1.6.2
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/cmake.mk
-CMAKE_OPTIONS += $(if $(CONFIG_IPV6),,-DLWS_IPV6=)
-
+CMAKE_OPTIONS += -DLWS_IPV6=$(if $(CONFIG_IPV6),ON,OFF)
CMAKE_OPTIONS += -DLWS_WITHOUT_TESTAPPS=ON
# other options worth noting
# for cyassl, edit package/libs/cyassl/Makefile to include --enable-opensslextra
# NOTE: it will compile without it, untested whether it it's needed?!
CMAKE_OPTIONS += -DLWS_USE_CYASSL=ON
- CMAKE_OPTIONS += -DLWS_CYASSL_LIB=$(STAGING_DIR)/usr/lib/libcyassl.so
+ CMAKE_OPTIONS += -DLWS_CYASSL_LIBRARIES=$(STAGING_DIR)/usr/lib/libcyassl.so
CMAKE_OPTIONS += -DLWS_CYASSL_INCLUDE_DIRS=$(STAGING_DIR)/usr/include
endif
#
-# Copyright (C) 2006-2014 OpenWrt.org
+# Copyright (C) 2006-2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=libxml2
-PKG_VERSION:=2.9.2
-PKG_RELEASE:=3
+PKG_VERSION:=2.9.3
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://gd.tuwien.ac.at/languages/libxml/ \
http://xmlsoft.org/sources/ \
ftp://fr.rpmfind.net/pub/libxml/
-PKG_MD5SUM:=9e6a9aca9d155737868b3dc5fd82f788
+PKG_MD5SUM:=daece17e045f1c107610e137ab50c179
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=COPYING
+++ /dev/null
-From e3e04d254fb6bac49a285775b729e28b0500476c Mon Sep 17 00:00:00 2001
-From: Michael Heimpold <mhei@heimpold.de>
-Date: Sun, 21 Dec 2014 01:03:49 +0100
-Subject: [PATCH] threads: use forward declarations only for glibc (fixes
- #704908)
-
-The declarations of pthread functions, used to generate weak references
-to them, fail to suppress macros. Thus, if any pthread function has
-been provided as a macro, compiling threads.c will fail.
-This breaks on musl libc, which defines pthread_equal as a macro (in
-addition to providing the function, as required).
-
-Prevent the declarations for e.g. musl libc by refining the condition.
-
-The idea for this solution was borrowed from the alpine linux guys, see
-http://git.alpinelinux.org/cgit/aports/tree/main/libxml2/libxml2-pthread.patch
-
-Signed-off-by: Michael Heimpold <mhei@heimpold.de>
----
- threads.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/threads.c
-+++ b/threads.c
-@@ -47,7 +47,7 @@
- #ifdef HAVE_PTHREAD_H
-
- static int libxml_is_threaded = -1;
--#ifdef __GNUC__
-+#if defined(__GNUC__) && defined(__GLIBC__)
- #ifdef linux
- #if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (__GNUC__ > 3)
- extern int pthread_once (pthread_once_t *__once_control,
-@@ -89,7 +89,7 @@ extern int pthread_cond_signal ()
- __attribute((weak));
- #endif
- #endif /* linux */
--#endif /* __GNUC__ */
-+#endif /* defined(__GNUC__) && defined(__GLIBC__) */
- #endif /* HAVE_PTHREAD_H */
-
- /*
endef
define Host/Install
- $(INSTALL_DIR) $(STAGING_DIR_HOST)/bin
- $(CP) $(HOST_BUILD_DIR)/tools/bin/filterh $(STAGING_DIR_HOST)/bin/
+ $(INSTALL_DIR) $(STAGING_DIR)/host/bin
+ $(CP) $(HOST_BUILD_DIR)/tools/bin/filterh $(STAGING_DIR)/host/bin/
endef
$(eval $(call HostBuild))
RE2C = @RE2C@
RE2CFLAGS = -b
-FILTERH = ./tools/bin/filterh
-+FILTERH = $(STAGING_DIR_HOST)/bin/filterh
++FILTERH = $(STAGING_DIR)/host/bin/filterh
AM_CPPFLAGS = $(CPPFLAGS) $(DBCPPFLAGS)
AM_CPPFLAGS += -Isrc -Isrc/util -Isrc/net -Isrc/db -Isrc/exceptions
include $(TOPDIR)/rules.mk
PKG_NAME:=openldap
-PKG_VERSION:=2.4.41
+PKG_VERSION:=2.4.43
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz
ftp://sunsite.cnlab-switch.ch/mirror/OpenLDAP/openldap-release/ \
ftp://ftp.nl.uu.net/pub/unix/db/openldap/openldap-release/ \
ftp://ftp.plig.org/pub/OpenLDAP/openldap-release/
-PKG_MD5SUM:=3f1a4cea52827e18feaedfdc1634b5d0
+PKG_MD5SUM:=49ca65e27891fcf977d78c10f073c705
PKG_FIXUP:=autoreconf
include $(TOPDIR)/rules.mk
PKG_NAME:=p11-kit
-PKG_VERSION:=0.20.7
+PKG_VERSION:=0.23.1
PKG_RELEASE:=1
PKG_MAINTAINER:=Nikos Mavrogiannopoulos <n.mavrogiannopoulos@gmail.com>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_MD5SUM:=6648cad01a3080b685b8b3bf7372c91a
+PKG_MD5SUM:=96f073270c489c9a594e1c9413f42db8
PKG_SOURCE_URL:=http://p11-glue.freedesktop.org/releases/
PKG_INSTALL:=1
include $(TOPDIR)/rules.mk
PKG_NAME:=pcre
-PKG_VERSION:=8.37
-PKG_RELEASE:=2
+PKG_VERSION:=8.38
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=@SF/pcre
-PKG_MD5SUM:=ed91be292cb01d21bc7e526816c26981
+PKG_SOURCE_URL:=ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
+PKG_MD5SUM:=00aabbfe56d5a48b270f999b508c5ad2
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
PKG_LICENSE:=BSD-3-Clause
+++ /dev/null
-Index: pcre-8.37/pcre_compile.c
-===================================================================
---- a/pcre_compile.c
-+++ b/pcre_compile.c
-@@ -7177,14 +7177,26 @@
- number. If the name is not found, set the value to 0 for a forward
- reference. */
-
-+ recno = 0;
- ng = cd->named_groups;
- for (i = 0; i < cd->names_found; i++, ng++)
- {
- if (namelen == ng->length &&
- STRNCMP_UC_UC(name, ng->name, namelen) == 0)
-- break;
-+ {
-+ open_capitem *oc;
-+ recno = ng->number;
-+ if (is_recurse) break;
-+ for (oc = cd->open_caps; oc != NULL; oc = oc->next)
-+ {
-+ if (oc->number == recno)
-+ {
-+ oc->flag = TRUE;
-+ break;
-+ }
-+ }
-+ }
- }
-- recno = (i < cd->names_found)? ng->number : 0;
-
- /* Count named back references. */
define Package/pgsql-cli
SECTION:=utils
CATEGORY:=Utilities
- DEPENDS:=+libpq @USE_UCLIBC:+librt
+ DEPENDS:=+libpq +USE_UCLIBC:librt
TITLE:=Command Line Interface (CLI) to PostgreSQL databases
URL:=http://www.postgresql.org/
SUBMENU:=database
define Package/pgsql-server
SECTION:=utils
CATEGORY:=Utilities
- DEPENDS:=+libpq @USE_UCLIBC:+librt
+ DEPENDS:=+libpq +USE_UCLIBC:librt
TITLE:=PostgreSQL databases Server
URL:=http://www.postgresql.org/
SUBMENU:=database
include $(TOPDIR)/rules.mk
PKG_NAME:=libprotobuf-c
-PKG_VERSION:=v1.0.1
+PKG_VERSION:=v1.2.1
PKG_RELEASE:=$(PKG_SOURCE_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
of its internal RPC protocols and file formats.
endef
-CONFIGURE_ARGS += --with-protoc=$(STAGING_DIR_HOST)/bin/protoc
+CONFIGURE_ARGS += --with-protoc=$(STAGING_DIR)/host/bin/protoc
define Build/InstallDev
$(INSTALL_DIR) \
PKG_NAME:=unixodbc
PKG_VERSION:=2.3.4
-PKG_RELEASE:=1
+PKG_RELEASE:=2
-PKG_SOURCE_URL:=@SF/unixodbc
+PKG_SOURCE_URL:=ftp://ftp.unixodbc.org/pub/unixODBC/
PKG_SOURCE:=unixODBC-$(PKG_VERSION).tar.gz
PKG_MD5SUM:=bd25d261ca1808c947cb687e2034be81
PKG_BUILD_DIR:=$(BUILD_DIR)/unixODBC-$(PKG_VERSION)
include $(TOPDIR)/rules.mk
PKG_NAME:=zeromq
-PKG_VERSION:=4.1.1
+PKG_VERSION:=4.1.3
PKG_RELEASE:=1
PKG_MAINTAINER:=Dirk Chang <dirk@kooiot.com>
PKG_LICENSE:=GPL-3.0+
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:= http://download.zeromq.org
-PKG_MD5SUM:=0a4b44aa085644f25c177f79dc13f253
+PKG_MD5SUM:=d0824317348cfb44b8692e19cc73dc3a
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
PKG_BUILD_DEPENDS:=libuuid
--- a/configure.ac
+++ b/configure.ac
-@@ -147,8 +147,10 @@ case "${host_os}" in
+@@ -148,8 +148,10 @@ case "${host_os}" in
*linux*)
# Define on Linux to enable all library features. Define if using a gnu compiler
if test "x$GXX" = "xyes"; then
--- a/src/metadata.hpp
+++ b/src/metadata.hpp
-@@ -31,7 +31,7 @@ namespace zmq
+@@ -41,7 +41,7 @@ namespace zmq
{
public:
virtual ~metadata_t ();
--- a/src/socket_base.cpp
+++ b/src/socket_base.cpp
-@@ -20,6 +20,7 @@
+@@ -30,6 +30,7 @@
#include <new>
#include <string>
#include <algorithm>
--- a/src/stream_engine.cpp
+++ b/src/stream_engine.cpp
-@@ -198,7 +198,7 @@ void zmq::stream_engine_t::plug (io_thre
+@@ -208,7 +208,7 @@ void zmq::stream_engine_t::plug (io_thre
// Compile metadata.
typedef metadata_t::dict_t properties_t;
properties_t properties;
zmq_assert (metadata == NULL);
metadata = new (std::nothrow) metadata_t (properties);
}
-@@ -805,7 +805,7 @@ void zmq::stream_engine_t::mechanism_rea
+@@ -815,7 +815,7 @@ void zmq::stream_engine_t::mechanism_rea
// If we have a peer_address, add it to metadata
if (!peer_address.empty()) {
--- a/src/blob.hpp
+++ b/src/blob.hpp
-@@ -21,6 +21,7 @@
+@@ -31,6 +31,7 @@
#define __ZMQ_BLOB_HPP_INCLUDED__
#include <string>
--- /dev/null
+--- a/src/blob.hpp
++++ b/src/blob.hpp
+@@ -38,7 +38,7 @@
+ // They seem to be doing something for MSC, but since I only have gcc, I'll just do that
+ // Assuming this is uneccessary on GCC 4
+ // #if (defined(__GNUC__) && (__GNUC__ >= 3) || (defined(_MSC_VER) && _MSC_VER > 1000))
+-#if (defined(__GNUC__) && (__GNUC__ >= 3) && (__GNUC__ <= 4))
++#if (defined(__GNUC__) && (__GNUC__ >= 3))
+ namespace std
+ {
+ template<>
--- a/src/mtrie.cpp
+++ b/src/mtrie.cpp
-@@ -17,11 +17,11 @@
+@@ -27,11 +27,11 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "windows.hpp"
--- a/src/raw_encoder.cpp
+++ b/src/raw_encoder.cpp
-@@ -17,6 +17,11 @@
+@@ -27,6 +27,11 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "likely.hpp"
--- a/src/trie.cpp
+++ b/src/trie.cpp
-@@ -17,11 +17,11 @@
+@@ -27,11 +27,11 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "windows.hpp"
--- a/src/encoder.hpp
+++ b/src/encoder.hpp
-@@ -29,7 +29,6 @@
+@@ -39,7 +39,6 @@
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#include "msg.hpp"
--- a/src/v1_encoder.cpp
+++ b/src/v1_encoder.cpp
-@@ -17,6 +17,11 @@
+@@ -27,6 +27,11 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "likely.hpp"
--- a/src/v2_encoder.cpp
+++ b/src/v2_encoder.cpp
-@@ -17,6 +17,11 @@
+@@ -27,6 +27,11 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
--- /dev/null
+#
+# Copyright (C) 2006-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=mutt
+PKG_VERSION:=1.5.24
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=ftp://ftp.mutt.org/pub/mutt/
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_MD5SUM:=7f25d27f3c7c82285ac07aac35f5f0f2
+
+PKG_LICENSE:=GPL-2.0+
+PKG_LICENSE_FILES:=GPL
+PKG_MAINTAINER=Phil Eichinger <phil@zankapfel.net>
+
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/mutt
+ SECTION:=mail
+ CATEGORY:=Mail
+ DEPENDS:=+libopenssl +libncursesw
+ TITLE:=Console mail client
+ URL:=http://www.mutt.org/
+endef
+
+define Package/mutt/description
+ Mutt is a small but very powerful text-based mail client for Unix
+ operating systems.
+endef
+
+CONFIGURE_ARGS += \
+ --includedir=$(PKG_BUILD_DIR)/. \
+ --oldincludedir=$(PKG_BUILD_DIR)/. \
+ --enable-pop \
+ --enable-imap \
+ --with-ssl \
+ --without-idn
+
+define Package/mutt/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mutt $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,mutt))
--- /dev/null
+From b0e285a8c7faaec8807fdd677da6750f341f0109 Mon Sep 17 00:00:00 2001
+From: Phil Eichinger <phil@zankapfel.net>
+Date: Thu, 19 Nov 2015 13:18:53 +0100
+Subject: [PATCH] no po and docs
+
+[adapted old patch and converted to git patch]
+Signed-off-by: Phil Eichinger <phil@zankapfel.net>
+---
+ Makefile.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 1909835..cfa7ca0 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -458,7 +458,7 @@ get_cs_cmdline = $(call get_cs_compile,$(1)) $(call get_cs_all_flags,$(1),check_
+ AUTOMAKE_OPTIONS = 1.6 foreign
+ @BUILD_IMAP_TRUE@IMAP_SUBDIR = imap
+ @BUILD_IMAP_TRUE@IMAP_INCLUDES = -I$(top_srcdir)/imap
+-SUBDIRS = m4 po intl doc contrib $(IMAP_SUBDIR)
++SUBDIRS = m4 intl contrib $(IMAP_SUBDIR)
+ bin_SCRIPTS = muttbug flea $(SMIMEAUX_TARGET)
+ @BUILD_HCACHE_TRUE@HCVERSION = hcversion.h
+ BUILT_SOURCES = keymap_defs.h patchlist.c reldate.h conststrings.c $(HCVERSION)
+--
+2.1.4
+
include $(TOPDIR)/rules.mk
PKG_NAME:=postfix
-PKG_RELEASE:=2
+PKG_RELEASE:=1
PKG_SOURCE_URL:=ftp://ftp.porcupine.org/mirrors/postfix-release/official/
-PKG_VERSION:=3.0.1
-PKG_MD5SUM:=3ec1416e7d4fba9566297c8fcf7a348c
+PKG_VERSION:=3.0.3
+PKG_MD5SUM:=61caffae689c11d09b4c972a394ae3b1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_MAINTAINER:=Denis Shulyaka <Shulyaka@gmail.com>
PKG_LICENSE:=IPL-1.0
CATEGORY:=Mail
TITLE:=Postfix Mail Transmit Agent
URL:=http://www.postfix.org/
- DEPENDS:=+POSTFIX_TLS:libopenssl +POSTFIX_SASL:libsasl2 +POSTFIX_LDAP:libopenldap +POSTFIX_DB:libdb47 +libpcre
+ DEPENDS:=+POSTFIX_TLS:libopenssl +POSTFIX_SASL:libsasl2 +POSTFIX_LDAP:libopenldap +POSTFIX_DB:libdb47 +POSTFIX_EAI:icu +libpcre
endef
define Package/postfix/description
default y
help
Implements support for cdb files using tinycdb
+ config POSTFIX_EAI
+ bool "SMTPUTF8 support"
+ default n
+ help
+ Enable Postfix support for Email Address Internationalization
+ (EAI) as defined in RFC 6531 (SMTPUTF8 extension), RFC 6532
+ (Internationalized email headers) and RFC 6533
+ (Internationalized delivery status notifications).
+ Since version 3.0, Postfix fully supports UTF-8 email
+ addresses and UTF-8 message header values.
endmenu
endef
-CCARGS=-DNO_EPOLL -DNO_SIGSETJMP -DNO_NIS -DNO_EAI
+CCARGS=-DNO_NIS
AUXLIBS=-L$(STAGING_DIR)/usr/lib
default_database_type=cdb
CCARGS+=-DNO_DB
endif
+ifdef CONFIG_POSTFIX_EAI
+ AUXLIBS+=-licuuc
+ CCARGS+=-DHAS_EAI
+ smtputf8_conf = yes
+else
+ CCARGS+=-DNO_EAI
+ smtputf8_conf = no
+endif
+
CCARGS+=-DDEF_DB_TYPE=\"$(default_database_type)\"
config_directory=/etc/postfix# also add this to postfix init file
$(config_directory)/main.cf
$(config_directory)/master.cf
$(config_directory)/aliases
+$(config_directory)/virtual
endef
define Build/Configure
# postconf -d > /tmp/main.cf.new
# 3. Transfer /tmp/main.cf.new file to the build system
# 4. Execute the following command:
-# cat /tmp/main.cf.new | ( echo '# DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE'; echo '# TEXT HERE JUST SHOWS DEFAULT SETTINGS BUILT INTO POSTFIX.'; echo '#'; grep -v ^alias_maps\ = |grep -v ^alias_database\ = |grep -v ^command_directory\ = |grep -v ^config_directory\ = |grep -v ^daemon_directory\ = |grep -v ^data_directory\ = |grep -v ^default_database_type\ = |grep -v ^html_directory\ = |grep -v ^mail_spool_directory\ = |grep -v ^mailq_path\ = |grep -v ^manpage_directory\ = |grep -v ^meta_directory\ = |grep -v ^mydomain\ = |grep -v ^myhostname\ = |grep -v ^mynetworks\ = |grep -v ^mynetworks_style\ = |grep -v ^newaliases_path\ = |grep -v ^queue_directory\ = |grep -v ^readme_directory\ = |grep -v ^sample_directory\ = |grep -v ^sendmail_path\ = |grep -v ^shlib_directory\ = |grep -v ^smtputf8_enable\ = ) > files/main.cf.default
+# cat /tmp/main.cf.new | ( echo '# DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE'; echo '# TEXT HERE JUST SHOWS DEFAULT SETTINGS BUILT INTO POSTFIX.'; echo '#'; grep -v ^alias_maps\ = |grep -v ^alias_database\ = |grep -v ^command_directory\ = |grep -v ^config_directory\ = |grep -v ^daemon_directory\ = |grep -v ^data_directory\ = |grep -v ^default_database_type\ = |grep -v ^html_directory\ = |grep -v ^mail_spool_directory\ = |grep -v ^mailq_path\ = |grep -v ^manpage_directory\ = |grep -v ^meta_directory\ = |grep -v ^mydomain\ = |grep -v ^myhostname\ = |grep -v ^mynetworks\ = |grep -v ^mynetworks_style\ = |grep -v ^newaliases_path\ = |grep -v ^queue_directory\ = |grep -v ^readme_directory\ = |grep -v ^sample_directory\ = |grep -v ^sendmail_path\ = |grep -v ^shlib_directory\ = |grep -v ^smtputf8_enable\ = |grep -v ^virtual_maps\ = ) > files/main.cf.default
# 5. Done. Now you can rebuild the package with new main.cf.default.
#
define Build/Compile
- # Currently postfix has a bug with Makefiles that CCARGS are not passed to the compiler, so we are copying them to CC
+ # Currently postfix has a bug with Makefiles that CCARGS are not passed to the compiler, so we are copying them to CC as a workaround
cd $(PKG_BUILD_DIR); $(MAKE) $(TARGET_CONFIGURE_OPTS) CC='$(TARGET_CC) $(CCARGS)'
cp ./files/main.cf.default $(PKG_BUILD_DIR)/conf/main.cf.default
echo "default_database_type = $(default_database_type)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
echo "alias_database = $(default_database_type):$(config_directory)/aliases" >> $(PKG_BUILD_DIR)/conf/main.cf.default
echo "alias_maps = $(default_database_type):$(config_directory)/aliases" >> $(PKG_BUILD_DIR)/conf/main.cf.default
+ echo "virtual_maps = $(default_database_type):$(config_directory)/virtual" >> $(PKG_BUILD_DIR)/conf/main.cf.default
echo "sendmail_path = $(sendmail_path)$(ln_suffix)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
echo "newaliases_path = $(newaliases_path)$(ln_suffix)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
echo "mailq_path = $(mailq_path)$(ln_suffix)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
echo "mail_spool_directory = $(mail_spool_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
echo "shlib_directory = $(shlib_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
echo "meta_directory = $(meta_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "smtputf8_enable = no" >> $(PKG_BUILD_DIR)/conf/main.cf.default
+ echo "smtputf8_enable = $(smtputf8_conf)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
endef
define Package/postfix/install
grep -qc main\.cf "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/main.cf" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
grep -qc master\.cf "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/master.cf" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
grep -qc aliases "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/aliases" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
+ grep -qc virtual "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/virtual" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
touch "$${IPKG_INSTROOT}$(config_directory)"/opkg_postinst
if [ -z "$${IPKG_INSTROOT}" ]; then
- ps | grep "postfix/master" | grep -cvq grep >/dev/null && /etc/init.d/postfix reload
+ ps | grep "postfix/master" | grep -cvq grep >/dev/null && /etc/init.d/postfix restart
fi
endef
#!/bin/sh
rm -f $${IPKG_INSTROOT}$(config_directory)/aliases.cdb $${IPKG_INSTROOT}$(config_directory)/aliases.db $${IPKG_INSTROOT}$(data_directory)/master.lock
+ rm -f $${IPKG_INSTROOT}$(config_directory)/virtual.cdb $${IPKG_INSTROOT}$(config_directory)/virtual.db
+
rm -f "$${IPKG_INSTROOT}$(sendmail_path)" "$${IPKG_INSTROOT}$(newaliases_path)" "$${IPKG_INSTROOT}$(mailq_path)"
if [ -f "$${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)" ]; then
lmtp_tls_CApath =
lmtp_tls_block_early_mail_reply = no
lmtp_tls_cert_file =
-lmtp_tls_ciphers = export
+lmtp_tls_ciphers = medium
lmtp_tls_dcert_file =
lmtp_tls_dkey_file = $lmtp_tls_dcert_file
lmtp_tls_eccert_file =
lmtp_tls_loglevel = 0
lmtp_tls_mandatory_ciphers = medium
lmtp_tls_mandatory_exclude_ciphers =
-lmtp_tls_mandatory_protocols = !SSLv2
+lmtp_tls_mandatory_protocols = !SSLv2, !SSLv3
lmtp_tls_note_starttls_offer = no
lmtp_tls_per_site =
lmtp_tls_policy_maps =
-lmtp_tls_protocols = !SSLv2
+lmtp_tls_protocols = !SSLv2, !SSLv3
lmtp_tls_scert_verifydepth = 9
lmtp_tls_secure_cert_match = nexthop
lmtp_tls_security_level =
luser_relay =
mail_name = Postfix
mail_owner = postfix
-mail_release_date = 20150208
-mail_version = 3.0.0
+mail_release_date = 20151010
+mail_version = 3.0.3
mailbox_command =
mailbox_command_maps =
mailbox_delivery_lock = fcntl, dotlock
postscreen_watchdog_timeout = 10s
postscreen_whitelist_interfaces = static:all
prepend_delivered_header = command, file, forward
-process_id = 25939
+process_id = 13574
process_id_directory = pid
process_name = postconf
propagate_unmatched_extensions = canonical, virtual
smtp_cname_overrides_servername = no
smtp_connect_timeout = 30s
smtp_connection_cache_destinations =
-smtp_connection_cache_on_demand = yes
+smtp_connection_cache_on_demand = no
smtp_connection_cache_time_limit = 2s
smtp_connection_reuse_count_limit = 0
smtp_connection_reuse_time_limit = 300s
smtp_tls_CApath =
smtp_tls_block_early_mail_reply = no
smtp_tls_cert_file =
-smtp_tls_ciphers = export
+smtp_tls_ciphers = medium
smtp_tls_dcert_file =
smtp_tls_dkey_file = $smtp_tls_dcert_file
smtp_tls_eccert_file =
smtp_tls_loglevel = 0
smtp_tls_mandatory_ciphers = medium
smtp_tls_mandatory_exclude_ciphers =
-smtp_tls_mandatory_protocols = !SSLv2
+smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_note_starttls_offer = no
smtp_tls_per_site =
smtp_tls_policy_maps =
-smtp_tls_protocols = !SSLv2
+smtp_tls_protocols = !SSLv2, !SSLv3
smtp_tls_scert_verifydepth = 9
smtp_tls_secure_cert_match = nexthop, dot-nexthop
smtp_tls_security_level =
smtpd_tls_auth_only = no
smtpd_tls_ccert_verifydepth = 9
smtpd_tls_cert_file =
-smtpd_tls_ciphers = export
+smtpd_tls_ciphers = medium
smtpd_tls_dcert_file =
smtpd_tls_dh1024_param_file =
smtpd_tls_dh512_param_file =
smtpd_tls_loglevel = 0
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_mandatory_exclude_ciphers =
-smtpd_tls_mandatory_protocols = !SSLv2
-smtpd_tls_protocols =
+smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
+smtpd_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_received_header = no
smtpd_tls_req_ccert = no
smtpd_tls_security_level =
START=50
STOP=50
+EXTRA_COMMANDS="status abort flush"
+EXTRA_HELP=" status Display the service status
+ abort Stop the service abruptly. Running processes are signaled to stop immediately
+ flush Force delivery: attempt to deliver every message in the deferred mail queue"
upgrade() {
config_directory="$IPKG_INSTROOT"/etc/postfix
echo "myhostname = $(uci get system.@system[0].hostname)" >> "$config_directory"/main.cf.default
echo "mydomain = $(uci get system.@system[0].hostname|sed -e "s/[^\.]*\.\(.*\)/\1/")" >> "$config_directory"/main.cf.default
- ifconfig | grep "inet addr" | sed -e "s/.*inet addr:\([0-9.]*\).*Mask:/\1 /" | while read IP NETMASK; do eval "$(ipcalc.sh $IP $NETMASK)"; echo "$NETWORK/$PREFIX"; done | xargs echo "mynetworks =" >> "$config_directory"/main.cf.default
+ (eval $(ipcalc.sh $(uci get network.lan.ipaddr) $(uci get network.lan.netmask)); echo mynetworks = 127.0.0.0/8 $NETWORK/$PREFIX) >> "$config_directory"/main.cf.default
echo "mynetworks_style = subnet" >> "$config_directory"/main.cf.default
grep -qc "^sendmail_path[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^sendmail_path =" "$config_directory"/main.cf.default)"
grep -qc "^setgid_group[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^setgid_group =" "$config_directory"/main.cf.default)"
grep -qc "^myhostname[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^myhostname =" "$config_directory"/main.cf.default)"
grep -qc "^mydomain[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^mydomain =" "$config_directory"/main.cf.default)"
- grep -qc "^mynetworks[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^mynetworks =" "$config_directory"/main.cf.default)"
+ #grep -qc "^mynetworks[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^mynetworks =" "$config_directory"/main.cf.default)" #Setting mynetworks_style is enough
grep -qc "^mynetworks_style[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^mynetworks_style =" "$config_directory"/main.cf.default)"
grep -qc "^shlib_directory[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^shlib_directory =" "$config_directory"/main.cf.default)"
grep -qc "^meta_directory[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^meta_directory =" "$config_directory"/main.cf.default)"
postfix post-install upgrade-source
postfix upgrade-configuration
newaliases
+ postmap "$config_directory"/virtual
+ postfix check
fi
}
upgrade
postfix reload
}
+
+status() {
+ postfix status
+}
+
+abort() {
+ postfix abort
+}
+
+flush() {
+ postfix flush
+}
---- a/makedefs
-+++ b/makedefs
-@@ -190,9 +190,9 @@ error() {
+--- a/makedefs 2016-01-28 12:30:14.444082390 -0500
++++ b/makedefs 2016-01-28 13:44:02.092006512 -0500
+@@ -193,7 +193,7 @@ error() {
case $# in
# Officially supported usage.
- 0) SYSTEM=`(uname -s) 2>/dev/null`
-- RELEASE=`(uname -r) 2>/dev/null`
-- VERSION=`(uname -v) 2>/dev/null`
-+ 0) SYSTEM="Linux"
-+ RELEASE="3.10.18"
-+ VERSION="OpenWRT"
- case "$VERSION" in
- dcosx*) SYSTEM=$VERSION;;
- esac;;
-@@ -522,9 +522,9 @@ EOF
- esac
- for name in nsl resolv
- do
-- for lib in /usr/lib64 /lib64 /usr/lib /usr/lib/* /lib /lib/*
-+ for lib in /usr/lib64 /usr/lib64/* /usr/lib /usr/lib/* /lib /lib/*
- do
-- test -e $lib/lib$name.a -o -e $lib/lib$name.so && {
-+ test -e $STAGING_DIR/$lib/lib$name.a -o -e $STAGING_DIR/$lib/lib$name.so && {
- SYSLIBS="$SYSLIBS -l$name"
- break
- }
++ 0) SYSTEM="OpenWRT"
+ RELEASE=`(uname -r) 2>/dev/null`
+ # No ${x%%y} support in Solaris 11 /bin/sh
+ RELEASE_MAJOR=`expr "$RELEASE" : '\([0-9]*\)'` || exit 1
+@@ -207,6 +207,15 @@ case $# in
+ esac
+
+ case "$SYSTEM.$RELEASE" in
++ OpenWRT*) SYSTYPE=LINUX$RELEASE_MAJOR
++ SYSLIBS="$SYSLIBS -ldl"
++ : ${SHLIB_SUFFIX=.so}
++ : ${SHLIB_CFLAGS=-fPIC}
++ : ${SHLIB_LD="${CC-gcc} -shared"' -Wl,-soname,${LIB}'}
++ : ${SHLIB_RPATH='-Wl,--enable-new-dtags -Wl,-rpath,${SHLIB_DIR}'}
++ : ${SHLIB_ENV="LD_LIBRARY_PATH=`pwd`/lib"}
++ : ${PLUGIN_LD="${CC-gcc} -shared"}
++ ;;
+ SCO_SV.3.2) SYSTYPE=SCO5
+ # Use the native compiler by default
+ : ${CC="/usr/bin/cc -b elf"}
#
-# Copyright (C) 2007-2014 OpenWrt.org
+# Copyright (C) 2007-2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=ssmtp
PKG_VERSION:=2.64
-PKG_RELEASE:=1.1
-PKG_MAINTAINER:=Dirk Brenken <dibdot@gmail.com>
+PKG_RELEASE:=1
+PKG_MAINTAINER:=Dirk Brenken <dirk@brenken.org>
PKG_LICENSE:=GPL-2.0+
PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).orig.tar.bz2
TARGET_CFLAGS += $(TARGET_CPPFLAGS)
-define Package/ssmtp
- SECTION:=mail
- CATEGORY:=Mail
- DEPENDS:=+libopenssl
- TITLE:=A minimal and secure mail sender with ssl support
- URL:=http://packages.debian.org/ssmtp
+define Package/$(PKG_NAME)
+ SECTION:=mail
+ CATEGORY:=Mail
+ DEPENDS:=+libopenssl
+ TITLE:=A minimal and secure mail sender with ssl support
+ URL:=http://packages.debian.org/ssmtp
endef
-define Package/ssmtp/description
- A secure, effective and simple way of getting mail off a system to your
- mail hub. It contains no suid-binaries or other dangerous things - no
- mail spool to poke around in, and no daemons running in the background.
- Mail is simply forwarded to the configured mailhost. Extremely easy
- configuration.
+define Package/$(PKG_NAME)/description
+A secure, effective and simple way of getting mail off a system to your
+mail hub. It contains no suid-binaries or other dangerous things - no
+mail spool to poke around in, and no daemons running in the background.
+Mail is simply forwarded to the configured mailhost. Extremely easy
+configuration.
+
endef
-define Package/ssmtp/conffiles
+define Package/$(PKG_NAME)/conffiles
/etc/ssmtp/ssmtp.conf
/etc/ssmtp/revaliases
endef
CONFIGURE_ARGS += \
--enable-ssl
-define Package/ssmtp/install
+define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/etc/ssmtp
$(INSTALL_CONF) $(PKG_BUILD_DIR)/ssmtp.conf $(1)/etc/ssmtp/
$(INSTALL_DATA) $(PKG_BUILD_DIR)/revaliases $(1)/etc/ssmtp/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/ssmtp $(1)/usr/sbin/
endef
-define Package/ssmtp/postinst
+define Package/$(PKG_NAME)/postinst
#!/bin/sh
ln -sf ssmtp $${IPKG_INSTROOT}/usr/sbin/sendmail
endef
-$(eval $(call BuildPackage,ssmtp))
+$(eval $(call BuildPackage,$(PKG_NAME)))
--- /dev/null
+--- a/ssmtp.c
++++ b/ssmtp.c
+@@ -138,71 +138,7 @@ int smtp_read_all(int fd, char *response
+ int smtp_okay(int fd, char *response);
+
+ /*
+-dead_letter() -- Save stdin to ~/dead.letter if possible
+-*/
+-void dead_letter(void)
+-{
+- char *path;
+- char buf[(BUF_SZ + 1)];
+- struct passwd *pw;
+- uid_t uid;
+- FILE *fp;
+-
+- uid = getuid();
+- pw = getpwuid(uid);
+-
+- if(isatty(fileno(stdin))) {
+- if(log_level > 0) {
+- log_event(LOG_ERR,
+- "stdin is a TTY - not saving to %s/dead.letter", pw->pw_dir);
+- }
+- return;
+- }
+-
+- if(pw == (struct passwd *)NULL) {
+- /* Far to early to save things */
+- if(log_level > 0) {
+- log_event(LOG_ERR, "No sender failing horribly!");
+- }
+- return;
+- }
+-
+-#define DEAD_LETTER "/dead.letter"
+- path = malloc (strlen (pw->pw_dir) + sizeof (DEAD_LETTER));
+- if (!path) {
+- /* Can't use die() here since dead_letter() is called from die() */
+- exit(1);
+- }
+- memcpy (path, pw->pw_dir, strlen (pw->pw_dir));
+- memcpy (path + strlen (pw->pw_dir), DEAD_LETTER, sizeof (DEAD_LETTER));
+-
+- if((fp = fopen(path, "a")) == (FILE *)NULL) {
+- /* Perhaps the person doesn't have a homedir... */
+- if(log_level > 0) {
+- log_event(LOG_ERR, "Can't open %s failing horribly!", path);
+- }
+- free(path);
+- return;
+- }
+-
+- /* We start on a new line with a blank line separating messages */
+- (void)fprintf(fp, "\n\n");
+-
+- while(fgets(buf, sizeof(buf), stdin)) {
+- (void)fputs(buf, fp);
+- }
+-
+- if(fclose(fp) == -1) {
+- if(log_level > 0) {
+- log_event(LOG_ERR,
+- "Can't close %s/dead.letter, possibly truncated", pw->pw_dir);
+- }
+- }
+- free(path);
+-}
+-
+-/*
+-die() -- Write error message, dead.letter and exit
++die() -- Write error message and exit
+ */
+ void die(char *format, ...)
+ {
+@@ -216,9 +152,6 @@ void die(char *format, ...)
+ (void)fprintf(stderr, "%s: %s\n", prog, buf);
+ log_event(LOG_ERR, "%s", buf);
+
+- /* Send message to dead.letter */
+- (void)dead_letter();
+-
+ exit(1);
+ }
+
+@@ -1640,7 +1573,7 @@ int ssmtp(char *argv[])
+ sleep(1);
+ /* don't hang forever when reading from stdin */
+ if (++timeout >= MEDWAIT) {
+- log_event(LOG_ERR, "killed: timeout on stdin while reading body -- message saved to dead.letter.");
++ log_event(LOG_ERR, "killed: timeout on stdin while reading body.");
+ die("Timeout on stdin while reading body");
+ }
+ continue;
--- /dev/null
+--- a/ssmtp.c
++++ b/ssmtp.c
+@@ -1338,6 +1338,7 @@ ssmtp() -- send the message (exactly one
+ int ssmtp(char *argv[])
+ {
+ char b[(BUF_SZ + 2)], *buf = b+1, *p, *q;
++ char *remote_addr;
+ #ifdef MD5AUTH
+ char challenge[(BUF_SZ + 1)];
+ #endif
+@@ -1541,6 +1542,10 @@ int ssmtp(char *argv[])
+ outbytes += smtp_write(sock, "From: %s", from);
+ }
+
++ if(remote_addr=getenv("REMOTE_ADDR")) {
++ outbytes += smtp_write(sock, "X-Originating-IP: %s", remote_addr);
++ }
++
+ if(have_date == False) {
+ outbytes += smtp_write(sock, "Date: %s", arpadate);
+ }
--- /dev/null
+--- a/ssmtp.c
++++ b/ssmtp.c
+@@ -1591,12 +1591,12 @@ int ssmtp(char *argv[])
+ outbytes += smtp_write(sock, "%s", leadingdot ? b : buf);
+ } else {
+ if (log_level > 0) {
+- log_event(LOG_INFO, "Sent a very long line in chunks");
++ log_event(LOG_INFO, "Sending a partial line");
+ }
+ if (leadingdot) {
+- outbytes += fd_puts(sock, b, sizeof(b));
++ outbytes += fd_puts(sock, b, strlen(b));
+ } else {
+- outbytes += fd_puts(sock, buf, bufsize);
++ outbytes += fd_puts(sock, buf, strlen(buf));
+ }
+ }
+ (void)alarm((unsigned) MEDWAIT);
--- /dev/null
+--- a/ssmtp.c
++++ b/ssmtp.c
+@@ -282,6 +282,7 @@ standardise() -- Trim off '\n's and doub
+ */
+ bool_t standardise(char *str, bool_t *linestart)
+ {
++ size_t sl;
+ char *p;
+ bool_t leadingdot = False;
+
+@@ -297,6 +298,12 @@ bool_t standardise(char *str, bool_t *li
+ if((p = strchr(str, '\n'))) {
+ *p = '\0';
+ *linestart = True;
++
++ /* If the line ended in "\r\n", then drop the '\r' too */
++ sl = strlen(str);
++ if(sl >= 1 && str[sl - 1] == '\r') {
++ str[sl - 1] = '\0';
++ }
+ }
+ return(leadingdot);
+ }
+@@ -690,6 +697,14 @@ void header_parse(FILE *stream)
+ }
+ len++;
+
++ if(l == '\r' && c == '\n') {
++ /* Properly handle input that already has "\r\n"
++ line endings; see https://bugs.debian.org/584162 */
++ l = (len >= 2 ? *(q - 2) : '\n');
++ q--;
++ len--;
++ }
++
+ if(l == '\n') {
+ switch(c) {
+ case ' ':
+@@ -712,8 +727,9 @@ void header_parse(FILE *stream)
+ if((q = strrchr(p, '\n'))) {
+ *q = '\0';
+ }
+- header_save(p);
+-
++ if(len > 0) {
++ header_save(p);
++ }
+ q = p;
+ len = 0;
+ }
+@@ -722,35 +738,12 @@ void header_parse(FILE *stream)
+
+ l = c;
+ }
+- if(in_header) {
+- if(l == '\n') {
+- switch(c) {
+- case ' ':
+- case '\t':
+- /* Must insert '\r' before '\n's embedded in header
+- fields otherwise qmail won't accept our mail
+- because a bare '\n' violates some RFC */
+-
+- *(q - 1) = '\r'; /* Replace previous \n with \r */
+- *q++ = '\n'; /* Insert \n */
+- len++;
+-
+- break;
+-
+- case '\n':
+- in_header = False;
+-
+- default:
+- *q = '\0';
+- if((q = strrchr(p, '\n'))) {
+- *q = '\0';
+- }
+- header_save(p);
+-
+- q = p;
+- len = 0;
+- }
+- }
++ if(in_header && l == '\n') {
++ /* Got EOF while reading the header */
++ if((q = strrchr(p, '\n'))) {
++ *q = '\0';
++ }
++ header_save(p);
+ }
+ (void)free(p);
+ }
include $(TOPDIR)/rules.mk
PKG_NAME:=ffmpeg
-PKG_VERSION:=2.7.2
+PKG_VERSION:=2.7.4
PKG_RELEASE:=1
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://ffmpeg.org/releases/
-PKG_MD5SUM:=7eb2140bab9f0a8669b65b50c8e4cfb5
+PKG_MD5SUM:=dea35a30de724e1851a94680fc209a0d
PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
PKG_LICENSE:=LGPL-2.1+ GPL-2+ LGPL-3
include $(TOPDIR)/rules.mk
PKG_NAME:=grilo-plugins
-PKG_VERSION:=0.2.16
+PKG_VERSION:=0.3.0
PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=https://download.gnome.org/sources/grilo-plugins/0.2/
-PKG_MD5SUM:=62ecaad877b485a950259eef1ef38c18
+PKG_SOURCE_URL:=@GNOME/grilo-plugins/0.3/
+PKG_MD5SUM:=670f0302a4b91c043a7c9f9222545fbe
PKG_BUILD_DEPENDS:=glib2 grilo
--without-x \
define Package/grilo-plugins/install
- $(INSTALL_DIR) $(1)/usr/lib/grilo-0.2
+ $(INSTALL_DIR) $(1)/usr/lib/grilo-0.3
endef
define BuildPlugin
endef
define Package/grilo-plugins-$(1)/install
- $(INSTALL_DIR) $$(1)/usr/lib/grilo-0.2
+ $(INSTALL_DIR) $$(1)/usr/lib/grilo-0.3
for p in $(3); do \
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/grilo-0.2/libgrl$$$$$$$${p}.so $$(1)/usr/lib/grilo-0.2; \
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/grilo-0.2/grl-$$$$$$$${p}.xml $$(1)/usr/lib/grilo-0.2; \
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/grilo-0.3/libgrl$$$$$$$${p}.so $$(1)/usr/lib/grilo-0.3; \
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/grilo-0.3/grl-$$$$$$$${p}.xml $$(1)/usr/lib/grilo-0.3; \
done
endef
include $(TOPDIR)/rules.mk
PKG_NAME:=grilo
-PKG_VERSION:=0.2.14
+PKG_VERSION:=0.3.0
PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=https://download.gnome.org/sources/grilo/0.2/
-PKG_MD5SUM:=7eba405ada20fefcb877d534d9d4f
+PKG_SOURCE_URL:=@GNOME/grilo/0.3/
+PKG_MD5SUM:=f8a51aacc604dcc308e71f8bca4c57ae
PKG_BUILD_DEPENDS:=glib2 libsoup libxml2
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include/
$(CP) \
- $(PKG_INSTALL_DIR)/usr/include/grilo-0.2/ \
+ $(PKG_INSTALL_DIR)/usr/include/grilo-0.3/ \
$(1)/usr/include/
$(INSTALL_DIR) $(1)/usr/lib/
$(CP) \
$(INSTALL_DATA) \
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/*.pc \
$(1)/usr/lib/pkgconfig/
+ $(INSTALL_DIR) $(STAGING_DIR)/host/share/vala-0.30/vapi/
+ # Note: this are compiled elsewhere because grilo refuses to
+ # generate VAPI files unless gobject-introspection exists;
+ # OpenWrt does not yet have a gobject-introspection package.
+ $(INSTALL_DATA) \
+ ./files/*.vapi \
+ $(STAGING_DIR)/host/share/vala-0.30/vapi
endef
define Package/grilo/install
--- /dev/null
+/* grilo-0.3.vapi generated by vapigen-0.30, do not modify. */
+
+[CCode (cprefix = "Grl", gir_namespace = "Grl", gir_version = "0.3", lower_case_cprefix = "grl_")]
+namespace Grl {
+ [CCode (cheader_filename = "grilo.h", type_id = "grl_caps_get_type ()")]
+ public class Caps : GLib.Object {
+ [CCode (has_construct_function = false)]
+ public Caps ();
+ public unowned GLib.List<Grl.KeyID> get_key_filter ();
+ public unowned GLib.List<Grl.KeyID> get_key_range_filter ();
+ public Grl.TypeFilter get_type_filter ();
+ public bool is_key_filter (Grl.KeyID key);
+ public bool is_key_range_filter (Grl.KeyID key);
+ public void set_key_filter (GLib.List<Grl.KeyID> keys);
+ public void set_key_range_filter (GLib.List<Grl.KeyID> keys);
+ public void set_type_filter (Grl.TypeFilter filter);
+ public bool test_option (string key, GLib.Value value);
+ }
+ [CCode (cheader_filename = "grilo.h", type_id = "grl_config_get_type ()")]
+ public class Config : GLib.Object {
+ [CCode (array_length = false, array_null_terminated = true)]
+ public weak void*[] _grl_reserved;
+ [CCode (has_construct_function = false)]
+ public Config (string plugin, string? source);
+ public string get_api_key ();
+ public uint8 get_api_key_blob (size_t size);
+ public string get_api_secret ();
+ public string get_api_token ();
+ public string get_api_token_secret ();
+ public uint8 get_binary (string param, size_t? size);
+ public bool get_boolean (string param);
+ public float get_float (string param);
+ public int get_int (string param);
+ public string get_password ();
+ public string get_plugin ();
+ public string get_source ();
+ public string get_string (string param);
+ public string get_username ();
+ public bool has_param (string param);
+ public void @set (string param, GLib.Value value);
+ public void set_api_key (string key);
+ public void set_api_key_blob (uint8 blob, size_t size);
+ public void set_api_secret (string secret);
+ public void set_api_token (string token);
+ public void set_api_token_secret (string secret);
+ public void set_binary (string param, uint8 blob, size_t size);
+ public void set_boolean (string param, bool value);
+ public void set_float (string param, float value);
+ public void set_int (string param, int value);
+ public void set_password (string password);
+ public void set_plugin (string plugin);
+ public void set_source (string source);
+ public void set_string (string param, string value);
+ public void set_username (string username);
+ }
+ [CCode (cheader_filename = "grilo.h", type_id = "grl_data_get_type ()")]
+ public class Data : GLib.Object {
+ [CCode (array_length = false, array_null_terminated = true)]
+ public weak void*[] _grl_reserved;
+ [CCode (has_construct_function = false)]
+ public Data ();
+ public void add_binary (Grl.KeyID key, uint8 buf, size_t size);
+ public void add_boxed (Grl.KeyID key, void* boxed);
+ public void add_float (Grl.KeyID key, float floatvalue);
+ public void add_int (Grl.KeyID key, int intvalue);
+ public void add_int64 (Grl.KeyID key, int64 intvalue);
+ public void add_related_keys (Grl.RelatedKeys relkeys);
+ public void add_string (Grl.KeyID key, string strvalue);
+ public Grl.Data dup ();
+ public unowned GLib.Value? @get (Grl.KeyID key);
+ public uint8 get_binary (Grl.KeyID key, out size_t size);
+ public bool get_boolean (Grl.KeyID key);
+ public void* get_boxed (Grl.KeyID key);
+ public float get_float (Grl.KeyID key);
+ public int get_int (Grl.KeyID key);
+ public int64 get_int64 (Grl.KeyID key);
+ public GLib.List<weak Grl.KeyID> get_keys ();
+ public unowned Grl.RelatedKeys get_related_keys (Grl.KeyID key, uint index);
+ public GLib.List<weak GLib.Value?> get_single_values_for_key (Grl.KeyID key);
+ public GLib.List<weak string> get_single_values_for_key_string (Grl.KeyID key);
+ public unowned string get_string (Grl.KeyID key);
+ public bool has_key (Grl.KeyID key);
+ public uint length (Grl.KeyID key);
+ public void remove (Grl.KeyID key);
+ public void remove_nth (Grl.KeyID key, uint index);
+ public void @set (Grl.KeyID key, GLib.Value value);
+ public void set_binary (Grl.KeyID key, uint8 buf, size_t size);
+ public void set_boolean (Grl.KeyID key, bool boolvalue);
+ public void set_boxed (Grl.KeyID key, void* boxed);
+ public void set_float (Grl.KeyID key, float floatvalue);
+ public void set_int (Grl.KeyID key, int intvalue);
+ public void set_int64 (Grl.KeyID key, int64 intvalue);
+ public void set_related_keys (Grl.RelatedKeys relkeys, uint index);
+ public void set_string (Grl.KeyID key, string strvalue);
+ }
+ [CCode (cheader_filename = "grilo.h")]
+ [Compact]
+ public class LogDomain {
+ public void free ();
+ }
+ [CCode (cheader_filename = "grilo.h", type_id = "grl_media_get_type ()")]
+ public class Media : Grl.Data {
+ [CCode (has_construct_function = false)]
+ public Media ();
+ public void add_artist (string artist);
+ public void add_author (string author);
+ public void add_director (string director);
+ public void add_external_player (string player);
+ public void add_external_url (string url);
+ public void add_genre (string genre);
+ public void add_keyword (string keyword);
+ public void add_lyrics (string lyrics);
+ public void add_mb_artist_id (string mb_artist_id);
+ public void add_performer (string performer);
+ public void add_producer (string producer);
+ public void add_region_data (string region, GLib.DateTime publication_date, string certificate);
+ public void add_thumbnail (string thumbnail);
+ public void add_thumbnail_binary (uint8 thumbnail, size_t size);
+ public void add_url_data (string url, string mime, int bitrate, float framerate, int width, int height);
+ [CCode (cname = "grl_media_audio_new", has_construct_function = false)]
+ public Media.audio_new ();
+ [CCode (cname = "grl_media_container_new", has_construct_function = false)]
+ public Media.container_new ();
+ public unowned string get_album ();
+ public unowned string get_artist ();
+ public unowned string get_artist_nth (uint index);
+ public unowned string get_author ();
+ public unowned string get_author_nth (uint index);
+ public int get_bitrate ();
+ public unowned string get_camera_model ();
+ public unowned string get_certificate ();
+ public int get_childcount ();
+ public unowned GLib.DateTime get_creation_date ();
+ public unowned string get_description ();
+ public unowned string get_director ();
+ public unowned string get_director_nth (uint index);
+ public int get_duration ();
+ public int get_episode ();
+ public unowned string get_episode_title ();
+ public float get_exposure_time ();
+ public unowned string get_external_url ();
+ public unowned string get_external_url_nth (uint index);
+ public bool get_favourite ();
+ public unowned string get_flash_used ();
+ public float get_framerate ();
+ public unowned string get_genre ();
+ public unowned string get_genre_nth (uint index);
+ public int get_height ();
+ public unowned string get_id ();
+ public float get_iso_speed ();
+ public unowned string get_keyword ();
+ public unowned string get_keyword_nth (uint index);
+ public GLib.DateTime get_last_played ();
+ public int get_last_position ();
+ public unowned string get_license ();
+ public unowned string get_lyrics ();
+ public unowned string get_lyrics_nth (uint index);
+ public unowned string get_mb_album_id ();
+ public unowned string get_mb_artist_id ();
+ public unowned string get_mb_artist_id_nth (uint index);
+ public unowned string get_mb_recording_id ();
+ public unowned string get_mb_track_id ();
+ public Grl.MediaType get_media_type ();
+ public unowned string get_mime ();
+ public unowned GLib.DateTime get_modification_date ();
+ public int get_orientation ();
+ public unowned string get_original_title ();
+ public unowned string get_performer ();
+ public unowned string get_performer_nth (uint index);
+ public int get_play_count ();
+ public unowned string get_player ();
+ public unowned string get_player_nth (uint index);
+ public unowned string get_producer ();
+ public unowned string get_producer_nth (uint index);
+ public unowned GLib.DateTime get_publication_date ();
+ public float get_rating ();
+ public unowned string get_region ();
+ public unowned string get_region_data (out unowned GLib.DateTime publication_date, out unowned string certificate);
+ public unowned string get_region_data_nth (uint index, out unowned GLib.DateTime publication_date, out unowned string certificate);
+ public int get_season ();
+ public unowned string get_show ();
+ public unowned string get_site ();
+ public int64 get_size ();
+ public unowned string get_source ();
+ public float get_start_time ();
+ public unowned string get_studio ();
+ public unowned string get_thumbnail ();
+ public uint8 get_thumbnail_binary (size_t size);
+ public uint8 get_thumbnail_binary_nth (size_t size, uint index);
+ public unowned string get_thumbnail_nth (uint index);
+ public unowned string get_title ();
+ public int get_track_number ();
+ public unowned string get_url ();
+ public unowned string get_url_data (out unowned string mime, out int bitrate, float framerate, int width, int height);
+ public unowned string get_url_data_nth (uint index, out unowned string mime, out int bitrate, float framerate, int width, int height);
+ public int get_width ();
+ [CCode (cname = "grl_media_image_new", has_construct_function = false)]
+ public Media.image_new ();
+ public bool is_audio ();
+ public bool is_container ();
+ public bool is_image ();
+ public bool is_video ();
+ public string serialize ();
+ public void set_album (string album);
+ public void set_artist (string artist);
+ public void set_author (string author);
+ public void set_bitrate (int bitrate);
+ public void set_camera_model (string camera_model);
+ public void set_certificate (string certificate);
+ public void set_childcount (int childcount);
+ public void set_creation_date (GLib.DateTime creation_date);
+ public void set_description (string description);
+ public void set_director (string director);
+ public void set_duration (int duration);
+ public void set_episode (int episode);
+ public void set_episode_title (string episode_title);
+ public void set_exposure_time (float exposure_time);
+ public void set_external_player (string player);
+ public void set_external_url (string url);
+ public void set_favourite (bool favourite);
+ public void set_flash_used (string flash_used);
+ public void set_framerate (float framerate);
+ public void set_genre (string genre);
+ public void set_height (int height);
+ public void set_id (string id);
+ public void set_iso_speed (float iso_speed);
+ public void set_keyword (string keyword);
+ public void set_last_played (GLib.DateTime last_played);
+ public void set_last_position (int last_position);
+ public void set_license (string license);
+ public void set_lyrics (string lyrics);
+ public void set_mb_album_id (string mb_album_id);
+ public void set_mb_artist_id (string mb_artist_id);
+ public void set_mb_recording_id (string mb_recording_id);
+ public void set_mb_track_id (string mb_track_id);
+ public void set_mime (string mime);
+ public void set_modification_date (GLib.DateTime modification_date);
+ public void set_orientation (int orientation);
+ public void set_original_title (string original_title);
+ public void set_performer (string performer);
+ public void set_play_count (int play_count);
+ public void set_producer (string producer);
+ public void set_publication_date (GLib.DateTime date);
+ public void set_rating (float rating, float max);
+ public void set_region (string region);
+ public void set_region_data (string region, GLib.DateTime publication_date, string certificate);
+ public void set_season (int season);
+ public void set_show (string show);
+ public void set_site (string site);
+ public void set_size (int64 size);
+ public void set_source (string source);
+ public void set_studio (string studio);
+ public void set_thumbnail (string thumbnail);
+ public void set_thumbnail_binary (uint8 thumbnail, size_t size);
+ public void set_title (string title);
+ public void set_track_number (int track_number);
+ public void set_url (string url);
+ public void set_url_data (string url, string mime, int bitrate, float framerate, int width, int height);
+ public void set_width (int width);
+ public static Grl.Media unserialize (string serial);
+ [CCode (cname = "grl_media_video_new", has_construct_function = false)]
+ public Media.video_new ();
+ [NoAccessorMethod]
+ public Grl.MediaType media_type { get; set construct; }
+ }
+ [CCode (cheader_filename = "grilo.h", type_id = "grl_operation_options_get_type ()")]
+ public class OperationOptions : GLib.Object {
+ [CCode (has_construct_function = false)]
+ public OperationOptions (Grl.Caps? caps);
+ public Grl.OperationOptions copy ();
+ public int get_count ();
+ public unowned GLib.Value? get_key_filter (Grl.KeyID key);
+ public GLib.List<weak Grl.KeyID> get_key_filter_list ();
+ public void get_key_range_filter (Grl.KeyID key, out GLib.Value min_value, out GLib.Value max_value);
+ public GLib.List<weak Grl.KeyID> get_key_range_filter_list ();
+ public Grl.ResolutionFlags get_resolution_flags ();
+ public uint get_skip ();
+ public Grl.TypeFilter get_type_filter ();
+ public bool key_is_set (string key);
+ public bool obey_caps (Grl.Caps caps, out Grl.OperationOptions supported_options, out Grl.OperationOptions unsupported_options);
+ public bool set_count (int count);
+ public bool set_key_filter_dictionary (GLib.HashTable<Grl.KeyID,GLib.Value?> filters);
+ public bool set_key_filter_value (Grl.KeyID key, GLib.Value value);
+ public bool set_key_range_filter_value (Grl.KeyID key, GLib.Value? min_value, GLib.Value? max_value);
+ public bool set_resolution_flags (Grl.ResolutionFlags flags);
+ public bool set_skip (uint skip);
+ public bool set_type_filter (Grl.TypeFilter filter);
+ }
+ [CCode (cheader_filename = "grilo.h", type_id = "grl_plugin_get_type ()")]
+ public class Plugin : GLib.Object {
+ [CCode (has_construct_function = false)]
+ protected Plugin ();
+ public unowned string get_author ();
+ public unowned string get_description ();
+ public unowned string get_filename ();
+ public unowned string get_id ();
+ public unowned string get_license ();
+ public unowned string get_module_name ();
+ public unowned string get_name ();
+ public unowned string get_site ();
+ public GLib.List<weak Grl.Source> get_sources ();
+ public unowned string get_version ();
+ public void register_keys ();
+ public void set_filename (string filename);
+ public void set_id (string id);
+ public void set_module (GLib.Module module);
+ public void set_module_name (string module_name);
+ public void unload ();
+ [NoAccessorMethod]
+ public bool loaded { get; }
+ }
+ [CCode (cheader_filename = "grilo.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "grl_range_value_get_type ()")]
+ [Compact]
+ public class RangeValue {
+ public GLib.Value max;
+ public GLib.Value min;
+ [CCode (has_construct_function = false)]
+ public RangeValue (GLib.Value min, GLib.Value max);
+ public Grl.RangeValue dup ();
+ public void free ();
+ public static void hashtable_insert (GLib.HashTable<void*,void*> hash_table, void* key, GLib.Value min, GLib.Value max);
+ public static GLib.HashTable<void*,Grl.RangeValue> hashtable_new ();
+ }
+ [CCode (cheader_filename = "grilo.h", type_id = "grl_registry_get_type ()")]
+ public class Registry : GLib.Object {
+ [CCode (has_construct_function = false)]
+ protected Registry ();
+ public bool activate_all_plugins ();
+ public bool activate_plugin_by_id (string plugin_id) throws GLib.Error;
+ public bool add_config (owned Grl.Config config) throws GLib.Error;
+ public bool add_config_from_file (string config_file) throws GLib.Error;
+ public bool add_config_from_resource (string resource_path) throws GLib.Error;
+ public void add_directory (string path);
+ public static unowned Grl.Registry get_default ();
+ public GLib.List<weak Grl.KeyID> get_metadata_keys ();
+ public GLib.List<weak Grl.Plugin> get_plugins (bool only_loaded);
+ public GLib.List<weak Grl.Source> get_sources (bool ranked);
+ public GLib.List<weak Grl.Source> get_sources_by_operations (Grl.SupportedOps ops, bool ranked);
+ public bool load_all_plugins (bool activate) throws GLib.Error;
+ public bool load_plugin (string library_filename) throws GLib.Error;
+ public bool load_plugin_directory (string path) throws GLib.Error;
+ public Grl.KeyID lookup_metadata_key (string key_name);
+ public unowned string lookup_metadata_key_desc (Grl.KeyID key);
+ public unowned string lookup_metadata_key_name (Grl.KeyID key);
+ public unowned GLib.List<Grl.KeyID> lookup_metadata_key_relation (Grl.KeyID key);
+ public GLib.Type lookup_metadata_key_type (Grl.KeyID key);
+ public unowned Grl.Plugin lookup_plugin (string plugin_id);
+ public unowned Grl.Source lookup_source (string source_id);
+ public bool metadata_key_validate (Grl.KeyID key, GLib.Value value);
+ public Grl.KeyID register_metadata_key (owned GLib.ParamSpec param_spec, Grl.KeyID bind_key) throws GLib.Error;
+ public Grl.KeyID register_metadata_key_system (GLib.ParamSpec param_spec, Grl.KeyID key, Grl.KeyID bind_key) throws GLib.Error;
+ public bool register_source (Grl.Plugin plugin, owned Grl.Source source) throws GLib.Error;
+ public void restrict_plugins (string plugins);
+ public void shutdown ();
+ public bool unload_plugin (string plugin_id) throws GLib.Error;
+ public bool unregister_source (Grl.Source source) throws GLib.Error;
+ public signal void metadata_key_added (string key);
+ public signal void source_added (Grl.Source source);
+ public signal void source_removed (Grl.Source source);
+ }
+ [CCode (cheader_filename = "grilo.h", type_id = "grl_related_keys_get_type ()")]
+ public class RelatedKeys : GLib.Object {
+ [CCode (has_construct_function = false)]
+ public RelatedKeys ();
+ public Grl.RelatedKeys dup ();
+ public unowned GLib.Value? @get (Grl.KeyID key);
+ public uint8 get_binary (Grl.KeyID key, out size_t size);
+ public bool get_boolean (Grl.KeyID key);
+ public void* get_boxed (Grl.KeyID key);
+ public float get_float (Grl.KeyID key);
+ public int get_int (Grl.KeyID key);
+ public int64 get_int64 (Grl.KeyID key);
+ public GLib.List<weak Grl.KeyID> get_keys ();
+ public unowned string get_string (Grl.KeyID key);
+ public bool has_key (Grl.KeyID key);
+ public void remove (Grl.KeyID key);
+ public void @set (Grl.KeyID key, GLib.Value value);
+ public void set_binary (Grl.KeyID key, uint8 buf, size_t size);
+ public void set_boolean (Grl.KeyID key, bool booleanvalue);
+ public void set_boxed (Grl.KeyID key, void* boxed);
+ public void set_float (Grl.KeyID key, float floatvalue);
+ public void set_int (Grl.KeyID key, int intvalue);
+ public void set_int64 (Grl.KeyID key, int64 intvalue);
+ public void set_string (Grl.KeyID key, string strvalue);
+ }
+ [CCode (cheader_filename = "grilo.h", type_id = "grl_source_get_type ()")]
+ public abstract class Source : GLib.Object {
+ [CCode (has_construct_function = false)]
+ protected Source ();
+ [NoWrapper]
+ public virtual void browse (Grl.SourceBrowseSpec bs);
+ public GLib.List<Grl.Media> browse_sync (Grl.Media? container, GLib.List<Grl.KeyID> keys, Grl.OperationOptions options) throws GLib.Error;
+ [NoWrapper]
+ public virtual void cancel (uint operation_id);
+ [CCode (cname = "grl_source_browse")]
+ public uint do_browse (Grl.Media? container, GLib.List<Grl.KeyID> keys, Grl.OperationOptions options, Grl.SourceResultCb callback);
+ [CCode (cname = "grl_source_query")]
+ public uint do_query (string query, GLib.List<Grl.KeyID> keys, Grl.OperationOptions options, Grl.SourceResultCb callback);
+ [CCode (cname = "grl_source_remove")]
+ public void do_remove (Grl.Media media, Grl.SourceRemoveCb callback);
+ [CCode (cname = "grl_source_resolve")]
+ public uint do_resolve (Grl.Media? media, GLib.List<Grl.KeyID> keys, Grl.OperationOptions options, Grl.SourceResolveCb callback);
+ [CCode (cname = "grl_source_search")]
+ public uint do_search (string text, GLib.List<Grl.KeyID> keys, Grl.OperationOptions options, Grl.SourceResultCb callback);
+ [CCode (cname = "grl_source_store")]
+ public void do_store (Grl.Media? parent, Grl.Media media, Grl.WriteFlags flags, Grl.SourceStoreCb callback);
+ [CCode (cname = "grl_source_store_metadata")]
+ public void do_store_metadata (Grl.Media media, GLib.List<Grl.KeyID>? keys, Grl.WriteFlags flags, Grl.SourceStoreCb callback);
+ public uint get_auto_split_threshold ();
+ public virtual unowned Grl.Caps get_caps (Grl.SupportedOps operation);
+ public unowned string get_description ();
+ public unowned GLib.Icon get_icon ();
+ public unowned string get_id ();
+ public uint get_media_from_uri (string uri, GLib.List<Grl.KeyID> keys, Grl.OperationOptions options, Grl.SourceResolveCb callback);
+ public Grl.Media get_media_from_uri_sync (string uri, GLib.List<Grl.KeyID> keys, Grl.OperationOptions options) throws GLib.Error;
+ public unowned string get_name ();
+ public unowned Grl.Plugin get_plugin ();
+ public int get_rank ();
+ public Grl.SupportedMedia get_supported_media ();
+ [CCode (cname = "grl_source_supported_operations")]
+ public uint get_supported_operations ();
+ [CCode (array_length = false, array_null_terminated = true)]
+ public unowned string[] get_tags ();
+ public virtual bool may_resolve (Grl.Media media, Grl.KeyID key_id, GLib.List<Grl.KeyID> missing_keys);
+ [NoWrapper]
+ public virtual void media_from_uri (Grl.SourceMediaFromUriSpec mfus);
+ public void notify_change (Grl.Media? media, Grl.SourceChangeType change_type, bool location_unknown);
+ public void notify_change_list (owned GLib.GenericArray<Grl.Media> changed_medias, Grl.SourceChangeType change_type, bool location_unknown);
+ public virtual bool notify_change_start () throws GLib.Error;
+ public virtual bool notify_change_stop () throws GLib.Error;
+ [NoWrapper]
+ public virtual void query (Grl.SourceQuerySpec qs);
+ public GLib.List<Grl.Media> query_sync (string query, GLib.List<Grl.KeyID> keys, Grl.OperationOptions options) throws GLib.Error;
+ [NoWrapper]
+ public virtual void remove (Grl.SourceRemoveSpec rs);
+ public void remove_sync (Grl.Media media) throws GLib.Error;
+ [NoWrapper]
+ public virtual void resolve (Grl.SourceResolveSpec ms);
+ public Grl.Media resolve_sync (Grl.Media? media, GLib.List<Grl.KeyID> keys, Grl.OperationOptions options) throws GLib.Error;
+ [NoWrapper]
+ public virtual void search (Grl.SourceSearchSpec ss);
+ public GLib.List<Grl.Media> search_sync (string text, GLib.List<Grl.KeyID> keys, Grl.OperationOptions options) throws GLib.Error;
+ public void set_auto_split_threshold (uint threshold);
+ public virtual unowned GLib.List<Grl.KeyID> slow_keys ();
+ [NoWrapper]
+ public virtual void store (Grl.SourceStoreSpec ss);
+ [NoWrapper]
+ public virtual void store_metadata (Grl.SourceStoreMetadataSpec sms);
+ public GLib.List<weak Grl.KeyID> store_metadata_sync (Grl.Media media, GLib.List<Grl.KeyID>? keys, Grl.WriteFlags flags) throws GLib.Error;
+ public void store_sync (Grl.Media? parent, Grl.Media media, Grl.WriteFlags flags) throws GLib.Error;
+ public virtual unowned GLib.List<Grl.KeyID> supported_keys ();
+ [NoWrapper]
+ public virtual Grl.SupportedOps supported_operations ();
+ public virtual bool test_media_from_uri (string uri);
+ public virtual unowned GLib.List<Grl.KeyID> writable_keys ();
+ public uint auto_split_threshold { get; set; }
+ [NoAccessorMethod]
+ public Grl.Plugin plugin { owned get; set construct; }
+ [NoAccessorMethod]
+ public int rank { get; set construct; }
+ [NoAccessorMethod]
+ public string source_desc { owned get; set construct; }
+ [NoAccessorMethod]
+ public GLib.Icon source_icon { owned get; set construct; }
+ [NoAccessorMethod]
+ public string source_id { owned get; set construct; }
+ [NoAccessorMethod]
+ public string source_name { owned get; set construct; }
+ [CCode (array_length = false, array_null_terminated = true)]
+ [NoAccessorMethod]
+ public string[] source_tags { owned get; set construct; }
+ [NoAccessorMethod]
+ public Grl.SupportedMedia supported_media { get; set construct; }
+ public signal void content_changed (GLib.GenericArray<Grl.Media> changed_medias, Grl.SourceChangeType change_type, bool location_unknown);
+ }
+ [CCode (cheader_filename = "grilo.h")]
+ [SimpleType]
+ public struct KeyID : uint32 {
+ }
+ [CCode (cheader_filename = "grilo.h")]
+ public struct MetadataKey {
+ [CCode (cname = "GRL_METADATA_KEY_INVALID")]
+ public static Grl.KeyID INVALID;
+ [CCode (cname = "GRL_METADATA_KEY_ALBUM")]
+ public static Grl.KeyID ALBUM;
+ [CCode (cname = "GRL_METADATA_KEY_ARTIST")]
+ public static Grl.KeyID ARTIST;
+ [CCode (cname = "GRL_METADATA_KEY_AUTHOR")]
+ public static Grl.KeyID AUTHOR;
+ [CCode (cname = "GRL_METADATA_KEY_BITRATE")]
+ public static Grl.KeyID BITRATE;
+ [CCode (cname = "GRL_METADATA_KEY_CERTIFICATE")]
+ public static Grl.KeyID CERTIFICATE;
+ [CCode (cname = "GRL_METADATA_KEY_CHILDCOUNT")]
+ public static Grl.KeyID CHILDCOUNT;
+ [CCode (cname = "GRL_METADATA_KEY_PUBLICATION_DATE")]
+ public static Grl.KeyID PUBLICATION_DATE;
+ [CCode (cname = "GRL_METADATA_KEY_DESCRIPTION")]
+ public static Grl.KeyID DESCRIPTION;
+ [CCode (cname = "GRL_METADATA_KEY_DURATION")]
+ public static Grl.KeyID DURATION;
+ [CCode (cname = "GRL_METADATA_KEY_EXTERNAL_PLAYER")]
+ public static Grl.KeyID EXTERNAL_PLAYER;
+ [CCode (cname = "GRL_METADATA_KEY_EXTERNAL_URL")]
+ public static Grl.KeyID EXTERNAL_URL;
+ [CCode (cname = "GRL_METADATA_KEY_FRAMERATE")]
+ public static Grl.KeyID FRAMERATE;
+ [CCode (cname = "GRL_METADATA_KEY_GENRE")]
+ public static Grl.KeyID GENRE;
+ [CCode (cname = "GRL_METADATA_KEY_HEIGHT")]
+ public static Grl.KeyID HEIGHT;
+ [CCode (cname = "GRL_METADATA_KEY_ID")]
+ public static Grl.KeyID ID;
+ [CCode (cname = "GRL_METADATA_KEY_LAST_PLAYED")]
+ public static Grl.KeyID LAST_PLAYED;
+ [CCode (cname = "GRL_METADATA_KEY_LAST_POSITION")]
+ public static Grl.KeyID LAST_POSITION;
+ [CCode (cname = "GRL_METADATA_KEY_LICENSE")]
+ public static Grl.KeyID LICENSE;
+ [CCode (cname = "GRL_METADATA_KEY_LYRICS")]
+ public static Grl.KeyID LYRICS;
+ [CCode (cname = "GRL_METADATA_KEY_MIME")]
+ public static Grl.KeyID MIME;
+ [CCode (cname = "GRL_METADATA_KEY_PLAY_COUNT")]
+ public static Grl.KeyID PLAY_COUNT;
+ [CCode (cname = "GRL_METADATA_KEY_RATING")]
+ public static Grl.KeyID RATING;
+ [CCode (cname = "GRL_METADATA_KEY_REGION")]
+ public static Grl.KeyID REGION;
+ [CCode (cname = "GRL_METADATA_KEY_SITE")]
+ public static Grl.KeyID SITE;
+ [CCode (cname = "GRL_METADATA_KEY_SOURCE")]
+ public static Grl.KeyID SOURCE;
+ [CCode (cname = "GRL_METADATA_KEY_STUDIO")]
+ public static Grl.KeyID STUDIO;
+ [CCode (cname = "GRL_METADATA_KEY_THUMBNAIL")]
+ public static Grl.KeyID THUMBNAIL;
+ [CCode (cname = "GRL_METADATA_KEY_THUMBNAIL_BINARY")]
+ public static Grl.KeyID THUMBNAIL_BINARY;
+ [CCode (cname = "GRL_METADATA_KEY_TITLE")]
+ public static Grl.KeyID TITLE;
+ [CCode (cname = "GRL_METADATA_KEY_URL")]
+ public static Grl.KeyID URL;
+ [CCode (cname = "GRL_METADATA_KEY_WIDTH")]
+ public static Grl.KeyID WIDTH;
+ [CCode (cname = "GRL_METADATA_KEY_SEASON")]
+ public static Grl.KeyID SEASON;
+ [CCode (cname = "GRL_METADATA_KEY_EPISODE")]
+ public static Grl.KeyID EPISODE;
+ [CCode (cname = "GRL_METADATA_KEY_EPISODE_TITLE")]
+ public static Grl.KeyID EPISODE_TITLE;
+ [CCode (cname = "GRL_METADATA_KEY_SHOW")]
+ public static Grl.KeyID SHOW;
+ [CCode (cname = "GRL_METADATA_KEY_CREATION_DATE")]
+ public static Grl.KeyID CREATION_DATE;
+ [CCode (cname = "GRL_METADATA_KEY_CAMERA_MODEL")]
+ public static Grl.KeyID CAMERA_MODEL;
+ [CCode (cname = "GRL_METADATA_KEY_ORIENTATION")]
+ public static Grl.KeyID ORIENTATION;
+ [CCode (cname = "GRL_METADATA_KEY_FLASH_USED")]
+ public static Grl.KeyID FLASH_USED;
+ [CCode (cname = "GRL_METADATA_KEY_EXPOSURE_TIME")]
+ public static Grl.KeyID EXPOSURE_TIME;
+ [CCode (cname = "GRL_METADATA_KEY_ISO_SPEED")]
+ public static Grl.KeyID ISO_SPEED;
+ [CCode (cname = "GRL_METADATA_KEY_TRACK_NUMBER")]
+ public static Grl.KeyID TRACK_NUMBER;
+ [CCode (cname = "GRL_METADATA_KEY_MODIFICATION_DATE")]
+ public static Grl.KeyID MODIFICATION_DATE;
+ [CCode (cname = "GRL_METADATA_KEY_START_TIME")]
+ public static Grl.KeyID START_TIME;
+ [CCode (cname = "GRL_METADATA_KEY_KEYWORD")]
+ public static Grl.KeyID KEYWORD;
+ [CCode (cname = "GRL_METADATA_KEY_PERFORMER")]
+ public static Grl.KeyID PERFORMER;
+ [CCode (cname = "GRL_METADATA_KEY_PRODUCER")]
+ public static Grl.KeyID PRODUCER;
+ [CCode (cname = "GRL_METADATA_KEY_DIRECTOR")]
+ public static Grl.KeyID DIRECTOR;
+ [CCode (cname = "GRL_METADATA_KEY_ORIGINAL_TITLE")]
+ public static Grl.KeyID ORIGINAL_TITLE;
+ [CCode (cname = "GRL_METADATA_KEY_MB_ALBUM_ID")]
+ public static Grl.KeyID MB_ALBUM_ID;
+ [CCode (cname = "GRL_METADATA_KEY_MB_TRACK_ID")]
+ public static Grl.KeyID MB_TRACK_ID;
+ [CCode (cname = "GRL_METADATA_KEY_MB_ARTIST_ID")]
+ public static Grl.KeyID MB_ARTIST_ID;
+ [CCode (cname = "GRL_METADATA_KEY_MB_RECORDING_ID")]
+ public static Grl.KeyID MB_RECORDING_ID;
+ [CCode (cname = "GRL_METADATA_KEY_AUDIO_TRACK")]
+ public static Grl.KeyID AUDIO_TRACK;
+ [CCode (cname = "GRL_METADATA_KEY_CHILDCOUNT_UNKNOWN")]
+ public static uint CHILDCOUNT_UNKNOWN;
+ [CCode (cname = "GRL_SOURCE_REMAINING_UNKNOWN")]
+ public static uint REMAINING_UNKNOWN;
+ public static GLib.List list_new (Grl.KeyID p, ...);
+ }
+ [CCode (cheader_filename = "grilo.h", has_type_id = false)]
+ public struct SourceBrowseSpec {
+ public weak Grl.Source source;
+ public uint operation_id;
+ public weak Grl.Media container;
+ public weak GLib.List<void*> keys;
+ public weak Grl.OperationOptions options;
+ [CCode (delegate_target_cname = "user_data")]
+ public weak Grl.SourceResultCb callback;
+ public void* user_data;
+ }
+ [CCode (cheader_filename = "grilo.h", has_type_id = false)]
+ public struct SourceMediaFromUriSpec {
+ public weak Grl.Source source;
+ public uint operation_id;
+ public weak string uri;
+ public weak GLib.List<void*> keys;
+ public weak Grl.OperationOptions options;
+ [CCode (delegate_target_cname = "user_data")]
+ public weak Grl.SourceResolveCb callback;
+ public void* user_data;
+ }
+ [CCode (cheader_filename = "grilo.h", has_type_id = false)]
+ public struct SourceQuerySpec {
+ public weak Grl.Source source;
+ public uint operation_id;
+ public weak string query;
+ public weak GLib.List<void*> keys;
+ public weak Grl.OperationOptions options;
+ [CCode (delegate_target_cname = "user_data")]
+ public weak Grl.SourceResultCb callback;
+ public void* user_data;
+ }
+ [CCode (cheader_filename = "grilo.h", has_type_id = false)]
+ public struct SourceRemoveSpec {
+ public weak Grl.Source source;
+ public weak string media_id;
+ public weak Grl.Media media;
+ [CCode (delegate_target_cname = "user_data")]
+ public weak Grl.SourceRemoveCb callback;
+ public void* user_data;
+ }
+ [CCode (cheader_filename = "grilo.h", has_type_id = false)]
+ public struct SourceResolveSpec {
+ public weak Grl.Source source;
+ public uint operation_id;
+ public weak Grl.Media media;
+ public weak GLib.List<void*> keys;
+ public weak Grl.OperationOptions options;
+ [CCode (delegate_target_cname = "user_data")]
+ public weak Grl.SourceResolveCb callback;
+ public void* user_data;
+ }
+ [CCode (cheader_filename = "grilo.h", has_type_id = false)]
+ public struct SourceSearchSpec {
+ public weak Grl.Source source;
+ public uint operation_id;
+ public weak string text;
+ public weak GLib.List<void*> keys;
+ public weak Grl.OperationOptions options;
+ [CCode (delegate_target_cname = "user_data")]
+ public weak Grl.SourceResultCb callback;
+ public void* user_data;
+ }
+ [CCode (cheader_filename = "grilo.h", has_type_id = false)]
+ public struct SourceStoreMetadataSpec {
+ public weak Grl.Source source;
+ public weak Grl.Media media;
+ public weak GLib.List<void*> keys;
+ public Grl.WriteFlags flags;
+ [CCode (delegate_target_cname = "user_data")]
+ public weak Grl.SourceStoreCb callback;
+ public void* user_data;
+ public weak GLib.List<void*> failed_keys;
+ }
+ [CCode (cheader_filename = "grilo.h", has_type_id = false)]
+ public struct SourceStoreSpec {
+ public weak Grl.Source source;
+ public weak Grl.Media parent;
+ public weak Grl.Media media;
+ [CCode (delegate_target_cname = "user_data")]
+ public weak Grl.SourceStoreCb callback;
+ public string user_data;
+ }
+ [CCode (cheader_filename = "grilo.h", cprefix = "GRL_CORE_ERROR_", has_type_id = false)]
+ public enum CoreError {
+ BROWSE_FAILED,
+ SEARCH_FAILED,
+ SEARCH_NULL_UNSUPPORTED,
+ QUERY_FAILED,
+ RESOLVE_FAILED,
+ MEDIA_NOT_FOUND,
+ STORE_FAILED,
+ STORE_METADATA_FAILED,
+ REMOVE_FAILED,
+ MEDIA_FROM_URI_FAILED,
+ CONFIG_LOAD_FAILED,
+ CONFIG_FAILED,
+ UNREGISTER_SOURCE_FAILED,
+ LOAD_PLUGIN_FAILED,
+ UNLOAD_PLUGIN_FAILED,
+ REGISTER_METADATA_KEY_FAILED,
+ NOTIFY_CHANGED_FAILED,
+ OPERATION_CANCELLED,
+ AUTHENTICATION_TOKEN
+ }
+ [CCode (cheader_filename = "grilo.h", cprefix = "GRL_LOG_LEVEL_", has_type_id = false)]
+ public enum LogLevel {
+ NONE,
+ ERROR,
+ WARNING,
+ MESSAGE,
+ INFO,
+ DEBUG,
+ LAST
+ }
+ [CCode (cheader_filename = "grilo.h", cprefix = "GRL_MEDIA_SERIALIZE_", type_id = "grl_media_serialize_type_get_type ()")]
+ public enum MediaSerializeType {
+ BASIC,
+ PARTIAL,
+ FULL
+ }
+ [CCode (cheader_filename = "grilo.h", cprefix = "GRL_MEDIA_TYPE_", type_id = "grl_media_type_get_type ()")]
+ public enum MediaType {
+ UNKNOWN,
+ AUDIO,
+ VIDEO,
+ IMAGE,
+ CONTAINER
+ }
+ [CCode (cheader_filename = "grilo.h", cprefix = "GRL_RANK_", has_type_id = false)]
+ public enum Rank {
+ LOWEST,
+ LOW,
+ DEFAULT,
+ HIGH,
+ HIGHEST
+ }
+ [CCode (cheader_filename = "grilo.h", cprefix = "GRL_RESOLVE_", type_id = "grl_resolution_flags_get_type ()")]
+ [Flags]
+ public enum ResolutionFlags {
+ NORMAL,
+ FULL,
+ IDLE_RELAY,
+ FAST_ONLY
+ }
+ [CCode (cheader_filename = "grilo.h", cprefix = "GRL_CONTENT_", type_id = "grl_source_change_type_get_type ()")]
+ public enum SourceChangeType {
+ CHANGED,
+ ADDED,
+ REMOVED
+ }
+ [CCode (cheader_filename = "grilo.h", cprefix = "GRL_SUPPORTED_MEDIA_", type_id = "grl_supported_media_get_type ()")]
+ [Flags]
+ public enum SupportedMedia {
+ NONE,
+ AUDIO,
+ VIDEO,
+ IMAGE,
+ ALL
+ }
+ [CCode (cheader_filename = "grilo.h", cprefix = "GRL_OP_", type_id = "grl_supported_ops_get_type ()")]
+ [Flags]
+ public enum SupportedOps {
+ NONE,
+ RESOLVE,
+ BROWSE,
+ SEARCH,
+ QUERY,
+ STORE,
+ STORE_PARENT,
+ STORE_METADATA,
+ REMOVE,
+ MEDIA_FROM_URI,
+ NOTIFY_CHANGE
+ }
+ [CCode (cheader_filename = "grilo.h", cprefix = "GRL_TYPE_FILTER_", type_id = "grl_type_filter_get_type ()")]
+ [Flags]
+ public enum TypeFilter {
+ NONE,
+ AUDIO,
+ VIDEO,
+ IMAGE,
+ ALL
+ }
+ [CCode (cheader_filename = "grilo.h", cprefix = "GRL_WRITE_", type_id = "grl_write_flags_get_type ()")]
+ [Flags]
+ public enum WriteFlags {
+ NORMAL,
+ FULL
+ }
+ [CCode (cheader_filename = "grilo.h", has_target = false)]
+ public delegate void OperationCancelCb (void* data);
+ [CCode (cheader_filename = "grilo.h", has_target = false)]
+ public delegate void PluginDeinitFunc (Grl.Plugin plugin);
+ [CCode (cheader_filename = "grilo.h", has_target = false)]
+ public delegate void PluginRegisterKeysFunc (Grl.Registry registry, Grl.Plugin plugin);
+ [CCode (cheader_filename = "grilo.h", instance_pos = 2.9)]
+ public delegate void SourceRemoveCb (Grl.Source source, owned Grl.Media media, GLib.Error? error);
+ [CCode (cheader_filename = "grilo.h", instance_pos = 3.9)]
+ public delegate void SourceResolveCb (Grl.Source source, uint operation_id, owned Grl.Media media, GLib.Error? error);
+ [CCode (cheader_filename = "grilo.h", instance_pos = 4.9)]
+ public delegate void SourceResultCb (Grl.Source source, uint operation_id, owned Grl.Media? media, uint remaining, GLib.Error? error);
+ [CCode (cheader_filename = "grilo.h", instance_pos = 3.9)]
+ public delegate void SourceStoreCb (Grl.Source source, owned Grl.Media media, GLib.List<Grl.KeyID> failed_keys, GLib.Error? error);
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_CONFIG_KEY_APIKEY")]
+ public const string CONFIG_KEY_APIKEY;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_CONFIG_KEY_APIKEY_BLOB")]
+ public const string CONFIG_KEY_APIKEY_BLOB;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_CONFIG_KEY_APISECRET")]
+ public const string CONFIG_KEY_APISECRET;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_CONFIG_KEY_APITOKEN")]
+ public const string CONFIG_KEY_APITOKEN;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_CONFIG_KEY_APITOKEN_SECRET")]
+ public const string CONFIG_KEY_APITOKEN_SECRET;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_CONFIG_KEY_PASSWORD")]
+ public const string CONFIG_KEY_PASSWORD;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_CONFIG_KEY_PLUGIN")]
+ public const string CONFIG_KEY_PLUGIN;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_CONFIG_KEY_SOURCE")]
+ public const string CONFIG_KEY_SOURCE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_CONFIG_KEY_USERNAME")]
+ public const string CONFIG_KEY_USERNAME;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_COUNT_INFINITY")]
+ public const int COUNT_INFINITY;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_KEYID_FORMAT")]
+ public const string KEYID_FORMAT;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_ALBUM")]
+ public const int METADATA_KEY_ALBUM;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_ARTIST")]
+ public const int METADATA_KEY_ARTIST;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_AUDIO_TRACK")]
+ public const int METADATA_KEY_AUDIO_TRACK;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_AUTHOR")]
+ public const int METADATA_KEY_AUTHOR;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_BITRATE")]
+ public const int METADATA_KEY_BITRATE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_CAMERA_MODEL")]
+ public const int METADATA_KEY_CAMERA_MODEL;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_CERTIFICATE")]
+ public const int METADATA_KEY_CERTIFICATE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_CHILDCOUNT")]
+ public const int METADATA_KEY_CHILDCOUNT;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_CHILDCOUNT_UNKNOWN")]
+ public const int METADATA_KEY_CHILDCOUNT_UNKNOWN;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_CREATION_DATE")]
+ public const int METADATA_KEY_CREATION_DATE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_DESCRIPTION")]
+ public const int METADATA_KEY_DESCRIPTION;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_DIRECTOR")]
+ public const int METADATA_KEY_DIRECTOR;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_DURATION")]
+ public const int METADATA_KEY_DURATION;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_EPISODE")]
+ public const int METADATA_KEY_EPISODE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_EPISODE_TITLE")]
+ public const int METADATA_KEY_EPISODE_TITLE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_EXPOSURE_TIME")]
+ public const int METADATA_KEY_EXPOSURE_TIME;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_EXTERNAL_PLAYER")]
+ public const int METADATA_KEY_EXTERNAL_PLAYER;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_EXTERNAL_URL")]
+ public const int METADATA_KEY_EXTERNAL_URL;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_FAVOURITE")]
+ public const int METADATA_KEY_FAVOURITE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_FLASH_USED")]
+ public const int METADATA_KEY_FLASH_USED;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_FRAMERATE")]
+ public const int METADATA_KEY_FRAMERATE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_GENRE")]
+ public const int METADATA_KEY_GENRE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_HEIGHT")]
+ public const int METADATA_KEY_HEIGHT;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_ID")]
+ public const int METADATA_KEY_ID;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_INVALID")]
+ public const int METADATA_KEY_INVALID;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_ISO_SPEED")]
+ public const int METADATA_KEY_ISO_SPEED;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_KEYWORD")]
+ public const int METADATA_KEY_KEYWORD;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_LAST_PLAYED")]
+ public const int METADATA_KEY_LAST_PLAYED;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_LAST_POSITION")]
+ public const int METADATA_KEY_LAST_POSITION;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_LICENSE")]
+ public const int METADATA_KEY_LICENSE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_LYRICS")]
+ public const int METADATA_KEY_LYRICS;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_MB_ALBUM_ID")]
+ public const int METADATA_KEY_MB_ALBUM_ID;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_MB_ARTIST_ID")]
+ public const int METADATA_KEY_MB_ARTIST_ID;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_MB_RECORDING_ID")]
+ public const int METADATA_KEY_MB_RECORDING_ID;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_MB_TRACK_ID")]
+ public const int METADATA_KEY_MB_TRACK_ID;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_MIME")]
+ public const int METADATA_KEY_MIME;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_MODIFICATION_DATE")]
+ public const int METADATA_KEY_MODIFICATION_DATE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_ORIENTATION")]
+ public const int METADATA_KEY_ORIENTATION;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_ORIGINAL_TITLE")]
+ public const int METADATA_KEY_ORIGINAL_TITLE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_PERFORMER")]
+ public const int METADATA_KEY_PERFORMER;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_PLAY_COUNT")]
+ public const int METADATA_KEY_PLAY_COUNT;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_PRODUCER")]
+ public const int METADATA_KEY_PRODUCER;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_PUBLICATION_DATE")]
+ public const int METADATA_KEY_PUBLICATION_DATE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_RATING")]
+ public const int METADATA_KEY_RATING;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_REGION")]
+ public const int METADATA_KEY_REGION;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_SEASON")]
+ public const int METADATA_KEY_SEASON;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_SHOW")]
+ public const int METADATA_KEY_SHOW;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_SITE")]
+ public const int METADATA_KEY_SITE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_SIZE")]
+ public const int METADATA_KEY_SIZE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_SOURCE")]
+ public const int METADATA_KEY_SOURCE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_START_TIME")]
+ public const int METADATA_KEY_START_TIME;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_STUDIO")]
+ public const int METADATA_KEY_STUDIO;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_THUMBNAIL")]
+ public const int METADATA_KEY_THUMBNAIL;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_THUMBNAIL_BINARY")]
+ public const int METADATA_KEY_THUMBNAIL_BINARY;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_TITLE")]
+ public const int METADATA_KEY_TITLE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_TITLE_FROM_FILENAME")]
+ public const int METADATA_KEY_TITLE_FROM_FILENAME;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_TRACK_NUMBER")]
+ public const int METADATA_KEY_TRACK_NUMBER;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_URL")]
+ public const int METADATA_KEY_URL;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_METADATA_KEY_WIDTH")]
+ public const int METADATA_KEY_WIDTH;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_OPERATION_OPTION_COUNT")]
+ public const string OPERATION_OPTION_COUNT;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_OPERATION_OPTION_KEY_EQUAL_FILTER")]
+ public const string OPERATION_OPTION_KEY_EQUAL_FILTER;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_OPERATION_OPTION_KEY_RANGE_FILTER")]
+ public const string OPERATION_OPTION_KEY_RANGE_FILTER;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_OPERATION_OPTION_RESOLUTION_FLAGS")]
+ public const string OPERATION_OPTION_RESOLUTION_FLAGS;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_OPERATION_OPTION_SKIP")]
+ public const string OPERATION_OPTION_SKIP;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_OPERATION_OPTION_TYPE_FILTER")]
+ public const string OPERATION_OPTION_TYPE_FILTER;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_PADDING")]
+ public const int PADDING;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_PADDING_SMALL")]
+ public const int PADDING_SMALL;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_PLUGIN_AUTHOR")]
+ public const string PLUGIN_AUTHOR;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_PLUGIN_DESCRIPTION")]
+ public const string PLUGIN_DESCRIPTION;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_PLUGIN_LICENSE")]
+ public const string PLUGIN_LICENSE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_PLUGIN_LIST_VAR")]
+ public const string PLUGIN_LIST_VAR;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_PLUGIN_NAME")]
+ public const string PLUGIN_NAME;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_PLUGIN_PATH_VAR")]
+ public const string PLUGIN_PATH_VAR;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_PLUGIN_RANKS_VAR")]
+ public const string PLUGIN_RANKS_VAR;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_PLUGIN_SITE")]
+ public const string PLUGIN_SITE;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_PLUGIN_VERSION")]
+ public const string PLUGIN_VERSION;
+ [CCode (cheader_filename = "grilo.h", cname = "GRL_SOURCE_REMAINING_UNKNOWN")]
+ public const int SOURCE_REMAINING_UNKNOWN;
+ [CCode (cheader_filename = "grilo.h")]
+ public static GLib.DateTime date_time_from_iso8601 (string date);
+ [CCode (cheader_filename = "grilo.h")]
+ public static void deinit ();
+ [CCode (cheader_filename = "grilo.h")]
+ public static GLib.Value? g_value_dup (GLib.Value value);
+ [CCode (cheader_filename = "grilo.h")]
+ public static void g_value_free (GLib.Value value);
+ [CCode (cheader_filename = "grilo.h")]
+ public static GLib.HashTable<string,GLib.Value?> g_value_hashtable_new ();
+ [CCode (cheader_filename = "grilo.h")]
+ public static GLib.HashTable<void*,GLib.Value?> g_value_hashtable_new_direct ();
+ [CCode (cheader_filename = "grilo.h")]
+ public static GLib.Value? g_value_new (GLib.Type g_type);
+ [CCode (cheader_filename = "grilo.h")]
+ public static void init ([CCode (array_length_cname = "argc", array_length_pos = 0.5)] ref unowned string[]? argv);
+ [CCode (cheader_filename = "grilo.h")]
+ public static GLib.OptionGroup init_get_option_group ();
+ [CCode (cheader_filename = "grilo.h")]
+ public static void log_configure (string config);
+ [CCode (cheader_filename = "grilo.h")]
+ public static void marshal_VOID__BOXED_ENUM_BOOLEAN (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data);
+ [CCode (cheader_filename = "grilo.h")]
+ public static unowned string metadata_key_get_desc (Grl.KeyID key);
+ [CCode (cheader_filename = "grilo.h")]
+ public static unowned string metadata_key_get_name (Grl.KeyID key);
+ [CCode (cheader_filename = "grilo.h")]
+ public static GLib.Type metadata_key_get_type (Grl.KeyID key);
+ [CCode (cheader_filename = "grilo.h")]
+ public static void metadata_key_setup_system_keys (Grl.Registry registry);
+ [CCode (cheader_filename = "grilo.h")]
+ public static void multiple_get_media_from_uri (string uri, GLib.List<Grl.KeyID> keys, Grl.OperationOptions options, Grl.SourceResolveCb callback);
+ [CCode (cheader_filename = "grilo.h")]
+ public static uint multiple_search (GLib.List<Grl.Source>? sources, string text, GLib.List<Grl.KeyID> keys, Grl.OperationOptions options, Grl.SourceResultCb callback);
+ [CCode (cheader_filename = "grilo.h")]
+ public static GLib.List<Grl.Media> multiple_search_sync (GLib.List<Grl.Source>? sources, string text, GLib.List<Grl.KeyID> keys, Grl.OperationOptions options) throws GLib.Error;
+ [CCode (cheader_filename = "grilo.h")]
+ public static void operation_cancel (uint operation_id);
+ [CCode (cheader_filename = "grilo.h")]
+ public static uint operation_generate_id ();
+ [CCode (cheader_filename = "grilo.h")]
+ public static void* operation_get_data (uint operation_id);
+ [CCode (cheader_filename = "grilo.h")]
+ public static void operation_init ();
+ [CCode (cheader_filename = "grilo.h")]
+ public static void operation_remove (uint operation_id);
+ [CCode (cheader_filename = "grilo.h")]
+ public static void operation_set_data (uint operation_id, void* user_data);
+ [CCode (cheader_filename = "grilo.h")]
+ public static void operation_set_data_full (uint operation_id, void* user_data, GLib.DestroyNotify? destroy_func);
+ [CCode (cheader_filename = "grilo.h")]
+ public static void operation_set_private_data (uint operation_id, void* private_data, [CCode (destroy_notify_pos = 3.1)] owned Grl.OperationCancelCb cancel_cb);
+ [CCode (cheader_filename = "grilo.h")]
+ public static void paging_translate (uint skip, uint count, uint max_page_size, uint page_size, uint page_number, uint internal_offset);
+}
--- /dev/null
+/* grilo-net-0.3.vapi generated by vapigen-0.30, do not modify. */
+
+[CCode (cprefix = "GrlNet", gir_namespace = "GrlNet", gir_version = "0.3", lower_case_cprefix = "grl_net_")]
+namespace GrlNet {
+ [CCode (cheader_filename = "net/grl-net.h", type_id = "grl_net_wc_get_type ()")]
+ public class Wc : GLib.Object {
+ [CCode (has_construct_function = false)]
+ public Wc ();
+ public static GLib.Quark error_quark ();
+ public void flush_delayed_requests ();
+ public async bool request_async (string uri, GLib.Cancellable? cancellable, out unowned string content, out size_t length) throws GLib.Error;
+ [CCode (finish_name = "grl_net_wc_request_finish")]
+ public async bool request_with_headers_async (string uri, GLib.Cancellable? cancellable, ..., out unowned string content, out size_t length) throws GLib.Error;
+ [CCode (finish_name = "grl_net_wc_request_finish")]
+ public async bool request_with_headers_hash_async (string uri, GLib.HashTable<string,string>? headers, GLib.Cancellable? cancellable, out unowned string content, out size_t length) throws GLib.Error;
+ public void set_cache (bool use_cache);
+ public void set_cache_size (uint cache_size);
+ public void set_log_level (uint log_level);
+ public void set_throttling (uint throttling);
+ [NoAccessorMethod]
+ public bool cache { get; set construct; }
+ [NoAccessorMethod]
+ public uint cache_size { get; set construct; }
+ [NoAccessorMethod]
+ public uint loglevel { get; set; }
+ [NoAccessorMethod]
+ public uint throttling { get; set; }
+ [NoAccessorMethod]
+ public string user_agent { owned get; set construct; }
+ }
+ [CCode (cheader_filename = "net/grl-net.h", cprefix = "GRL_NET_WC_ERROR_", has_type_id = false)]
+ public enum WcError {
+ UNAVAILABLE,
+ PROTOCOL_ERROR,
+ AUTHENTICATION_REQUIRED,
+ NOT_FOUND,
+ CONFLICT,
+ FORBIDDEN,
+ NETWORK_ERROR,
+ PROXY_ERROR,
+ CANCELLED
+ }
+}
include $(TOPDIR)/rules.mk
PKG_NAME:=gst1-libav
-PKG_VERSION:=1.4.5
+PKG_VERSION:=1.6.2
PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
PKG_SOURCE:=gst-libav-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gst-libav
-PKG_MD5SUM:=f4922a46adbcbe7bd01331ff5dc7979d
+PKG_MD5SUM:=09644a38827d233f53edeac815dd0ec0
PKG_LICENSE:=GPL-2.0 LGPL-2.0
PKG_LICENSE_FILES:=COPYING COPYING.LIB
include $(TOPDIR)/rules.mk
PKG_NAME:=gst1-plugins-bad
-PKG_VERSION:=1.4.5
-PKG_RELEASE:=2
+PKG_VERSION:=1.6.2
+PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
PKG_BUILD_DIR:=$(BUILD_DIR)/gst-plugins-bad-$(PKG_VERSION)
PKG_SOURCE:=gst-plugins-bad-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gst-plugins-bad/
-PKG_MD5SUM:=e0bb39412cf4a48fe0397bcf3a7cd451
+PKG_MD5SUM:=7c73bec1d389f0e184ebbbbb9e9f883d
PKG_BUILD_DEPENDS:= libgstreamer1 gstreamer1-plugins-base
--disable-resindvd \
--disable-faac \
--disable-faad \
- --disable-fbdev \
--disable-flite \
--disable-gsm \
--disable-kate \
$(eval $(call GstBuildPlugin,dataurisrc,dataurisrc support,,,))
$(eval $(call GstBuildPlugin,debugutilsbad,debugutils support,video,,))
$(eval $(call GstBuildPlugin,dvdspu,dvdspu support,video,,))
+$(eval $(call GstBuildPlugin,fbdevsink,fbdev support,video,,))
$(eval $(call GstBuildPlugin,festival,festival support,audio,,))
$(eval $(call GstBuildPlugin,frei0r,frei0r support,controller video,,))
$(eval $(call GstBuildPlugin,id3tag,id3tag support,tag,,))
+++ /dev/null
---- a/configure.ac
-+++ b/configure.ac
-@@ -3334,7 +3334,6 @@ ext/timidity/Makefile
- ext/webp/Makefile
- ext/xvid/Makefile
- ext/zbar/Makefile
--po/Makefile.in
- docs/Makefile
- docs/plugins/Makefile
- docs/libs/Makefile
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -2,11 +2,11 @@ DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-d
-
- SUBDIRS = \
- gst-libs gst sys ext pkgconfig \
-- m4 common docs tests po tools
-+ m4 common docs tests tools
-
- DIST_SUBDIRS = \
- gst gst-libs sys ext pkgconfig \
-- m4 common docs tests po tools
-+ m4 common docs tests tools
-
- # include before EXTRA_DIST for win32 assignment
- include $(top_srcdir)/common/win32.mak
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -739,11 +739,11 @@ wayland_scanner = @wayland_scanner@
- DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
- SUBDIRS = \
- gst-libs gst sys ext pkgconfig \
-- m4 common docs tests po tools
-+ m4 common docs tests tools
-
- DIST_SUBDIRS = \
- gst gst-libs sys ext pkgconfig \
-- m4 common docs tests po tools
-+ m4 common docs tests tools
-
-
- # the MANIFEST contains all win32 related files that should be disted
--- /dev/null
+diff -u --recursive gst-plugins-bad-1.6.2-vanilla/configure.ac gst-plugins-bad-1.6.2/configure.ac
+--- gst-plugins-bad-1.6.2-vanilla/configure.ac 2016-01-01 10:40:17.883755147 -0500
++++ gst-plugins-bad-1.6.2/configure.ac 2016-01-01 10:41:14.832426692 -0500
+@@ -3455,7 +3455,6 @@
+ ext/xvid/Makefile
+ ext/zbar/Makefile
+ ext/dtls/Makefile
+-po/Makefile.in
+ docs/Makefile
+ docs/plugins/Makefile
+ docs/libs/Makefile
+diff -u --recursive gst-plugins-bad-1.6.2-vanilla/Makefile.am gst-plugins-bad-1.6.2/Makefile.am
+--- gst-plugins-bad-1.6.2-vanilla/Makefile.am 2016-01-01 10:40:17.883755147 -0500
++++ gst-plugins-bad-1.6.2/Makefile.am 2016-01-01 10:41:47.607858580 -0500
+@@ -2,11 +2,11 @@
+
+ SUBDIRS = \
+ gst-libs gst sys ext pkgconfig \
+- m4 common docs tests po tools
++ m4 common docs tests tools
+
+ DIST_SUBDIRS = \
+ gst gst-libs sys ext pkgconfig \
+- m4 common docs tests po tools
++ m4 common docs tests tools
+
+ # include before EXTRA_DIST for win32 assignment
+ include $(top_srcdir)/common/win32.mak
--- /dev/null
+diff -u --recursive gst-plugins-bad-1.6.2-vanilla/configure.ac gst-plugins-bad-1.6.2/configure.ac
+--- gst-plugins-bad-1.6.2-vanilla/configure.ac 2016-01-01 11:58:54.503551141 -0500
++++ gst-plugins-bad-1.6.2/configure.ac 2016-01-01 11:50:38.388185503 -0500
+@@ -3355,37 +3355,6 @@
+ sys/wininet/Makefile
+ sys/winks/Makefile
+ sys/winscreencap/Makefile
+-tests/Makefile
+-tests/check/Makefile
+-tests/files/Makefile
+-tests/examples/Makefile
+-tests/examples/avsamplesink/Makefile
+-tests/examples/camerabin2/Makefile
+-tests/examples/codecparsers/Makefile
+-tests/examples/directfb/Makefile
+-tests/examples/gl/Makefile
+-tests/examples/gl/cocoa/Makefile
+-tests/examples/gl/clutter/Makefile
+-tests/examples/gl/generic/Makefile
+-tests/examples/gl/generic/cube/Makefile
+-tests/examples/gl/generic/cubeyuv/Makefile
+-tests/examples/gl/generic/doublecube/Makefile
+-tests/examples/gl/generic/recordgraphic/Makefile
+-tests/examples/gl/gtk/Makefile
+-tests/examples/gl/gtk/gtkvideooverlay/Makefile
+-tests/examples/gl/gtk/3dvideo/Makefile
+-tests/examples/gl/gtk/filternovideooverlay/Makefile
+-tests/examples/gl/gtk/filtervideooverlay/Makefile
+-tests/examples/gl/gtk/fxtest/Makefile
+-tests/examples/gl/gtk/switchvideooverlay/Makefile
+-tests/examples/gl/qt/Makefile
+-tests/examples/gl/sdl/Makefile
+-tests/examples/gtk/Makefile
+-tests/examples/mpegts/Makefile
+-tests/examples/mxf/Makefile
+-tests/examples/opencv/Makefile
+-tests/examples/uvch264/Makefile
+-tests/icles/Makefile
+ ext/voamrwbenc/Makefile
+ ext/voaacenc/Makefile
+ ext/assrender/Makefile
+diff -u --recursive gst-plugins-bad-1.6.2-vanilla/Makefile.am gst-plugins-bad-1.6.2/Makefile.am
+--- gst-plugins-bad-1.6.2-vanilla/Makefile.am 2016-01-01 11:58:54.504551169 -0500
++++ gst-plugins-bad-1.6.2/Makefile.am 2016-01-01 11:50:06.848314203 -0500
+@@ -2,11 +2,11 @@
+
+ SUBDIRS = \
+ gst-libs gst sys ext pkgconfig \
+- m4 common docs tests tools
++ m4 common docs tools
+
+ DIST_SUBDIRS = \
+ gst gst-libs sys ext pkgconfig \
+- m4 common docs tests tools
++ m4 common docs tools
+
+ # include before EXTRA_DIST for win32 assignment
+ include $(top_srcdir)/common/win32.mak
include $(TOPDIR)/rules.mk
PKG_NAME:=gst1-plugins-base
-PKG_VERSION:=1.4.5
+PKG_VERSION:=1.6.2
PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
PKG_BUILD_DIR:=$(BUILD_DIR)/gst-plugins-base-$(PKG_VERSION)
PKG_SOURCE:=gst-plugins-base-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gst-plugins-base/
-PKG_MD5SUM:=357165af625c0ca353ab47c5d843920e
+PKG_MD5SUM:=f530fbbe287edce79c55a37bd1a39fe2
PKG_BUILD_DEPENDS:= libgstreamer1
PKG_CONFIG_DEPENDS:= \
$(eval $(call GstBuildPlugin,playback,media decoder (v2),pbutils,,))
$(eval $(call GstBuildPlugin,gio,GIO,,,))
$(eval $(call GstBuildPlugin,ogg,Ogg,riff tag pbutils video,,+libogg))
-$(eval $(call GstBuildPlugin,tcp,TCP,,,))
+$(eval $(call GstBuildPlugin,tcp,TCP,net,,))
$(eval $(call GstBuildPlugin,theora,Theora,tag video,,+libogg +libtheora))
$(eval $(call GstBuildPlugin,typefindfunctions,'typefind' functions,audio pbutils tag video,,))
$(eval $(call GstBuildPlugin,videoconvert,video format conversion,video,,))
--- /dev/null
+diff -u --recursive gst-plugins-base-1.6.2-vanilla/configure.ac gst-plugins-base-1.6.2/configure.ac
+--- gst-plugins-base-1.6.2-vanilla/configure.ac 2016-01-01 10:40:17.931759357 -0500
++++ gst-plugins-base-1.6.2/configure.ac 2016-01-01 10:43:44.374351388 -0500
+@@ -921,7 +921,6 @@
+ docs/libs/Makefile
+ docs/plugins/Makefile
+ docs/version.entities
+-po/Makefile.in
+ common/Makefile
+ common/m4/Makefile
+ m4/Makefile
+diff -u --recursive gst-plugins-base-1.6.2-vanilla/Makefile.am gst-plugins-base-1.6.2/Makefile.am
+--- gst-plugins-base-1.6.2-vanilla/Makefile.am 2016-01-01 10:40:17.931759357 -0500
++++ gst-plugins-base-1.6.2/Makefile.am 2016-01-01 10:44:17.403209313 -0500
+@@ -13,7 +13,6 @@
+ tools \
+ tests \
+ docs \
+- po \
+ common \
+ m4
+
+@@ -24,7 +23,6 @@
+ gst sys ext \
+ tools \
+ tests \
+- po \
+ common \
+ m4
+
+++ /dev/null
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -12,14 +12,12 @@ SUBDIRS = \
- gst sys $(SUBDIRS_EXT) \
- tools \
- tests \
-- docs \
- po \
- common \
- m4
-
- DIST_SUBDIRS = \
- pkgconfig \
-- docs \
- gst-libs \
- gst sys ext \
- tools \
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -539,14 +539,12 @@ SUBDIRS = \
- gst sys $(SUBDIRS_EXT) \
- tools \
- tests \
-- docs \
- po \
- common \
- m4
-
- DIST_SUBDIRS = \
- pkgconfig \
-- docs \
- gst-libs \
- gst sys ext \
- tools \
--- /dev/null
+diff -u --recursive gst-plugins-base-1.6.2-vanilla/configure.ac gst-plugins-base-1.6.2/configure.ac
+--- gst-plugins-base-1.6.2-vanilla/configure.ac 2016-01-01 12:00:43.489564691 -0500
++++ gst-plugins-base-1.6.2/configure.ac 2016-01-01 12:02:24.452371618 -0500
+@@ -899,23 +899,6 @@
+ pkgconfig/gstreamer-video-uninstalled.pc
+ pkgconfig/gstreamer-plugins-base.pc
+ pkgconfig/gstreamer-plugins-base-uninstalled.pc
+-tests/Makefile
+-tests/check/Makefile
+-tests/examples/Makefile
+-tests/examples/app/Makefile
+-tests/examples/audio/Makefile
+-tests/examples/dynamic/Makefile
+-tests/examples/encoding/Makefile
+-tests/examples/fft/Makefile
+-tests/examples/gio/Makefile
+-tests/examples/overlay/Makefile
+-tests/examples/seek/Makefile
+-tests/examples/snapshot/Makefile
+-tests/examples/playback/Makefile
+-tests/examples/playrec/Makefile
+-tests/files/Makefile
+-tests/icles/Makefile
+-tests/icles/playback/Makefile
+ docs/Makefile
+ docs/design/Makefile
+ docs/libs/Makefile
+diff -u --recursive gst-plugins-base-1.6.2-vanilla/Makefile.am gst-plugins-base-1.6.2/Makefile.am
+--- gst-plugins-base-1.6.2-vanilla/Makefile.am 2016-01-01 12:00:43.489564691 -0500
++++ gst-plugins-base-1.6.2/Makefile.am 2016-01-01 12:01:54.055525170 -0500
+@@ -11,7 +11,6 @@
+ gst-libs \
+ gst sys $(SUBDIRS_EXT) \
+ tools \
+- tests \
+ docs \
+ common \
+ m4
+@@ -22,7 +21,6 @@
+ gst-libs \
+ gst sys ext \
+ tools \
+- tests \
+ common \
+ m4
+
+++ /dev/null
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -11,7 +11,6 @@ SUBDIRS = \
- gst-libs \
- gst sys $(SUBDIRS_EXT) \
- tools \
-- tests \
- po \
- common \
- m4
-@@ -21,7 +20,6 @@ DIST_SUBDIRS = \
- gst-libs \
- gst sys ext \
- tools \
-- tests \
- po \
- common \
- m4
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -538,7 +538,6 @@ SUBDIRS = \
- gst-libs \
- gst sys $(SUBDIRS_EXT) \
- tools \
-- tests \
- po \
- common \
- m4
-@@ -548,7 +547,6 @@ DIST_SUBDIRS = \
- gst-libs \
- gst sys ext \
- tools \
-- tests \
- po \
- common \
- m4
--- /dev/null
+diff -u --recursive gst-plugins-base-1.6.2-vanilla/configure.ac gst-plugins-base-1.6.2/configure.ac
+--- gst-plugins-base-1.6.2-vanilla/configure.ac 2016-01-01 12:10:41.158319142 -0500
++++ gst-plugins-base-1.6.2/configure.ac 2016-01-01 12:07:36.271107197 -0500
+@@ -899,11 +899,6 @@
+ pkgconfig/gstreamer-video-uninstalled.pc
+ pkgconfig/gstreamer-plugins-base.pc
+ pkgconfig/gstreamer-plugins-base-uninstalled.pc
+-docs/Makefile
+-docs/design/Makefile
+-docs/libs/Makefile
+-docs/plugins/Makefile
+-docs/version.entities
+ common/Makefile
+ common/m4/Makefile
+ m4/Makefile
+diff -u --recursive gst-plugins-base-1.6.2-vanilla/Makefile.am gst-plugins-base-1.6.2/Makefile.am
+--- gst-plugins-base-1.6.2-vanilla/Makefile.am 2016-01-01 12:10:41.159319170 -0500
++++ gst-plugins-base-1.6.2/Makefile.am 2016-01-01 12:07:32.869011473 -0500
+@@ -11,13 +11,11 @@
+ gst-libs \
+ gst sys $(SUBDIRS_EXT) \
+ tools \
+- docs \
+ common \
+ m4
+
+ DIST_SUBDIRS = \
+ pkgconfig \
+- docs \
+ gst-libs \
+ gst sys ext \
+ tools \
+++ /dev/null
---- a/configure.ac
-+++ b/configure.ac
-@@ -918,7 +918,6 @@ docs/design/Makefile
- docs/libs/Makefile
- docs/plugins/Makefile
- docs/version.entities
--po/Makefile.in
- common/Makefile
- common/m4/Makefile
- m4/Makefile
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -11,7 +11,6 @@ SUBDIRS = \
- gst-libs \
- gst sys $(SUBDIRS_EXT) \
- tools \
-- po \
- common \
- m4
-
-@@ -20,7 +19,6 @@ DIST_SUBDIRS = \
- gst-libs \
- gst sys ext \
- tools \
-- po \
- common \
- m4
-
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -538,7 +538,6 @@ SUBDIRS = \
- gst-libs \
- gst sys $(SUBDIRS_EXT) \
- tools \
-- po \
- common \
- m4
-
-@@ -547,7 +546,6 @@ DIST_SUBDIRS = \
- gst-libs \
- gst sys ext \
- tools \
-- po \
- common \
- m4
-
include $(TOPDIR)/rules.mk
PKG_NAME:=gst1-plugins-good
-PKG_VERSION:=1.4.5
-PKG_RELEASE:=2
+PKG_VERSION:=1.6.2
+PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
PKG_BUILD_DIR:=$(BUILD_DIR)/gst-plugins-good-$(PKG_VERSION)
PKG_SOURCE:=gst-plugins-good-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gst-plugins-good/
-PKG_MD5SUM:=eaf1a6daf73749bc423feac301d60038
+PKG_MD5SUM:=ef4f5bc4f31f706832a234b0f603967b
PKG_BUILD_DEPENDS:= libgstreamer1 gstreamer1-plugins-base
$(eval $(call GstBuildPlugin,flv,flv codec,audio pbutils tag video,,))
$(eval $(call GstBuildPlugin,flxdec,flx codec,,,))
#$(eval $(call GstBuildPlugin,gdkpixbuf,gdkpixbuf support,video,,))
-$(eval $(call GstBuildPlugin,goom2k1,goom support,,,))
-$(eval $(call GstBuildPlugin,goom,goom support,,,))
+$(eval $(call GstBuildPlugin,goom2k1,goom support,audio video,,))
+$(eval $(call GstBuildPlugin,goom,goom support,audio video,,))
$(eval $(call GstBuildPlugin,icydemux,icy demuxer,audio tag,,))
$(eval $(call GstBuildPlugin,id3demux,ID3v1/v2 demuxer,pbutils tag,,))
$(eval $(call GstBuildPlugin,imagefreeze,imagefreeze support,,,))
--- /dev/null
+diff -u --recursive gst-plugins-good-1.6.2-vanilla/configure.ac gst-plugins-good-1.6.2/configure.ac
+--- gst-plugins-good-1.6.2-vanilla/configure.ac 2016-01-01 10:40:17.994764882 -0500
++++ gst-plugins-good-1.6.2/configure.ac 2016-01-01 10:45:25.668599823 -0500
+@@ -1014,7 +1014,6 @@
+ sys/v4l2/Makefile
+ sys/waveform/Makefile
+ sys/ximage/Makefile
+-po/Makefile.in
+ tests/Makefile
+ tests/check/Makefile
+ tests/examples/Makefile
+diff -u --recursive gst-plugins-good-1.6.2-vanilla/Makefile.am gst-plugins-good-1.6.2/Makefile.am
+--- gst-plugins-good-1.6.2-vanilla/Makefile.am 2016-01-01 10:40:17.994764882 -0500
++++ gst-plugins-good-1.6.2/Makefile.am 2016-01-01 10:45:19.923089598 -0500
+@@ -4,7 +4,6 @@
+ gst sys ext \
+ tests \
+ docs \
+- po \
+ common \
+ m4 \
+ pkgconfig
+++ /dev/null
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -3,7 +3,6 @@ DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-d
- ALWAYS_SUBDIRS = \
- gst sys ext \
- tests \
-- docs \
- po \
- common \
- m4 \
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -571,7 +571,6 @@ DISTCHECK_CONFIGURE_FLAGS = --enable-gtk
- ALWAYS_SUBDIRS = \
- gst sys ext \
- tests \
-- docs \
- po \
- common \
- m4 \
--- /dev/null
+diff -u --recursive gst-plugins-good-1.6.2-vanilla/configure.ac gst-plugins-good-1.6.2/configure.ac
+--- gst-plugins-good-1.6.2-vanilla/configure.ac 2016-01-01 12:00:52.525815362 -0500
++++ gst-plugins-good-1.6.2/configure.ac 2016-01-01 12:03:22.198982586 -0500
+@@ -1014,21 +1014,6 @@
+ sys/v4l2/Makefile
+ sys/waveform/Makefile
+ sys/ximage/Makefile
+-tests/Makefile
+-tests/check/Makefile
+-tests/examples/Makefile
+-tests/examples/audiofx/Makefile
+-tests/examples/cairo/Makefile
+-tests/examples/equalizer/Makefile
+-tests/examples/jack/Makefile
+-tests/examples/level/Makefile
+-tests/examples/pulse/Makefile
+-tests/examples/rtp/Makefile
+-tests/examples/shapewipe/Makefile
+-tests/examples/spectrum/Makefile
+-tests/examples/v4l2/Makefile
+-tests/files/Makefile
+-tests/icles/Makefile
+ common/Makefile
+ common/m4/Makefile
+ m4/Makefile
+diff -u --recursive gst-plugins-good-1.6.2-vanilla/Makefile.am gst-plugins-good-1.6.2/Makefile.am
+--- gst-plugins-good-1.6.2-vanilla/Makefile.am 2016-01-01 12:00:52.525815362 -0500
++++ gst-plugins-good-1.6.2/Makefile.am 2016-01-01 12:03:06.921556033 -0500
+@@ -2,7 +2,6 @@
+
+ ALWAYS_SUBDIRS = \
+ gst sys ext \
+- tests \
+ docs \
+ common \
+ m4 \
+++ /dev/null
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -2,7 +2,6 @@ DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-d
-
- ALWAYS_SUBDIRS = \
- gst sys ext \
-- tests \
- po \
- common \
- m4 \
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -570,7 +570,6 @@ top_srcdir = @top_srcdir@
- DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
- ALWAYS_SUBDIRS = \
- gst sys ext \
-- tests \
- po \
- common \
- m4 \
--- /dev/null
+diff -u --recursive gst-plugins-good-1.6.2-vanilla/configure.ac gst-plugins-good-1.6.2/configure.ac
+--- gst-plugins-good-1.6.2-vanilla/configure.ac 2016-01-01 12:10:51.392608142 -0500
++++ gst-plugins-good-1.6.2/configure.ac 2016-01-01 12:08:39.568889466 -0500
+@@ -1017,9 +1017,6 @@
+ common/Makefile
+ common/m4/Makefile
+ m4/Makefile
+-docs/Makefile
+-docs/plugins/Makefile
+-docs/version.entities
+ pkgconfig/Makefile
+ pkgconfig/gstreamer-plugins-good-uninstalled.pc
+ gst-plugins-good.spec
+diff -u --recursive gst-plugins-good-1.6.2-vanilla/Makefile.am gst-plugins-good-1.6.2/Makefile.am
+--- gst-plugins-good-1.6.2-vanilla/Makefile.am 2016-01-01 12:10:51.393608170 -0500
++++ gst-plugins-good-1.6.2/Makefile.am 2016-01-01 12:08:35.442773216 -0500
+@@ -2,7 +2,6 @@
+
+ ALWAYS_SUBDIRS = \
+ gst sys ext \
+- docs \
+ common \
+ m4 \
+ pkgconfig
+++ /dev/null
---- a/configure.ac
-+++ b/configure.ac
-@@ -1083,7 +1083,6 @@ sys/sunaudio/Makefile
- sys/v4l2/Makefile
- sys/waveform/Makefile
- sys/ximage/Makefile
--po/Makefile.in
- tests/Makefile
- tests/check/Makefile
- tests/examples/Makefile
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -2,7 +2,6 @@ DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-d
-
- ALWAYS_SUBDIRS = \
- gst sys ext \
-- po \
- common \
- m4 \
- pkgconfig
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -570,7 +570,6 @@ top_srcdir = @top_srcdir@
- DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
- ALWAYS_SUBDIRS = \
- gst sys ext \
-- po \
- common \
- m4 \
- pkgconfig
include $(TOPDIR)/rules.mk
PKG_NAME:=gst1-plugins-ugly
-PKG_VERSION:=1.4.5
+PKG_VERSION:=1.6.2
PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
PKG_BUILD_DIR:=$(BUILD_DIR)/gst-plugins-ugly-$(PKG_VERSION)
PKG_SOURCE:=gst-plugins-ugly-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gst-plugins-ugly/
-PKG_MD5SUM:=6954beed7bb9a93e426dee543ff46393
+PKG_MD5SUM:=0f0e30336e3155443cd5bfec5c215d56
PKG_BUILD_DEPENDS:= libgstreamer1 gstreamer1-plugins-base
PKG_CONFIG_DEPENDS:= \
$$(eval $$(call BuildPackage,gst1-mod-$(1)))
endef
-$(eval $(call GstBuildPlugin,asf,ASF demuxer,audio riff rtp rtsp sdp tag,,))
+$(eval $(call GstBuildPlugin,asf,ASF demuxer,audio video riff rtp rtsp sdp tag,,))
$(eval $(call GstBuildPlugin,lame,MP3 encoder (using LAME),audio,,+lame-lib))
$(eval $(call GstBuildPlugin,mad,MP3 decoder (using MAD),audio tag,,+libid3tag +libmad))
$(eval $(call GstBuildPlugin,mpeg2dec,MPEG decoder,video,,+libmpeg2))
--- /dev/null
+diff -u --recursive gst-plugins-ugly-1.6.2-vanilla/configure.ac gst-plugins-ugly-1.6.2/configure.ac
+--- gst-plugins-ugly-1.6.2-vanilla/configure.ac 2016-01-01 10:47:06.333623730 -0500
++++ gst-plugins-ugly-1.6.2/configure.ac 2016-01-01 10:47:20.211613708 -0500
+@@ -470,7 +470,6 @@
+ tests/Makefile
+ tests/check/Makefile
+ m4/Makefile
+-po/Makefile.in
+ pkgconfig/Makefile
+ pkgconfig/gstreamer-plugins-ugly-uninstalled.pc
+ gst-plugins-ugly.spec
+diff -u --recursive gst-plugins-ugly-1.6.2-vanilla/Makefile.am gst-plugins-ugly-1.6.2/Makefile.am
+--- gst-plugins-ugly-1.6.2-vanilla/Makefile.am 2016-01-01 10:47:06.333623730 -0500
++++ gst-plugins-ugly-1.6.2/Makefile.am 2016-01-01 10:47:14.523210855 -0500
+@@ -1,7 +1,7 @@
+ DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc
+
+ SUBDIRS = \
+- gst-libs gst ext docs m4 tests common pkgconfig po
++ gst-libs gst ext docs m4 tests common pkgconfig
+
+ # include before EXTRA_DIST for win32 assignment
+ include $(top_srcdir)/common/win32.mak
+++ /dev/null
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -1,7 +1,7 @@
- DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc
-
- SUBDIRS = \
-- gst-libs gst ext docs m4 tests common pkgconfig po
-+ gst-libs gst ext m4 tests common pkgconfig po
-
- # include before EXTRA_DIST for win32 assignment
- include $(top_srcdir)/common/win32.mak
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -502,7 +502,7 @@ top_builddir = @top_builddir@
- top_srcdir = @top_srcdir@
- DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
- SUBDIRS = \
-- gst-libs gst ext docs m4 tests common pkgconfig po
-+ gst-libs gst ext m4 tests common pkgconfig po
-
-
- # the MANIFEST contains all win32 related files that should be disted
--- /dev/null
+diff -u --recursive gst-plugins-ugly-1.6.2-vanilla/configure.ac gst-plugins-ugly-1.6.2/configure.ac
+--- gst-plugins-ugly-1.6.2-vanilla/configure.ac 2016-01-01 12:01:01.547065731 -0500
++++ gst-plugins-ugly-1.6.2/configure.ac 2016-01-01 12:04:18.111545715 -0500
+@@ -467,8 +467,6 @@
+ docs/Makefile
+ docs/plugins/Makefile
+ docs/version.entities
+-tests/Makefile
+-tests/check/Makefile
+ m4/Makefile
+ pkgconfig/Makefile
+ pkgconfig/gstreamer-plugins-ugly-uninstalled.pc
+diff -u --recursive gst-plugins-ugly-1.6.2-vanilla/Makefile.am gst-plugins-ugly-1.6.2/Makefile.am
+--- gst-plugins-ugly-1.6.2-vanilla/Makefile.am 2016-01-01 12:01:01.547065731 -0500
++++ gst-plugins-ugly-1.6.2/Makefile.am 2016-01-01 12:04:12.087377153 -0500
+@@ -1,7 +1,7 @@
+ DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc
+
+ SUBDIRS = \
+- gst-libs gst ext docs m4 tests common pkgconfig
++ gst-libs gst ext docs m4 common pkgconfig
+
+ # include before EXTRA_DIST for win32 assignment
+ include $(top_srcdir)/common/win32.mak
+++ /dev/null
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -1,7 +1,7 @@
- DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc
-
- SUBDIRS = \
-- gst-libs gst ext m4 tests common pkgconfig po
-+ gst-libs gst ext m4 common pkgconfig po
-
- # include before EXTRA_DIST for win32 assignment
- include $(top_srcdir)/common/win32.mak
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -502,7 +502,7 @@ top_builddir = @top_builddir@
- top_srcdir = @top_srcdir@
- DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
- SUBDIRS = \
-- gst-libs gst ext m4 tests common pkgconfig po
-+ gst-libs gst ext m4 common pkgconfig po
-
-
- # the MANIFEST contains all win32 related files that should be disted
--- /dev/null
+diff -u --recursive gst-plugins-ugly-1.6.2-vanilla/configure.ac gst-plugins-ugly-1.6.2/configure.ac
+--- gst-plugins-ugly-1.6.2-vanilla/configure.ac 2016-01-01 12:11:03.267943540 -0500
++++ gst-plugins-ugly-1.6.2/configure.ac 2016-01-01 12:13:30.992120335 -0500
+@@ -464,9 +464,6 @@
+ ext/sidplay/Makefile
+ ext/twolame/Makefile
+ ext/x264/Makefile
+-docs/Makefile
+-docs/plugins/Makefile
+-docs/version.entities
+ m4/Makefile
+ pkgconfig/Makefile
+ pkgconfig/gstreamer-plugins-ugly-uninstalled.pc
+diff -u --recursive gst-plugins-ugly-1.6.2-vanilla/Makefile.am gst-plugins-ugly-1.6.2/Makefile.am
+--- gst-plugins-ugly-1.6.2-vanilla/Makefile.am 2016-01-01 12:11:03.268943568 -0500
++++ gst-plugins-ugly-1.6.2/Makefile.am 2016-01-01 12:13:28.110038773 -0500
+@@ -1,7 +1,7 @@
+ DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc
+
+ SUBDIRS = \
+- gst-libs gst ext docs m4 common pkgconfig
++ gst-libs gst ext m4 common pkgconfig
+
+ # include before EXTRA_DIST for win32 assignment
+ include $(top_srcdir)/common/win32.mak
+++ /dev/null
---- a/configure.ac
-+++ b/configure.ac
-@@ -475,7 +475,6 @@ docs/version.entities
- tests/Makefile
- tests/check/Makefile
- m4/Makefile
--po/Makefile.in
- pkgconfig/Makefile
- pkgconfig/gstreamer-plugins-ugly-uninstalled.pc
- gst-plugins-ugly.spec
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -1,7 +1,7 @@
- DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc
-
- SUBDIRS = \
-- gst-libs gst ext m4 common pkgconfig po
-+ gst-libs gst ext m4 common pkgconfig
-
- # include before EXTRA_DIST for win32 assignment
- include $(top_srcdir)/common/win32.mak
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -502,7 +502,7 @@ top_builddir = @top_builddir@
- top_srcdir = @top_srcdir@
- DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
- SUBDIRS = \
-- gst-libs gst ext m4 common pkgconfig po
-+ gst-libs gst ext m4 common pkgconfig
-
-
- # the MANIFEST contains all win32 related files that should be disted
include $(TOPDIR)/rules.mk
PKG_NAME:=gstreamer1
-PKG_VERSION:=1.4.5
+PKG_VERSION:=1.6.2
PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
PKG_BUILD_DIR:=$(BUILD_DIR)/gstreamer-$(PKG_VERSION)
PKG_SOURCE:=gstreamer-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gstreamer/
-PKG_MD5SUM:=88a9289c64a4950ebb4f544980234289
+PKG_MD5SUM:=5e610b5a94c209487310739b39b6c464
PKG_FIXUP:=autoreconf
PKG_REMOVE_FILES:=autogen.sh aclocal.m4
./usr/include/gstreamer-$(GST_VERSION)/* \
$(1)/usr/include/gstreamer-$(GST_VERSION)/ \
)
+ $(INSTALL_DIR) $(1)/usr/lib/gstreamer-$(GST_VERSION)/include/gst
+ ( cd $(PKG_INSTALL_DIR); $(CP) \
+ ./usr/lib/gstreamer-$(GST_VERSION)/include/gst/*.h \
+ $(1)/usr/lib/gstreamer-$(GST_VERSION)/include/gst \
+ )
$(INSTALL_DIR) $(1)/usr/lib
( cd $(PKG_INSTALL_DIR); $(CP) \
./usr/lib/libgst*-$(GST_VERSION).{a,la,so*} \
--- /dev/null
+diff -u --recursive gstreamer-1.6.2-vanilla/configure.ac gstreamer-1.6.2/configure.ac
+--- gstreamer-1.6.2-vanilla/configure.ac 2016-01-01 10:40:18.040768907 -0500
++++ gstreamer-1.6.2/configure.ac 2016-01-01 10:48:24.160887684 -0500
+@@ -980,7 +980,6 @@
+ libs/gst/net/Makefile
+ plugins/Makefile
+ plugins/elements/Makefile
+-po/Makefile.in
+ tests/Makefile
+ tests/benchmarks/Makefile
+ tests/check/Makefile
+diff -u --recursive gstreamer-1.6.2-vanilla/Makefile.am gstreamer-1.6.2/Makefile.am
+--- gstreamer-1.6.2-vanilla/Makefile.am 2016-01-01 10:40:18.040768907 -0500
++++ gstreamer-1.6.2/Makefile.am 2016-01-01 10:48:19.150568341 -0500
+@@ -9,7 +9,6 @@
+ SUBDIRS = pkgconfig \
+ gst libs plugins tests \
+ docs \
+- po \
+ m4 \
+ common \
+ data
+@@ -22,7 +21,6 @@
+ DIST_SUBDIRS = pkgconfig \
+ gst libs plugins tools tests \
+ docs \
+- po \
+ m4 \
+ common \
+ data
+++ /dev/null
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -8,7 +8,6 @@ aclocal_DATA = gst-element-check-@GST_AP
-
- SUBDIRS = pkgconfig \
- gst libs plugins tests \
-- docs \
- po \
- m4 \
- common
-@@ -20,7 +19,6 @@ endif
- # These are all the possible subdirs
- DIST_SUBDIRS = pkgconfig \
- gst libs plugins tools tests \
-- docs \
- po \
- m4 \
- common
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -554,13 +554,12 @@ top_srcdir = @top_srcdir@
- DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-docbook
- aclocaldir = $(datadir)/aclocal
- aclocal_DATA = gst-element-check-@GST_API_VERSION@.m4
--SUBDIRS = pkgconfig gst libs plugins tests docs po m4 common \
-+SUBDIRS = pkgconfig gst libs plugins tests po m4 common \
- $(am__append_1)
-
- # These are all the possible subdirs
- DIST_SUBDIRS = pkgconfig \
- gst libs plugins tools tests \
-- docs \
- po \
- m4 \
- common
--- /dev/null
+diff -u --recursive gstreamer-1.6.2-vanilla/configure.ac gstreamer-1.6.2/configure.ac
+--- gstreamer-1.6.2-vanilla/configure.ac 2016-01-01 12:01:10.863324404 -0500
++++ gstreamer-1.6.2/configure.ac 2016-01-01 12:05:07.794937166 -0500
+@@ -980,21 +980,6 @@
+ libs/gst/net/Makefile
+ plugins/Makefile
+ plugins/elements/Makefile
+-tests/Makefile
+-tests/benchmarks/Makefile
+-tests/check/Makefile
+-tests/misc/Makefile
+-tests/examples/Makefile
+-tests/examples/adapter/Makefile
+-tests/examples/controller/Makefile
+-tests/examples/stepping/Makefile
+-tests/examples/helloworld/Makefile
+-tests/examples/manual/Makefile
+-tests/examples/memory/Makefile
+-tests/examples/netclock/Makefile
+-tests/examples/ptp/Makefile
+-tests/examples/streamiddemux/Makefile
+-tests/examples/streams/Makefile
+ tools/Makefile
+ common/Makefile
+ common/m4/Makefile
+diff -u --recursive gstreamer-1.6.2-vanilla/Makefile.am gstreamer-1.6.2/Makefile.am
+--- gstreamer-1.6.2-vanilla/Makefile.am 2016-01-01 12:01:10.862324377 -0500
++++ gstreamer-1.6.2/Makefile.am 2016-01-01 12:05:03.190808129 -0500
+@@ -7,7 +7,7 @@
+ aclocal_DATA = gst-element-check-@GST_API_VERSION@.m4
+
+ SUBDIRS = pkgconfig \
+- gst libs plugins tests \
++ gst libs plugins \
+ docs \
+ m4 \
+ common \
+@@ -19,7 +19,7 @@
+
+ # These are all the possible subdirs
+ DIST_SUBDIRS = pkgconfig \
+- gst libs plugins tools tests \
++ gst libs plugins tools \
+ docs \
+ m4 \
+ common \
+++ /dev/null
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -7,7 +7,7 @@ aclocaldir = $(datadir)/aclocal
- aclocal_DATA = gst-element-check-@GST_API_VERSION@.m4
-
- SUBDIRS = pkgconfig \
-- gst libs plugins tests \
-+ gst libs plugins \
- po \
- m4 \
- common
-@@ -18,7 +18,7 @@ endif
-
- # These are all the possible subdirs
- DIST_SUBDIRS = pkgconfig \
-- gst libs plugins tools tests \
-+ gst libs plugins tools \
- po \
- m4 \
- common
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -554,12 +554,12 @@ top_srcdir = @top_srcdir@
- DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-docbook
- aclocaldir = $(datadir)/aclocal
- aclocal_DATA = gst-element-check-@GST_API_VERSION@.m4
--SUBDIRS = pkgconfig gst libs plugins tests po m4 common \
-+SUBDIRS = pkgconfig gst libs plugins po m4 common \
- $(am__append_1)
-
- # These are all the possible subdirs
- DIST_SUBDIRS = pkgconfig \
-- gst libs plugins tools tests \
-+ gst libs plugins tools \
- po \
- m4 \
- common
--- /dev/null
+diff -u --recursive gstreamer-1.6.2-vanilla/configure.ac gstreamer-1.6.2/configure.ac
+--- gstreamer-1.6.2-vanilla/configure.ac 2016-01-01 12:11:19.150392204 -0500
++++ gstreamer-1.6.2/configure.ac 2016-01-01 12:06:49.611795028 -0500
+@@ -983,18 +983,6 @@
+ tools/Makefile
+ common/Makefile
+ common/m4/Makefile
+-docs/Makefile
+-docs/design/Makefile
+-docs/faq/Makefile
+-docs/gst/Makefile
+-docs/gst/gstreamer.types
+-docs/libs/Makefile
+-docs/plugins/Makefile
+-docs/manual/Makefile
+-docs/pwg/Makefile
+-docs/slides/Makefile
+-docs/xsl/Makefile
+-docs/version.entities
+ m4/Makefile
+ pkgconfig/Makefile
+ stamp.h
+diff -u --recursive gstreamer-1.6.2-vanilla/Makefile.am gstreamer-1.6.2/Makefile.am
+--- gstreamer-1.6.2-vanilla/Makefile.am 2016-01-01 12:11:19.151392233 -0500
++++ gstreamer-1.6.2/Makefile.am 2016-01-01 12:06:41.546568365 -0500
+@@ -8,7 +8,6 @@
+
+ SUBDIRS = pkgconfig \
+ gst libs plugins \
+- docs \
+ m4 \
+ common \
+ data
+@@ -20,7 +19,6 @@
+ # These are all the possible subdirs
+ DIST_SUBDIRS = pkgconfig \
+ gst libs plugins tools \
+- docs \
+ m4 \
+ common \
+ data
+++ /dev/null
---- a/configure.ac
-+++ b/configure.ac
-@@ -780,7 +780,6 @@ libs/gst/helpers/Makefile
- libs/gst/net/Makefile
- plugins/Makefile
- plugins/elements/Makefile
--po/Makefile.in
- tests/Makefile
- tests/benchmarks/Makefile
- tests/check/Makefile
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -8,7 +8,6 @@ aclocal_DATA = gst-element-check-@GST_AP
-
- SUBDIRS = pkgconfig \
- gst libs plugins \
-- po \
- m4 \
- common
-
-@@ -19,7 +18,6 @@ endif
- # These are all the possible subdirs
- DIST_SUBDIRS = pkgconfig \
- gst libs plugins tools \
-- po \
- m4 \
- common
-
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -554,13 +554,12 @@ top_srcdir = @top_srcdir@
- DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-docbook
- aclocaldir = $(datadir)/aclocal
- aclocal_DATA = gst-element-check-@GST_API_VERSION@.m4
--SUBDIRS = pkgconfig gst libs plugins po m4 common \
-+SUBDIRS = pkgconfig gst libs plugins m4 common \
- $(am__append_1)
-
- # These are all the possible subdirs
- DIST_SUBDIRS = pkgconfig \
- gst libs plugins tools \
-- po \
- m4 \
- common
-
--- /dev/null
+diff -u --recursive gstreamer-1.6.2-vanilla/gst/gstplugin.c gstreamer-1.6.2/gst/gstplugin.c
+--- gstreamer-1.6.2-vanilla/gst/gstplugin.c 2016-01-01 12:37:38.178990140 -0500
++++ gstreamer-1.6.2/gst/gstplugin.c 2016-01-01 12:38:30.431328737 -0500
+@@ -732,15 +732,8 @@
+ goto return_error;
+ }
+
+- flags = G_MODULE_BIND_LOCAL;
+- /* libgstpython.so is the gst-python plugin loader. It needs to be loaded with
+- * G_MODULE_BIND_LAZY.
+- *
+- * Ideally there should be a generic way for plugins to specify that they
+- * need to be loaded with _LAZY.
+- * */
+- if (strstr (filename, "libgstpython"))
+- flags |= G_MODULE_BIND_LAZY;
++ // No need to resolve all bindings until referenced
++ flags = G_MODULE_BIND_LOCAL | G_MODULE_BIND_LAZY;
+
+ module = g_module_open (filename, flags);
+ if (module == NULL) {
+++ /dev/null
---- a/gst/gstplugin.c
-+++ b/gst/gstplugin.c
-@@ -723,15 +723,8 @@ gst_plugin_load_file (const gchar * file
- goto return_error;
- }
-
-- flags = G_MODULE_BIND_LOCAL;
-- /* libgstpython.so is the gst-python plugin loader. It needs to be loaded with
-- * G_MODULE_BIND_LAZY.
-- *
-- * Ideally there should be a generic way for plugins to specify that they
-- * need to be loaded with _LAZY.
-- * */
-- if (strstr (filename, "libgstpython"))
-- flags |= G_MODULE_BIND_LAZY;
-+ // No need to resolve all bindings until referenced
-+ flags = G_MODULE_BIND_LOCAL | G_MODULE_BIND_LAZY;
-
- module = g_module_open (filename, flags);
- if (module == NULL) {
PKG_NAME:=icecast
PKG_VERSION:=2.4.2
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=André Gaul <andre@gaul.io>
CATEGORY:=Multimedia
DEPENDS:=+libcurl +libxml2 +libxslt +libogg +libopenssl
TITLE:=A streaming media server for Ogg/Vorbis and MP3 audio streams
+ USERID:=icecast=87:icecast=87
URL:=http://www.icecast.org/
endef
#!/bin/sh /etc/rc.common
-# Example script
-# Copyright (C) 2014 OpenWrt.org
+
+# Startup script
+# Copyright (C) 2015 OpenWrt.org
USE_PROCD=1
-START=99
+START=90
STOP=15
start_service() {
+ user_exists icecast 87 || user_add icecast 87
+ group_exists icecast 87 || group_add icecast 87
+
+ [ -d /var/log/icecast ] || {
+ mkdir -m 0755 -p /var/log/icecast
+ chown icecast:icecast /var/log/icecast
+ }
+
procd_open_instance
procd_set_param command /usr/bin/icecast -c /etc/icecast.xml
procd_set_param respawn
--- /dev/null
+--- a/conf/icecast.xml.in
++++ b/conf/icecast.xml.in
+@@ -61,7 +61,7 @@
+ It affects mainly the urls generated by Icecast for playlists and yp
+ listings. You MUST configure it properly for YP listings to work!
+ -->
+- <hostname>localhost</hostname>
++ <hostname>OpenWrt</hostname>
+
+ <!-- You may have multiple <listener> elements -->
+ <listen-socket>
+@@ -234,11 +234,9 @@
+
+ <security>
+ <chroot>0</chroot>
+- <!--
+ <changeowner>
+- <user>nobody</user>
+- <group>nogroup</group>
++ <user>icecast</user>
++ <group>icecast</group>
+ </changeowner>
+- -->
+ </security>
+ </icecast>
include $(TOPDIR)/rules.mk
PKG_NAME:=minidlna
-PKG_VERSION:=1.1.4
-PKG_RELEASE:=2
+PKG_VERSION:=1.1.5
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/minidlna
-PKG_MD5SUM:=67c9e91285bc3801fd91a5d26ea775d7
+PKG_MD5SUM:=1970e553a1eb8a3e7e302e2ce292cbc4
PKG_LICENSE:=GPL-2.0 BSD-3-Clause
PKG_LICENSE_FILES:=COPYING LICENCE.miniupnpd
PKG_NAME:=mjpg-streamer
PKG_REV:=182
PKG_VERSION:=r$(PKG_REV)
-PKG_RELEASE:=7
+PKG_RELEASE:=8
PKG_MAINTAINER:=Roger D <rogerdammit@gmail.com>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).1.tar.bz2
--- /dev/null
+--- a/plugins/input_uvc/v4l2uvc.c
++++ b/plugins/input_uvc/v4l2uvc.c
+@@ -130,7 +130,7 @@ int init_videoIn(struct vdIn *vd, char *
+ return -1;
+ }
+
+- memcpy(&pglobal->in[id].in_formats[pglobal->in[id].formatCount], &fmtdesc, sizeof(input_format));
++ memcpy(&pglobal->in[id].in_formats[pglobal->in[id].formatCount], &fmtdesc, sizeof(struct v4l2_fmtdesc));
+
+ if(fmtdesc.pixelformat == format)
+ pglobal->in[id].currentFormat = pglobal->in[id].formatCount;
PKG_NAME:=oggfwd
PKG_REV:=506088e5066abd086efc951670906187c120e9a3
PKG_VERSION:=20150412
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=git://r-w-x.org/oggfwd.git
SUBMENU:=Streaming
TITLE:=Pipe media into icecast
URL:=http://www.v2v.cc/~j/oggfwd
- DEPENDS:=+libpthread +libshout
+ DEPENDS:=+libpthread +libshout-full
endef
define Package/oggfwd/description
PKG_LICENSE:=Apache License
PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=http://mirrors.ibiblio.org/apache/httpd/ \
- http://apache.imsam.info/httpd/
+PKG_SOURCE_URL:=@APACHE/httpd/
PKG_MD5SUM:=6c10e15835ab214464228a9beb7afba8
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
PKG_NAME:=atftp
PKG_VERSION:=0.7.1
-PKG_RELEASE:=4
+PKG_RELEASE:=5
PKG_MAINTAINER:=Daniel Danzberger <daniel@dd-wrt.com>
PKG_LICENSE:=GPL-2.0
--- /dev/null
+diff --git a/tftp_def.c b/tftp_def.c
+index 96abdc5..16240f7 100644
+--- a/tftp_def.c
++++ b/tftp_def.c
+@@ -141,7 +141,7 @@ int print_eng(double value, char *string, int size, char *format)
+ /*
+ * This is a strncpy function that take care of string NULL termination
+ */
+-inline char *Strncpy(char *to, const char *from, size_t size)
++char *Strncpy(char *to, const char *from, size_t size)
+ {
+ strncpy(to, from, size);
+ if (size>0)
+diff --git a/tftp_def.h b/tftp_def.h
+index e4b338d..4418ee7 100644
+--- a/tftp_def.h
++++ b/tftp_def.h
+@@ -50,7 +50,7 @@ extern char *tftp_errmsg[9];
+
+ int timeval_diff(struct timeval *res, struct timeval *t1, struct timeval *t0);
+ int print_eng(double value, char *string, int size, char *format);
+-inline char *Strncpy(char *to, const char *from, size_t size);
++char *Strncpy(char *to, const char *from, size_t size);
+ int Gethostbyname(char *addr, struct hostent *host);
+
+ char *sockaddr_print_addr(const struct sockaddr_storage *, char *, size_t);
+diff --git a/tftpd.h b/tftpd.h
+index 945065e..4bd3f17 100644
+--- a/tftpd.h
++++ b/tftpd.h
+@@ -93,7 +93,7 @@ int tftpd_list_find_multicast_server_and_add(struct thread_data **thread,
+ /*
+ * Defined in tftpd_list.c, operation on client structure list.
+ */
+-inline void tftpd_clientlist_ready(struct thread_data *thread);
++void tftpd_clientlist_ready(struct thread_data *thread);
+ void tftpd_clientlist_remove(struct thread_data *thread,
+ struct client_info *client);
+ void tftpd_clientlist_free(struct thread_data *thread);
+diff --git a/tftpd_list.c b/tftpd_list.c
+index f376159..159ffca 100644
+--- a/tftpd_list.c
++++ b/tftpd_list.c
+@@ -201,7 +201,7 @@ int tftpd_list_find_multicast_server_and_add(struct thread_data **thread,
+ return 0;
+ }
+
+-inline void tftpd_clientlist_ready(struct thread_data *thread)
++void tftpd_clientlist_ready(struct thread_data *thread)
+ {
+ pthread_mutex_lock(&thread->client_mutex);
+ thread->client_ready = 1;
+--
+2.1.4
+
--- /dev/null
+if PACKAGE_bind-server
+
+config BIND_ENABLE_FILTER_AAAA
+ bool
+ default n
+ prompt "Enable filtering of AAAA records returned to the client"
+ help
+ BIND 9 has an option to filter AAAA (IPv6 address) records
+ returned to the client based on the transport used for the
+ query, and other filtering conditions. This filtering does
+ not affect the recursive queries made by the server (if
+ any) as a result of the client request.
+
+ Additional details are available at
+ https://kb.isc.org/article/AA-00576/0/Filter-AAAA-option-in-BIND-9-.html
+
+endif
include $(TOPDIR)/rules.mk
PKG_NAME:=bind
-PKG_VERSION:=9.9.7-P3
-PKG_RELEASE:=1
+PKG_VERSION:=9.9.8-P3
+PKG_RELEASE:=2
USERID:=bind=57:bind=57
PKG_MAINTAINER := Noah Meyerhans <frodo@morgul.net>
PKG_SOURCE_URL:= \
ftp://ftp.isc.org/isc/bind9/$(PKG_VERSION) \
http://www.mirrorservice.org/sites/ftp.isc.org/isc/bind9/$(PKG_VERSION)
-PKG_MD5SUM:=022a8aca9ca51e1027d77094094eecfd
+PKG_MD5SUM:=30b9bf88a78eee783d3fef5257445788
PKG_FIXUP:=autoreconf
PKG_REMOVE_FILES:=aclocal.m4 libtool.m4
PKG_INSTALL:=1
-PKG_CONFIG_DEPENDS := CONFIG_OPENSSL_WITH_EC
+PKG_CONFIG_DEPENDS := \
+ CONFIG_OPENSSL_WITH_EC \
+ CONFIG_BIND_ENABLE_FILTER_AAAA
include $(INCLUDE_DIR)/package.mk
TITLE+= DNS server
endef
+define Package/bind-server/config
+ source "$(SOURCE)/Config.in"
+endef
+
define Package/bind-client
$(call Package/bind/Default)
TITLE+= dynamic DNS client
--with-ecdsa=$(if $(CONFIG_OPENSSL_WITH_EC),yes,no) \
--with-readline=no
+ifdef CONFIG_BIND_ENABLE_FILTER_AAAA
+ CONFIGURE_ARGS += \
+ --enable-filter-aaaa
+endif
+
CONFIGURE_VARS += \
BUILD_CC="$(TARGET_CC)" \
include $(TOPDIR)/rules.mk
PKG_NAME:=chrony
-PKG_VERSION:=2.2
-PKG_RELEASE:=2
+PKG_VERSION:=2.3
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://download.tuxfamily.org/chrony/
-PKG_MD5SUM:=17bc77d3d2ce942675f9600b60452717
+PKG_MD5SUM:=db6d46afea66f75dcc362f44623c1af4
PKG_MAINTAINER:=Miroslav Lichvar <mlichvar0@gmail.com>
PKG_LICENSE:=GPL-2.0
--- /dev/null
+#
+# Copyright (C) 2007-2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=cifs-utils
+PKG_VERSION:=6.4
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=http://ftp.samba.org/pub/linux-cifs/cifs-utils
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_MD5SUM:=b7d75b67fd3987952896d27256c7293d
+
+PKG_MAINTAINER:=Florian Fainelli <florian@openwrt.org>
+PKG_LICENSE:=GPL-3.0
+PKG_LICENSE_FILES:=COPYING
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/cifsmount
+ SECTION:=net
+ CATEGORY:=Network
+ TITLE:=CIFS mount utilities
+ URL:=http://wiki.samba.org/index.php/LinuxCIFS_utils
+endef
+
+TARGET_CFLAGS += -Wno-error
+
+CONFIGURE_ARGS += \
+ --exec-prefix=/usr \
+ --prefix=/ \
+ --with-libcap-ng=no \
+ --with-libcap=no
+
+define Package/cifsmount/install
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/mount.cifs $(1)/usr/sbin/
+endef
+
+$(eval $(call BuildPackage,cifsmount))
--- /dev/null
+From 6603cef0f06c450196a1bca06bb143d8fcda5651 Mon Sep 17 00:00:00 2001
+From: Felix Janda <felix.janda@posteo.de>
+Date: Fri, 5 Dec 2014 23:19:29 +0100
+Subject: [PATCH 1/1] mtab.c: include <paths.h> for _PATH_MOUNTED
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Backported from: 6603cef0f06c450196a1bca06bb143d8fcda5651
+
+Signed-off-by: Felix Janda <felix.janda@posteo.de>
+Signed-off-by: Jörg Krause <joerg.krause@embedded.rocks>
+---
+ mtab.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/mtab.c b/mtab.c
+index 7b365b3..a662a3c 100644
+--- a/mtab.c
++++ b/mtab.c
+@@ -38,6 +38,7 @@
+ #include <mntent.h>
+ #include <stdlib.h>
+ #include <signal.h>
++#include <paths.h>
+ #include "mount.h"
+ #include "config.h"
+
+--
+2.5.0
--- /dev/null
+--- a/src/system.h
++++ b/src/system.h
+@@ -78,11 +78,6 @@
+ #include <sys/stat.h>
+ #endif
+
+-#ifdef HAVE_LINUX_SYSINFO_H
+-#define _LINUX_KERNEL_H
+-#include <linux/sysinfo.h>
+-#endif
+-
+ #ifdef HAVE_TIME_H
+ #include <time.h>
+ #endif
+@@ -123,6 +118,11 @@
+ #include <signal.h>
+ #endif
+
++#ifdef HAVE_SYS_SYSINFO_H
++#define _LINUX_SYSINFO_H
++#include <sys/sysinfo.h>
++#endif
++
+ #if defined(__linux__)
+ #include <asm/types.h>
+ #include <linux/if.h>
+@@ -135,10 +135,6 @@
+ #include <linux/un.h>
+ #endif
+
+-#ifdef HAVE_SYS_SYSINFO_H
+-#include <sys/sysinfo.h>
+-#endif
+-
+ #elif defined (__FreeBSD__) || defined (__APPLE__) || defined (__OpenBSD__) || defined (__NetBSD__)
+ #include <net/if.h>
+ #include <net/bpf.h>
+@@ -170,10 +166,6 @@
+ #include <net/if_tun.h>
+ #endif
+
+-#ifdef HAVE_NET_ETHERNET_H
+-#include <net/ethernet.h>
+-#endif
+-
+ #ifdef HAVE_ASM_TYPES_H
+ #include <asm/types.h>
+ #endif
+--- a/src/chilli_limits.h
++++ b/src/chilli_limits.h
+@@ -18,8 +18,8 @@
+ *
+ */
+
+-#ifndef _LIMITS_H
+-#define _LIMITS_H
++#ifndef _CHILLI_LIMITS_H
++#define _CHILLI_LIMITS_H
+
+ /*
+ * extracted from various .h files, needs some cleanup.
include $(TOPDIR)/rules.mk
PKG_NAME:=cshark
-PKG_VERSION:=2015-03-13
+PKG_VERSION:=2015-11-24
PKG_RELEASE=$(PKG_SOURCE_VERSION)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/cloudshark/cshark.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=ab2ae2fbd72b6cbd57c95e3192edc3c1f475412b
+PKG_SOURCE_VERSION:=e575ab3d35d75a6f70488001fcba45690ebe9b3e
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_BUILD_PARALLEL:=1
--- /dev/null
+#
+# Copyright (C) 2007-2011 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=daemonlogger
+PKG_VERSION:=1.2.1
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@SF/daemonlogger
+PKG_MD5SUM:=acb64aa6cd5777e297569f100b5c39ee
+
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=COPYING
+
+PKG_MAINTAINER:=Mirko Vogt <mirko@openwrt.org>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/daemonlogger
+ SECTION:=net
+ CATEGORY:=Network
+ DEPENDS:=+libpcap +libdnet
+ TITLE:=Software Network Tap
+ URL:=http://www.snort.org/snort-downloads/additional-downloads
+endef
+
+CONFIGURE_VARS += \
+ BUILD_CC="$(TARGET_CC)" \
+ HOSTCC="$(HOSTCC)"
+
+MAKE_FLAGS := CCOPT="$(TARGET_CFLAGS)" INCLS="-I. $(TARGET_CPPFLAGS)"
+
+define Package/daemonlogger/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/daemonlogger $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,daemonlogger))
PKG_NAME:=davfs2
PKG_VERSION:=1.5.2
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://download.savannah.gnu.org/releases/davfs2/
SECTION:=net
CATEGORY:=Network
SUBMENU:=Filesystem
- DEPENDS=+libopenssl +libneon +libiconv +libintl +libexpat +kmod-fuse +libfuse
+ DEPENDS=+libneon +kmod-fuse +libfuse
TITLE:=Mount a WebDAV resource as a regular file system.
URL:=http://savannah.nongnu.org/projects/davfs2/
MAINTAINER:=Federico Di Marco <fededim@gmail.com>
TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include
+TARGET_CPPFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
+
CONFIGURE_VARS += \
LDFLAGS="$(TARGET_LDFLAGS) -L$(TOOLCHAIN_DIR)/usr/lib -L$(TOOLCHAIN_DIR)/lib"
#
-# Copyright (C) 2008-2015 OpenWrt.org
+# Copyright (C) 2008-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
#
PKG_NAME:=ddns-scripts
# Version == major.minor.patch
# increase on new functionality (minor) or patches (patch)
-PKG_VERSION:=2.5.0
+PKG_VERSION:=2.6.2
# Release == build
# increase on changes of services files or tld_names.dat
PKG_RELEASE:=1
- Proxy server support
- log file support
- support to run once
- .
Version: $(PKG_VERSION)-$(PKG_RELEASE)
Info : http://wiki.openwrt.org/doc/howto/ddns.client
- .
$(PKG_MAINTAINER)
endef
##### **********************************
define Package/$(PKG_NAME)_cloudflare
$(call Package/$(PKG_NAME)/Default)
- TITLE:=DDNS extension for CloudFlare
+ TITLE:=DDNS extension for CloudFlare.com
DEPENDS:=$(PKG_NAME)
endef
define Package/$(PKG_NAME)_cloudflare/description
- Dynamic DNS Client scripts extension for CloudFlare
+ Dynamic DNS Client scripts extension for CloudFlare.com
endef
##### **********************************
endef
define Package/$(PKG_NAME)_nsupdate/config
help
- The script directly updates a PowerDNS (or maybe bind server) via nsupdate
- from bind-client package. It requires
+ The script directly updates a PowerDNS (or maybe bind server) via nsupdate
+ from bind-client package. It requires
"option dns_server" to be set to the server to be used by nsupdate.
- "option username" should be set to the key name and
+ "option username" should be set to the key name and
"option password" to the base64 encoded shared secret.
endef
##### **********************************
define Package/$(PKG_NAME)_cloudflare/install
$(INSTALL_DIR) $(1)/usr/lib/ddns
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_CloudFlare.sh $(1)/usr/lib/ddns
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_cloudflare_com.sh $(1)/usr/lib/ddns
$(INSTALL_DATA) $(PKG_BUILD_DIR)/files/tld_names.dat.gz $(1)/usr/lib/ddns
endef
define Package/$(PKG_NAME)_cloudflare/postinst
#!/bin/sh
- echo -e '"CloudFlare"\t"update_CloudFlare.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services
- echo -e '"CloudFlare"\t"update_CloudFlare.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services_ipv6
+ echo -e '"cloudflare.com"\t"update_cloudflare_com.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services
+ echo -e '"cloudflare.com"\t"update_cloudflare_com.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services_ipv6
+ /bin/sed -i '/service_name/s/CloudFlare/cloudflare\.com/g' $${IPKG_INSTROOT}/etc/config/ddns
endef
define Package/$(PKG_NAME)_cloudflare/prerm
#!/bin/sh
- /bin/sed -i '/update_CloudFlare\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services
- /bin/sed -i '/update_CloudFlare\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services_ipv6
+ /bin/sed -i '/update_cloudflare_com\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services
+ /bin/sed -i '/update_cloudflare_com\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services_ipv6
endef
##### **********************************
define Package/$(PKG_NAME)_no-ip_com/install
$(INSTALL_DIR) $(1)/usr/lib/ddns
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_No-IP.com.sh $(1)/usr/lib/ddns
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_no-ip_com.sh $(1)/usr/lib/ddns
endef
define Package/$(PKG_NAME)_no-ip_com/postinst
#!/bin/sh
- echo -e '"No-IP.com"\t"update_No-IP.com.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services
- echo -e '"NoIP.com"\t"update_No-IP.com.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services
+ echo -e '"no-ip.com"\t"update_no-ip_com.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services
+ /bin/sed -i '/service_name/s/NoIP\.com/no-ip\.com/g' $${IPKG_INSTROOT}/etc/config/ddns
+ /bin/sed -i '/service_name/s/No-IP\.com/no-ip\.com/g' $${IPKG_INSTROOT}/etc/config/ddns
endef
define Package/$(PKG_NAME)_no-ip_com/prerm
#!/bin/sh
- /bin/sed -i '/update_No-IP\.com\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services
+ /bin/sed -i '/update_no-ip_com\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services
endef
##### **********************************
endef
define Package/$(PKG_NAME)_nsupdate/postinst
#!/bin/sh
- echo -e '"Bind-nsupdate"\t"update_nsupdate.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services
- echo -e '"Bind-nsupdate"\t"update_nsupdate.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services_ipv6
+ echo -e '"bind-nsupdate"\t"update_nsupdate.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services
+ echo -e '"bind-nsupdate"\t"update_nsupdate.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services_ipv6
+ /bin/sed -i '/service_name/s/Bind-nsupdate/bind-nsupdate/g' $${IPKG_INSTROOT}/etc/config/ddns
endef
define Package/$(PKG_NAME)_nsupdate/prerm
#!/bin/sh
config service "myddns_ipv4"
- option service_name "dyndns.com"
+ option service_name "dyndns.org"
option lookup_host "yourhost.example.com"
option domain "yourhost.example.com"
option username "your_username"
#!/bin/sh
# /usr/lib/ddns/dynamic_dns_functions.sh
#
-# Original written by Eric Paul Bishop, January 2008
#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
+# Original written by Eric Paul Bishop, January 2008
# (Loosely) based on the script on the one posted by exobyte in the forums here:
# http://forum.openwrt.org/viewtopic.php?id=14040
-#
-# extended and partial rewritten in August 2014 by
-#.Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-# to support:
-# - IPv6 DDNS services
-# - setting DNS Server to retrieve current IP including TCP transport
-# - Proxy Server to send out updates or retrieving WEB based IP detection
-# - force_interval=0 to run once (useful for cron jobs etc.)
-# - the usage of BIND's host instead of BusyBox's nslookup if installed (DNS via TCP)
-# - extended Verbose Mode and log file support for better error detection
+# extended and partial rewritten
+#.2014-2016 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
#
# function timeout
# copied from http://www.ict.griffith.edu.au/anthony/software/timeout.sh
. /lib/functions/network.sh
# GLOBAL VARIABLES #
-VERSION="2.5.0-1"
+VERSION="2.6.1-1"
SECTION_ID="" # hold config's section name
VERBOSE_MODE=1 # default mode is log to console, but easily changed with parameter
__IPV6=$(echo $__HOST | grep -m 1 -o "$IPV6_REGEX")
# if FQDN given get IP address
[ -z "$__IPV4" -a -z "$__IPV6" ] && {
- if [ -x /usr/bin/host ]; then # use BIND host if installed
+ if [ -n "$(which host)" ]; then # use BIND host if installed
__PROG="BIND host"
- __RUNPROG="/usr/bin/host -t ANY $__HOST >$DATFILE 2>$ERRFILE"
+ __RUNPROG="$(which host) -t ANY $__HOST >$DATFILE 2>$ERRFILE"
else # use BusyBox nslookup
__PROG="BusyBox nslookup"
- __RUNPROG="/usr/bin/nslookup $__HOST >$DATFILE 2>$ERRFILE"
+ __RUNPROG="$(which nslookup) $__HOST >$DATFILE 2>$ERRFILE"
fi
write_log 7 "#> $__RUNPROG"
eval $__RUNPROG
[ $# -ne 1 ] && write_log 12 "Error in 'do_transfer()' - wrong number of parameters"
# lets prefer GNU Wget because it does all for us - IPv4/IPv6/HTTPS/PROXY/force IP version
- grep -i "\+ssl" /usr/bin/wget >/dev/null 2>&1 # check for Wget with SSL support
- if [ $? -eq 0 -a $USE_CURL -eq 0 ]; then # except global option use_curl is set to "1"
- __PROG="/usr/bin/wget -nv -t 1 -O $DATFILE -o $ERRFILE" # non_verbose no_retry outfile errfile
+ if [ -n "$(which wget-ssl)" -a $USE_CURL -eq 0 ]; then # except global option use_curl is set to "1"
+ __PROG="$(which wget-ssl) -nv -t 1 -O $DATFILE -o $ERRFILE" # non_verbose no_retry outfile errfile
# force network/ip to use for communication
if [ -n "$bind_network" ]; then
local __BINDIP
__PROG="$__PROG --ca-certificate=${cacert}"
elif [ -d "$cacert" ]; then
__PROG="$__PROG --ca-directory=${cacert}"
- else # exit here because it makes no sense to start loop
+ elif [ -n "$cacert" ]; then # it's not a file and not a directory but given
write_log 14 "No valid certificate(s) found at '$cacert' for HTTPS communication"
fi
fi
__PROG="GNU Wget" # reuse for error logging
# 2nd choice is cURL IPv4/IPv6/HTTPS
- # libcurl might be compiled without Proxy Support (default in trunk)
- elif [ -x /usr/bin/curl ]; then
- __PROG="/usr/bin/curl -RsS -o $DATFILE --stderr $ERRFILE"
+ # libcurl might be compiled without Proxy or HTTPS Support
+ elif [ -n "$(which curl)" ]; then
+ __PROG="$(which curl) -RsS -o $DATFILE --stderr $ERRFILE"
+ # check HTTPS support
+ /usr/bin/curl -V | grep "Protocols:" | grep -F "https" >/dev/null 2>&1
+ [ $? -eq 1 -a $use_https -eq 1 ] && \
+ write_log 13 "cURL: libcurl compiled without https support"
# force network/interface-device to use for communication
if [ -n "$bind_network" ]; then
local __DEVICE
__PROG="$__PROG --cacert $cacert"
elif [ -d "$cacert" ]; then
__PROG="$__PROG --capath $cacert"
- else # exit here because it makes no sense to start loop
+ elif [ -n "$cacert" ]; then # it's not a file and not a directory but given
write_log 14 "No valid certificate(s) found at '$cacert' for HTTPS communication"
fi
fi
__RUNPROG="$__PROG '$__URL'" # build final command
__PROG="cURL" # reuse for error logging
- # busybox Wget (did not support neither IPv6 nor HTTPS)
- elif [ -x /usr/bin/wget ]; then
- __PROG="/usr/bin/wget -q -O $DATFILE"
+ # uclient-fetch possibly with ssl support if /lib/libustream-ssl.so installed
+ elif [ -n "$(which uclient-fetch)" ]; then
+ __PROG="$(which uclient-fetch) -q -O $DATFILE"
+ # force network/ip not supported
+ [ -n "$__BINDIP" ] && \
+ write_log 14 "uclient-fetch: FORCE binding to specific address not supported"
+ # force ip version not supported
+ [ $force_ipversion -eq 1 ] && \
+ write_log 14 "uclient-fetch: Force connecting to IPv4 or IPv6 addresses not supported"
+ # https possibly not supported
+ [ $use_https -eq 1 -a ! -f /lib/libustream-ssl.so ] && \
+ write_log 14 "uclient-fetch: no HTTPS support! Additional install one of ustream-ssl packages"
+ # proxy support
+ [ -z "$proxy" ] && __PROG="$__PROG -Y off" || __PROG="$__PROG -Y on"
+ # https & certificates
+ if [ $use_https -eq 1 ]; then
+ if [ "$cacert" = "IGNORE" ]; then
+ __PROG="$__PROG --no-check-certificate"
+ elif [ -f "$cacert" ]; then
+ __PROG="$__PROG --ca-certificate=$cacert"
+ elif [ -n "$cacert" ]; then # it's not a file; nothing else supported
+ write_log 14 "No valid certificate file '$cacert' for HTTPS communication"
+ fi
+ fi
+ __RUNPROG="$__PROG '$__URL' 2>$ERRFILE" # build final command
+ __PROG="uclient-fetch" # reuse for error logging
+
+ # Busybox Wget or any other wget in search $PATH (did not support neither IPv6 nor HTTPS)
+ elif [ -n "$(which wget)" ]; then
+ __PROG="$(which wget) -q -O $DATFILE"
# force network/ip not supported
[ -n "$__BINDIP" ] && \
write_log 14 "BusyBox Wget: FORCE binding to specific address not supported"
__PROG="Busybox Wget" # reuse for error logging
else
- write_log 13 "Neither 'Wget' nor 'cURL' installed or executable"
+ write_log 13 "Neither 'Wget' nor 'cURL' nor 'uclient-fetch' installed or executable"
fi
while : ; do
)
else
__DATA=$(awk '
- /inet6/ && /: [0-9a-eA-E]/ && !/\/128/ { # Filter IPv6 exclude fxxx and /128 prefix
+ /inet6/ && /: [0-9a-eA-E]/ { # Filter IPv6 exclude fxxx
# inet6 addr: 2001:db8::xxxx:xxxx/32 Scope:Global
FS="/"; # separator "/"
$0=$0; # reread to activate separator
# $2 (optional) if set, do not retry on error
local __CNT=0 # error counter
local __ERR=255
- local __REGEX __PROG __RUNPROG __DATA
+ local __REGEX __PROG __RUNPROG __DATA __IP
+ local __MUSL=$(nslookup localhost 2>&1 | grep -qF "(null)"; echo $?) # 0 == busybox compiled with musl "(null)" found
# return codes
# 1 no IP detected
# set correct regular expression
[ $use_ipv6 -eq 0 ] && __REGEX="$IPV4_REGEX" || __REGEX="$IPV6_REGEX"
- if [ -x /usr/bin/host ]; then
- __PROG="/usr/bin/host"
+ if [ -n "$(which host)" ]; then
+ __PROG="$(which host)"
[ $use_ipv6 -eq 0 ] && __PROG="$__PROG -t A" || __PROG="$__PROG -t AAAA"
if [ $force_ipversion -eq 1 ]; then # force IP version
[ $use_ipv6 -eq 0 ] && __PROG="$__PROG -4" || __PROG="$__PROG -6"
__RUNPROG="$__PROG $lookup_host $dns_server >$DATFILE 2>$ERRFILE"
__PROG="BIND host"
- elif [ -x /usr/bin/nslookup ]; then # last use BusyBox nslookup
+ elif [ -n "$(which hostip)" ]; then # hostip package installed
+ __PROG="$(which hostip)"
+ [ $force_dnstcp -ne 0 ] && \
+ write_log 14 "hostip - no support for 'DNS over TCP'"
+
+ # is IP given as dns_server ?
+ __IP=$(echo $dns_server | grep -m 1 -o "$IPV4_REGEX")
+ [ -z "$__IP" ] && __IP=$(echo $dns_server | grep -m 1 -o "$IPV6_REGEX")
+
+ # we got NO ip for dns_server, so build command
+ [ -z "$__IP" -a -n "$dns_server" ] && {
+ __IP="\`/usr/bin/hostip"
+ [ $use_ipv6 -eq 1 -a $force_ipversion -eq 1 ] && __IP="$__IP -6"
+ __IP="$__IP $dns_server | grep -m 1 -o"
+ [ $use_ipv6 -eq 1 -a $force_ipversion -eq 1 ] \
+ && __IP="$__IP '$IPV6_REGEX'" \
+ || __IP="$__IP '$IPV4_REGEX'"
+ __IP="$__IP \`"
+ }
+
+ [ $use_ipv6 -eq 1 ] && __PROG="$__PROG -6"
+ [ -n "$dns_server" ] && __PROG="$__PROG -r $__IP"
+ __RUNPROG="$__PROG $lookup_host >$DATFILE 2>$ERRFILE"
+ __PROG="hostip"
+ elif [ -n "$(which nslookup)" ]; then # last use BusyBox nslookup
[ $force_ipversion -ne 0 -o $force_dnstcp -ne 0 ] && \
write_log 14 "Busybox nslookup - no support to 'force IP Version' or 'DNS over TCP'"
+ [ $__MUSL -eq 0 -a -n "$dns_server" ] && \
+ write_log 14 "Busybox compiled with musl - nslookup - no support to set/use DNS Server"
- __RUNPROG="/usr/bin/nslookup $lookup_host $dns_server >$DATFILE 2>$ERRFILE"
+ __RUNPROG="$(which nslookup) $lookup_host $dns_server >$DATFILE 2>$ERRFILE"
__PROG="BusyBox nslookup"
else # there must be an error
write_log 12 "Error in 'get_registered_ip()' - no supported Name Server lookup software accessible"
else
if [ "$__PROG" = "BIND host" ]; then
__DATA=$(cat $DATFILE | awk -F "address " '/has/ {print $2; exit}' )
+ elif [ "$__PROG" = "hostip" ]; then
+ __DATA=$(cat $DATFILE | grep -m 1 -o "$__REGEX")
else
__DATA=$(cat $DATFILE | sed -ne "/^Name:/,\$ { s/^Address[0-9 ]\{0,\}: \($__REGEX\).*$/\\1/p }" )
fi
# the leftover parameters are the HOST/SUBDOMAIN
while [ -n "$1" ]; do
- _HOST="$1 $HOST" # remember we need to invert
+ _HOST="$1 $_HOST" # remember we need to invert
shift
done
_HOST=$(echo $_HOST | tr " " ".") # insert DOT
eval "$4=''" # clear HOST/SUBDOMAIN
return 1
}
+
+expand_ipv6() {
+ # Original written for bash by
+ # Author: Florian Streibelt <florian@f-streibelt.de>
+ # Date: 08.04.2012
+ # License: Public Domain, but please be fair and
+ # attribute the original author(s) and provide
+ # a link to the original source for corrections:
+ #. https://github.com/mutax/IPv6-Address-checks
+
+ # $1 IPv6 t0 expand
+ # $2 name of variable to store expanded IPv6
+ [ $# -ne 2 ] && write_log 12 "Error calling 'expand_ipv6()' - wrong number of parameters"
+
+ INPUT="$(echo "$1" | tr 'A-F' 'a-f')"
+ [ "$INPUT" = "::" ] && INPUT="::0" # special case ::
+
+ O=""
+
+ while [ "$O" != "$INPUT" ]; do
+ O="$INPUT"
+
+ # fill all words with zeroes
+ INPUT=$( echo "$INPUT" | sed -e 's|:\([0-9a-f]\{3\}\):|:0\1:|g' \
+ -e 's|:\([0-9a-f]\{3\}\)$|:0\1|g' \
+ -e 's|^\([0-9a-f]\{3\}\):|0\1:|g' \
+ -e 's|:\([0-9a-f]\{2\}\):|:00\1:|g' \
+ -e 's|:\([0-9a-f]\{2\}\)$|:00\1|g' \
+ -e 's|^\([0-9a-f]\{2\}\):|00\1:|g' \
+ -e 's|:\([0-9a-f]\):|:000\1:|g' \
+ -e 's|:\([0-9a-f]\)$|:000\1|g' \
+ -e 's|^\([0-9a-f]\):|000\1:|g' )
+
+ done
+
+ # now expand the ::
+ ZEROES=""
+
+ echo "$INPUT" | grep -qs "::"
+ if [ "$?" -eq 0 ]; then
+ GRPS="$( echo "$INPUT" | sed 's|[0-9a-f]||g' | wc -m )"
+ GRPS=$(( GRPS-1 )) # remove carriage return
+ MISSING=$(( 8-GRPS ))
+ while [ $MISSING -gt 0 ]; do
+ ZEROES="$ZEROES:0000"
+ MISSING=$(( MISSING-1 ))
+ done
+
+ # be careful where to place the :
+ INPUT=$( echo "$INPUT" | sed -e 's|\(.\)::\(.\)|\1'$ZEROES':\2|g' \
+ -e 's|\(.\)::$|\1'$ZEROES':0000|g' \
+ -e 's|^::\(.\)|'$ZEROES':0000:\1|g;s|^:||g' )
+ fi
+
+ # an expanded address has 39 chars + CR
+ if [ $(echo $INPUT | wc -m) != 40 ]; then
+ write_log 4 "Error in 'expand_ipv6()' - invalid IPv6 found: '$1' expanded: '$INPUT'"
+ eval "$2='invalid'"
+ return 1
+ fi
+
+ # echo the fully expanded version of the address
+ eval "$2=$INPUT"
+ return 0
+}
# /usr/lib/ddns/luci_dns_helper.sh
#
#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
-#
-# Written in August 2014 by
-#.Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+#.2014-2016 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
# This script is used by luci-app-ddns
-# - getting registered IP
-# - check if possible to get local IP
-# - verifing given DNS- or Proxy-Server
#
# variables in small chars are read from /etc/config/ddns as parameter given here
# variables in big chars are defined inside these scripts as gloval vars
#!/bin/sh
# /usr/lib/ddns/dynamic_dns_updater.sh
#
-# Original written by Eric Paul Bishop, January 2008
#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
+# Original written by Eric Paul Bishop, January 2008
# (Loosely) based on the script on the one posted by exobyte in the forums here:
# http://forum.openwrt.org/viewtopic.php?id=14040
-#
-# extended and partial rewritten in August 2014 by
-#.Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-# to support:
-# - IPv6 DDNS services
-# - DNS Server to retrieve registered IP including TCP transport (Ticket 7820)
-# - Proxy Server to send out updates
-# - force_interval=0 to run once (Luci Ticket 538)
-# - the usage of BIND's host command instead of BusyBox's nslookup if installed
-# - extended Verbose Mode and log file support for better error detection
-# - wait for interface to fully come up, before the first update is done
+# extended and partial rewritten
+#.2014-2016 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
#
# variables in small chars are read from /etc/config/ddns
# variables in big chars are defined inside these scripts as global vars
get_local_ip LOCAL_IP # read local IP
+ # on IPv6 we use expanded version to be shure when comparing
+ [ $use_ipv6 -eq 1 ] && {
+ expand_ipv6 "$LOCAL_IP" LOCAL_IP
+ expand_ipv6 "$REGISTERED_IP" REGISTERED_IP
+ }
+
# prepare update
# never updated or forced immediate then NEXT_TIME = 0
[ $FORCE_SECONDS -eq 0 -o $LAST_TIME -eq 0 ] \
# !!! Use only the script name (without path). Sample:
# !!! "example.com" "update_sample.sh"
#
+# !!! Since ddns-scripts Version 2.5.x additional parameters are supported
+# !!! and a given answer on success is checked (ignored by earlier versions)
+# !!! Additional parameters: [PARAMOPT] and [PARAMENC]; [PARAMENC] is send urlencoded
+#
+# Line syntax: "service" [TAB] "update_url" [TAB] "answer"
+# "service" name used as "option service_name" inside /etc/config/ddns
+# "update_url" update url as given by the provider; custom urls should not saved here
+# "answer" single words inside providers answer string; use "|" to combine "or"
+#
# 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
"dyndns.org" "http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]"
"thatip.com" "http://update.dnsmax.com/update/?username=[USERNAME]&password=[PASSWORD]&resellerid=2&clientname=openwrt&clientversion=8.09&protocolversion=2.0&updatehostname=[DOMAIN]&ip=[IP]"
# Hurricane Electric Dynamic DNS
-"he.net" "http://[DOMAIN]:[PASSWORD]@dyn.dns.he.net/nic/update?hostname=[DOMAIN]&myip=[IP]"
+"he.net" "http://[DOMAIN]:[PASSWORD]@dyn.dns.he.net/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg"
# DNSdynamic.org
"dnsdynamic.org" "http://[USERNAME]:[PASSWORD]@www.dnsdynamic.org/api/?hostname=[DOMAIN]&myip=[IP]"
# OVH
"ovh.com" "http://[USERNAME]:[PASSWORD]@www.ovh.com/nic/update?system=dyndns&hostname=[DOMAIN]&myip=[IP]"
-# dns-o-matic is a free service by opendns.com for updating multiple hosts and
-# dynamic dns services in one api call. To update all your configured services
-# at once, use "all.dnsomatic.com as the hostname.
-"dnsomatic.com" "http://[USERNAME]:[PASSWORD]@updates.dnsomatic.com/nic/update?hostname=[DOMAIN]&myip=[IP]"
+# dns-o-matic is a free service by opendns.com for updating multiple hosts
+"dnsomatic.com" "http://[USERNAME]:[PASSWORD]@updates.dnsomatic.com/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg"
# 3322.org
"3322.org" "http://[USERNAME]:[PASSWORD]@members.3322.org/dyndns/update?system=dyndns&hostname=[DOMAIN]&myip=[IP]"
"mythic-beasts.com" "http://dnsapi4.mythic-beasts.com/?domain=[USERNAME]&password=[PASSWORD]&command=REPLACE%20[DOMAIN]%2060%20A%20DYNAMIC_IP"
# Securepoint Dynamic-DNS-Service (http://www.spdns.de)
-"spdns.de" "http://[USERNAME]:[PASSWORD]@update.spdns.de/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg"
+"spdns.de" "http://[USERNAME]:[PASSWORD]@update.spdns.de/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg"
# duiadns.net - free dynamic DNS
"duiadns.net" "http://ipv4.duia.ro/dynamic.duia?host=[DOMAIN]&password=[PASSWORD]&ip4=[IP]"
"loopia.se" "http://[USERNAME]:[PASSWORD]@dns.loopia.se/XDynDNSServer/XDynDNS.php?system=custom&hostname=[DOMAIN]&myip=[IP]"
# SelfHost.de
-"selfhost.de" "http://carol.selfhost.de/update?username=[USERNAME]&password=[PASSWORD]&myip=[IP]&hostname=1" "good|nochg"
+"selfhost.de" "http://carol.selfhost.de/update?username=[USERNAME]&password=[PASSWORD]&myip=[IP]&hostname=1" "good|nochg"
# no-ip.pl nothing to do with no-ip.com (domain registered to www.domeny.tv) (IP autodetected by provider)
"no-ip.pl" "http://[USERNAME]:[PASSWORD]@update.no-ip.pl/?hostname=[DOMAIN]"
"domains.google.com" "http://[USERNAME]:[PASSWORD]@domains.google.com/nic/update?hostname=[DOMAIN]&myip=[IP]"
# Schokokeks Hosting, schokokeks.org
-"schokokeks.org" "http://[USERNAME]:[PASSWORD]@dyndns.schokokeks.org/nic/update?myip=[IP]"
+"schokokeks.org" "http://[USERNAME]:[PASSWORD]@dyndns.schokokeks.org/nic/update?myip=[IP]" "good|nochg"
# STRATO AG
"strato.de" "http://[USERNAME]:[PASSWORD]@dyndns.strato.com/nic/update?hostname=[DOMAIN]&myip=[IP]"
# Variomedia AG
-"variomedia.de" "http://[USERNAME]:[PASSWORD]@dyndns.variomedia.de/nic/update?hostname=[DOMAIN]&myip=[IP]"
+"variomedia.de" "http://[USERNAME]:[PASSWORD]@dyndns.variomedia.de/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg"
+
+# DtDNS
+"dtdns.com" "http://www.dtdns.com/api/autodns.cfm?id=[DOMAIN]&pw=[PASSWORD]&ip=[IP]"
+
+# dy.fi Dynamic DNS for finnish users (IP autodetected by provider)
+"dy.fi" "http://[USERNAME]:[PASSWORD]@www.dy.fi/nic/update?hostname=[DOMAIN]" "good|nochg"
+
+# duckdns.org
+"duckdns.org" "http://www.duckdns.org/update?domains=[USERNAME]&token=[PASSWORD]&ip=[IP]" "OK"
+# zzzz.io Free Dynamic DNS
+"zzzz.io" "https://zzzz.io/api/v1/update/[DOMAIN]/?token=[PASSWORD]&ip=[IP]" "Updated|No change"
# !!! Use only the script name (without path). Sample:
# !!! "example.com" "update_sample.sh"
#
+# !!! Since ddns-scripts Version 2.5.x additional parameters are supported
+# !!! and a given answer on success is checked (ignored by earlier versions)
+# !!! Additional parameters: [PARAMOPT] and [PARAMENC]; [PARAMENC] is send urlencoded
+#
+# Line syntax: "service" [TAB] "update_url" [TAB] "answer"
+# "service" name used as "option service_name" inside /etc/config/ddns
+# "update_url" update url as given by the provider; custom urls should not saved here
+# "answer" words inside providers answer string; use "|" to combine "or"
+#
# 66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
# IPv6 @ Securepoint Dynamic-DNS-Service
-"spdns.de" "http://[USERNAME]:[PASSWORD]@update.spdns.de/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg"
+"spdns.de" "http://[USERNAME]:[PASSWORD]@update.spdns.de/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg"
# IPv6 @ Hurricane Electric Dynamic DNS
-"he.net" "http://[DOMAIN]:[PASSWORD]@dyn.dns.he.net/nic/update?hostname=[DOMAIN]&myip=[IP]"
+"he.net" "http://[DOMAIN]:[PASSWORD]@dyn.dns.he.net/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg"
# IPv6 @ MyDNS.JP
"mydns.jp" "http://www.mydns.jp/directip.html?MID=[USERNAME]&PWD=[PASSWORD]&IPV6ADDR=[IP]"
"freedns.afraid.org" "http://freedns.afraid.org/dynamic/update.php?[PASSWORD]&address=[IP]"
# IPv6 @ LoopiaDNS
-"loopia.se" "http://[USERNAME]:[PASSWORD]@dns.loopia.se/XDynDNSServer/XDynDNS.php?system=custom&hostname=[DOMAIN]&myip=[IP]"
+"loopia.se" "http://[USERNAME]:[PASSWORD]@dns.loopia.se/XDynDNSServer/XDynDNS.php?system=custom&hostname=[DOMAIN]&myip=[IP]"
# Variomedia AG
-"variomedia.de" "http://[USERNAME]:[PASSWORD]@dyndns.variomedia.de/nic/update?hostname=[DOMAIN]&myip=[IP]"
+"variomedia.de" "http://[USERNAME]:[PASSWORD]@dyndns.variomedia.de/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg"
+
+# IPv6 @ Dyn.com
+"dyndns.org" "http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]"
+# zzzz.io Free Dynamic DNS
+"zzzz.io" "https://zzzz.io/api/v1/update/[DOMAIN]/?token=[PASSWORD]&type=aaaa&ip=[IP]" "Updated|No change"
logistics.aero
magazine.aero
maintenance.aero
-marketplace.aero
media.aero
microlight.aero
modelling.aero
skydiving.aero
software.aero
student.aero
-taxi.aero
trader.aero
trading.aero
trainer.aero
// am : http://en.wikipedia.org/wiki/.am
am
-// an : http://www.una.an/an_domreg/default.asp
-an
-com.an
-net.an
-org.an
-edu.an
-
// ao : http://en.wikipedia.org/wiki/.ao
// http://www.dns.ao/REGISTR.DOC
ao
tv.bo
// br : http://registro.br/dominio/categoria.html
-// Submitted by registry <fneves@registro.br> 2014-08-11
+// Submitted by registry <fneves@registro.br>
br
adm.br
adv.br
org.bt
// bv : No registrations at this time.
-// Submitted by registry <jarle@uninett.no> 2006-06-16
+// Submitted by registry <jarle@uninett.no>
bv
// bw : http://en.wikipedia.org/wiki/.bw
net.cm
// cn : http://en.wikipedia.org/wiki/.cn
-// Submitted by registry <tanyaling@cnnic.cn> 2008-06-11
+// Submitted by registry <tanyaling@cnnic.cn>
cn
ac.cn
com.cn
tw.cn
// co : http://en.wikipedia.org/wiki/.co
-// Submitted by registry <tecnico@uniandes.edu.co> 2008-06-11
+// Submitted by registry <tecnico@uniandes.edu.co>
co
arts.co
com.co
art.dz
// ec : http://www.nic.ec/reg/paso1.asp
-// Submitted by registry <vabboud@nic.ec> 2008-07-04
+// Submitted by registry <vabboud@nic.ec>
ec
com.ec
info.ec
ga
// gb : This registry is effectively dormant
-// Submitted by registry <Damien.Shaw@ja.net> 2008-06-12
+// Submitted by registry <Damien.Shaw@ja.net>
gb
// gd : http://en.wikipedia.org/wiki/.gd
gm
// gn : http://psg.com/dns/gn/gn.txt
-// Submitted by registry <randy@psg.com> 2008-06-17
+// Submitted by registry <randy@psg.com>
gn
ac.gn
com.gn
gq
// gr : https://grweb.ics.forth.gr/english/1617-B-2005.html
-// Submitted by registry <segred@ics.forth.gr> 2008-06-09
+// Submitted by registry <segred@ics.forth.gr>
gr
com.gr
edu.gr
gy
co.gy
com.gy
+edu.gy
+gov.gy
net.gy
+org.gy
// hk : https://www.hkdnr.hk
-// Submitted by registry <hk.tech@hkirc.hk> 2008-06-11
+// Submitted by registry <hk.tech@hkirc.hk>
hk
com.hk
edu.hk
org.il
// im : https://www.nic.im/
-// Submitted by registry <info@nic.im> 2013-11-15
+// Submitted by registry <info@nic.im>
im
ac.im
co.im
// in : http://en.wikipedia.org/wiki/.in
// see also: https://registry.in/Policies
-// Please note, that nic.in is not an offical eTLD, but used by most
+// Please note, that nic.in is not an official eTLD, but used by most
// government institutions.
in
co.in
// jp : http://en.wikipedia.org/wiki/.jp
// http://jprs.co.jp/en/jpdomain.html
-// Submitted by registry <info@jprs.jp> 2014-10-30
+// Submitted by registry <info@jprs.jp>
jp
// jp organizational type names
ac.jp
com.kz
// la : http://en.wikipedia.org/wiki/.la
-// Submitted by registry <gavin.brown@nic.la> 2008-06-10
+// Submitted by registry <gavin.brown@nic.la>
la
int.la
net.la
org.la
// lb : http://en.wikipedia.org/wiki/.lb
-// Submitted by registry <randy@psg.com> 2008-06-17
+// Submitted by registry <randy@psg.com>
lb
com.lb
edu.lb
ac.lk
// lr : http://psg.com/dns/lr/lr.txt
-// Submitted by registry <randy@psg.com> 2008-06-17
+// Submitted by registry <randy@psg.com>
lr
com.lr
edu.lr
org.ms
// mt : https://www.nic.org.mt/go/policy
-// Submitted by registry <help@nic.org.mt> 2013-11-19
+// Submitted by registry <help@nic.org.mt>
mt
com.mt
edu.mt
org.mw
// mx : http://www.nic.mx/
-// Submitted by registry <farias@nic.mx> 2008-06-19
+// Submitted by registry <farias@nic.mx>
mx
com.mx
org.mx
other.nf
store.nf
-// ng : http://psg.com/dns/ng/
+// ng : http://www.nira.org.ng/index.php/join-us/register-ng-domain/189-nira-slds
ng
com.ng
edu.ng
+gov.ng
+i.ng
+mil.ng
+mobi.ng
name.ng
net.ng
org.ng
sch.ng
-gov.ng
-mil.ng
-mobi.ng
-// ni : http://www.nic.ni/dominios.htm
-*.ni
+// ni : http://www.nic.ni/
+com.ni
+gob.ni
+edu.ni
+org.ni
+nom.ni
+net.ni
+mil.ni
+co.ni
+biz.ni
+web.ni
+int.ni
+ac.ni
+in.ni
+info.ni
// nl : http://en.wikipedia.org/wiki/.nl
// https://www.sidn.nl/
*.np
// nr : http://cenpac.net.nr/dns/index.html
-// Confirmed by registry <technician@cenpac.net.nr> 2008-06-17
+// Submitted by registry <technician@cenpac.net.nr>
nr
biz.nr
info.nr
nu
// nz : http://en.wikipedia.org/wiki/.nz
-// Confirmed by registry <jay@nzrs.net.nz> 2014-05-19
+// Submitted by registry <jay@nzrs.net.nz>
nz
ac.nz
co.nz
*.pg
// ph : http://www.domains.ph/FAQ2.asp
-// Submitted by registry <jed@email.com.ph> 2008-06-13
+// Submitted by registry <jed@email.com.ph>
ph
com.ph
net.ph
info.pk
// pl http://www.dns.pl/english/index.html
-// updated by .PL registry on 2015-04-28
+// Submitted by registry
pl
com.pl
net.pl
prof.pr
ac.pr
-// pro : http://www.nic.pro/support_faq.htm
+// pro : http://registry.pro/get-pro
pro
+aaa.pro
aca.pro
+acct.pro
+avocat.pro
bar.pro
cpa.pro
+eng.pro
jur.pro
law.pro
med.pro
-eng.pro
+recht.pro
// ps : http://en.wikipedia.org/wiki/.ps
// http://www.nic.ps/registration/policy.html#reg
belau.pw
// py : http://www.nic.py/pautas.html#seccion_9
-// Confirmed by registry 2012-10-03
+// Submitted by registry
py
com.py
coop.py
// re : http://www.afnic.re/obtenir/chartes/nommage-re/annexe-descriptifs
re
-com.re
asso.re
+com.re
nom.re
// ro : http://www.rotld.ro/
ro
+arts.ro
com.ro
-org.ro
-tm.ro
-nt.ro
-nom.ro
+firm.ro
info.ro
+nom.ro
+nt.ro
+org.ro
rec.ro
-arts.ro
-firm.ro
store.ro
+tm.ro
www.ro
-// rs : http://en.wikipedia.org/wiki/.rs
+// rs : https://www.rnids.rs/en/domains/national-domains
rs
+ac.rs
co.rs
-org.rs
edu.rs
-ac.rs
gov.rs
in.rs
+org.rs
// ru : http://www.cctld.ru/ru/docs/aktiv_8.php
// Industry domains
k-uralsk.ru
kustanai.ru
kuzbass.ru
-magnitka.ru
mytis.ru
nakhodka.ru
nkz.ru
sch.sa
// sb : http://www.sbnic.net.sb/
-// Submitted by registry <lee.humphries@telekom.com.sb> 2008-06-08
+// Submitted by registry <lee.humphries@telekom.com.sb>
sb
com.sb
edu.sb
edu.sc
// sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm
-// Submitted by registry <admin@isoc.sd> 2008-06-17
+// Submitted by registry <admin@isoc.sd>
sd
com.sd
net.sd
info.sd
// se : http://en.wikipedia.org/wiki/.se
-// Submitted by registry <patrik.wallstrom@iis.se> 2014-03-18
+// Submitted by registry <patrik.wallstrom@iis.se>
se
a.se
ac.se
si
// sj : No registrations at this time.
-// Submitted by registry <jarle@uninett.no> 2008-06-16
+// Submitted by registry <jarle@uninett.no>
sj
// sk : http://en.wikipedia.org/wiki/.sk
sk
// sl : http://www.nic.sl
-// Submitted by registry <adam@neoip.com> 2008-06-12
+// Submitted by registry <adam@neoip.com>
sl
com.sl
net.sl
red.sv
// sx : http://en.wikipedia.org/wiki/.sx
-// Confirmed by registry <jcvignes@openregistry.com> 2012-05-31
+// Submitted by registry <jcvignes@openregistry.com>
sx
gov.sx
tg
// th : http://en.wikipedia.org/wiki/.th
-// Submitted by registry <krit@thains.co.th> 2008-06-17
+// Submitted by registry <krit@thains.co.th>
th
ac.th
co.th
turen.tn
// to : http://en.wikipedia.org/wiki/.to
-// Submitted by registry <egullich@colo.to> 2008-06-17
+// Submitted by registry <egullich@colo.to>
to
com.to
gov.to
edu.to
mil.to
-// tp : No registrations at this time.
-// Submitted by Ryan Sleevi <ryan.sleevi@gmail.com> 2014-01-03
-tp
-
// subTLDs: https://www.nic.tr/forms/eng/policies.pdf
// and: https://www.nic.tr/forms/politikalar.pdf
-// Submitted by <mehmetgurevin@gmail.com> 2014-07-19
+// Submitted by <mehmetgurevin@gmail.com>
tr
com.tr
info.tr
xn--czrw28b.tw
// tz : http://www.tznic.or.tz/index.php/domains
-// Confirmed by registry <manager@tznic.or.tz> 2013-01-22
+// Submitted by registry <manager@tznic.or.tz>
tz
ac.tz
co.tz
tv.tz
// ua : https://hostmaster.ua/policy/?ua
-// Submitted by registry <dk@cctld.ua> 2012-04-27
+// Submitted by registry <dk@cctld.ua>
ua
// ua 2LD
com.ua
// lib.wv.us Bug 941670 - Removed at request of Larry W Arnold <arnold@wvlc.lib.wv.us>
lib.wy.us
// k12.ma.us contains school districts in Massachusetts. The 4LDs are
-// managed indepedently except for private (PVT), charter (CHTR) and
-// parochial (PAROCH) schools. Those are delegated dorectly to the
+// managed independently except for private (PVT), charter (CHTR) and
+// parochial (PAROCH) schools. Those are delegated directly to the
// 5LD operators. <k12-ma-hostmaster _ at _ rsuc.gweep.net>
pvt.k12.ma.us
chtr.k12.ma.us
va
// vc : http://en.wikipedia.org/wiki/.vc
-// Submitted by registry <kshah@ca.afilias.info> 2008-06-13
+// Submitted by registry <kshah@ca.afilias.info>
vc
com.vc
net.vc
edu.vc
// ve : https://registro.nic.ve/
-// Confirmed by registry 2012-10-04
-// Updated 2014-05-20 - Bug 940478
+// Submitted by registry
ve
arts.ve
co.ve
xn--ygbi2ammx
// xn--90a3ac ("srb", Cyrillic) : RS
-// http://www.rnids.rs/en/the-.срб-domain
+// https://www.rnids.rs/en/domains/national-domains
срб
xn--90a3ac
пр.срб
// za : http://www.zadna.org.za/content/page/domain-information
ac.za
-agrica.za
+agric.za
alt.za
co.za
edu.za
*.zw
-// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 2015-10-11T22:21:58Z
+// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 2016-01-04T22:39:54Z
// aaa : 2015-02-26 American Automobile Association, Inc.
aaa
// aquarelle : 2014-07-24 Aquarelle.com
aquarelle
+// arab : 2015-11-12 League of Arab States
+arab
+
// aramco : 2014-11-20 Aramco Services Company
aramco
// bargains : 2013-11-14 Half Hallow, LLC
bargains
+// baseball : 2015-10-29 MLB Advanced Media DH, LLC
+baseball
+
// basketball : 2015-08-20 Fédération Internationale de Basketball (FIBA)
basketball
// beats : 2015-05-14 Beats Electronics, LLC
beats
+// beauty : 2015-12-03 L'Oréal
+beauty
+
// beer : 2014-01-09 Top Level Domain Holdings Limited
beer
// bostik : 2015-05-28 Bostik SA
bostik
+// boston : 2015-12-10 Boston Globe Media Partners, LLC
+boston
+
// bot : 2014-12-18 Amazon EU S.à r.l.
bot
// boutique : 2013-11-14 Over Galley, LLC
boutique
+// box : 2015-11-12 NS1 Limited
+box
+
// bradesco : 2014-12-18 Banco Bradesco S.A.
bradesco
// catering : 2013-12-05 New Falls. LLC
catering
+// catholic : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication)
+catholic
+
// cba : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA
cba
// crs : 2014-04-03 Federated Co-operatives Limited
crs
+// cruise : 2015-12-10 Viking River Cruises (Bermuda) Ltd.
+cruise
+
// cruises : 2013-12-05 Spring Way, LLC
cruises
// dish : 2015-07-30 Dish DBS Corporation
dish
+// diy : 2015-11-05 Lifestyle Domain Holdings, Inc.
+diy
+
// dnp : 2013-12-13 Dai Nippon Printing Co., Ltd.
dnp
// fox : 2015-09-11 FOX Registry, LLC
fox
+// free : 2015-12-10 Amazon EU S.à r.l.
+free
+
// fresenius : 2015-07-30 Fresenius Immobilien-Verwaltungs-GmbH
fresenius
// guru : 2013-08-27 Pioneer Cypress, LLC
guru
+// hair : 2015-12-03 L'Oréal
+hair
+
// hamburg : 2014-02-20 Hamburg Top-Level-Domain GmbH
hamburg
// hitachi : 2014-10-31 Hitachi, Ltd.
hitachi
-// hiv : 2014-03-13 dotHIV gemeinnuetziger e.V.
+// hiv : 2014-03-13
hiv
// hkt : 2015-05-14 PCCW-HKT DataCom Services Limited
// nissan : 2014-03-27 NISSAN MOTOR CO., LTD.
nissan
+// nissay : 2015-10-29 Nippon Life Insurance Company
+nissay
+
// nokia : 2015-01-08 Nokia Corporation
nokia
// progressive : 2015-07-23 Progressive Casualty Insurance Company
progressive
-// promo : 2014-12-18 Play.PROMO Oy
+// promo : 2014-12-18
promo
// properties : 2013-12-05 Big Pass, LLC
// pub : 2013-12-12 United TLD Holdco Ltd.
pub
+// pwc : 2015-10-29 PricewaterhouseCoopers LLP
+pwc
+
// qpon : 2013-11-14 dotCOOL, Inc.
qpon
// rip : 2014-07-10 United TLD Holdco Ltd.
rip
+// rmit : 2015-11-19 Royal Melbourne Institute of Technology
+rmit
+
// rocher : 2014-12-18 Ferrero Trading Lux S.A.
rocher
// uconnect : 2015-07-30 FCA US LLC.
uconnect
+// unicom : 2015-10-15 China United Network Communications Corporation Limited
+unicom
+
// university : 2014-03-06 Little Station, LLC
university
// volkswagen : 2015-05-14 Volkswagen Group of America Inc.
volkswagen
+// volvo : 2015-11-12 Volvo Holding Sverige Aktiebolag
+volvo
+
// vote : 2013-11-21 Monolith Registry LLC
vote
москва
xn--80adxhks
+// xn--80aqecdr1a : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication)
+католик
+xn--80aqecdr1a
+
// xn--80asehdb : 2013-07-14 CORE Association
онлайн
xn--80asehdb
ابوظبي
xn--mgbca7dzdo
+// xn--mgbi4ecexp : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication)
+كاثوليك
+xn--mgbi4ecexp
+
// xn--mgbt3dhd : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
همراه
xn--mgbt3dhd
بيتك
xn--ngbe9e0a
+// xn--ngbrx : 2015-11-12 League of Arab States
+عرب
+xn--ngbrx
+
// xn--nqv7f : 2013-11-14 Public Interest Registry
机构
xn--nqv7f
コム
xn--tckwe
+// xn--tiq49xqyj : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication)
+天主教
+xn--tiq49xqyj
+
// xn--unup4y : 2013-07-14 Spring Fields, LLC
游戏
xn--unup4y
// (Note: these are in alphabetical order by company name)
// Amazon CloudFront : https://aws.amazon.com/cloudfront/
-// Submitted by Donavan Miller <donavanm@amazon.com> 2013-03-22
+// Submitted by Donavan Miller <donavanm@amazon.com>
cloudfront.net
// Amazon Elastic Compute Cloud: https://aws.amazon.com/ec2/
-// Submitted by Osman Surkatty <osmans@amazon.com> 2014-12-16
+// Submitted by Luke Wells <lawells@amazon.com>
ap-northeast-1.compute.amazonaws.com
+ap-northeast-2.compute.amazonaws.com
ap-southeast-1.compute.amazonaws.com
ap-southeast-2.compute.amazonaws.com
cn-north-1.compute.amazonaws.cn
+compute-1.amazonaws.com
compute.amazonaws.cn
compute.amazonaws.com
-compute-1.amazonaws.com
-eu-west-1.compute.amazonaws.com
eu-central-1.compute.amazonaws.com
+eu-west-1.compute.amazonaws.com
sa-east-1.compute.amazonaws.com
us-east-1.amazonaws.com
us-gov-west-1.compute.amazonaws.com
z-2.compute-1.amazonaws.com
// Amazon Elastic Beanstalk : https://aws.amazon.com/elasticbeanstalk/
-// Submitted by Adam Stein <astein@amazon.com> 2013-04-02
+// Submitted by Adam Stein <astein@amazon.com>
elasticbeanstalk.com
// Amazon Elastic Load Balancing : https://aws.amazon.com/elasticloadbalancing/
-// Submitted by Scott Vidmar <svidmar@amazon.com> 2013-03-27
+// Submitted by Scott Vidmar <svidmar@amazon.com>
elb.amazonaws.com
// Amazon S3 : https://aws.amazon.com/s3/
-// Submitted by Eric Kinolik <kilo@amazon.com> 2015-04-08
+// Submitted by Luke Wells <lawells@amazon.com>
s3.amazonaws.com
s3-ap-northeast-1.amazonaws.com
+s3-ap-northeast-2.amazonaws.com
s3-ap-southeast-1.amazonaws.com
s3-ap-southeast-2.amazonaws.com
+s3-eu-central-1.amazonaws.com
+s3-eu-west-1.amazonaws.com
s3-external-1.amazonaws.com
s3-external-2.amazonaws.com
s3-fips-us-gov-west-1.amazonaws.com
-s3-eu-central-1.amazonaws.com
-s3-eu-west-1.amazonaws.com
s3-sa-east-1.amazonaws.com
s3-us-gov-west-1.amazonaws.com
s3-us-west-1.amazonaws.com
s3-us-west-2.amazonaws.com
+s3.ap-northeast-2.amazonaws.com
s3.cn-north-1.amazonaws.com.cn
s3.eu-central-1.amazonaws.com
// BetaInABox
-// Submitted by adrian@betainabox.com 2012-09-13
+// Submitted by Adrian <adrian@betainabox.com>
betainabox.com
// CentralNic : http://www.centralnic.com/names/domains
-// Submitted by registry <gavin.brown@centralnic.com> 2012-09-27
+// Submitted by registry <gavin.brown@centralnic.com>
ae.org
ar.com
br.com
za.com
// Africa.com Web Solutions Ltd : https://registry.africa.com
-// Submitted by Gavin Brown <gavin.brown@centralnic.com> 2014-02-04
+// Submitted by Gavin Brown <gavin.brown@centralnic.com>
africa.com
+// Citrix : https://citrix.com
+// Submitted by Alex Stoddard <alex.stoddard@citrix.com>
+xenapponazure.com
+
// iDOT Services Limited : http://www.domain.gr.com
-// Submitted by Gavin Brown <gavin.brown@centralnic.com> 2014-02-04
+// Submitted by Gavin Brown <gavin.brown@centralnic.com>
gr.com
// Radix FZC : http://domains.in.net
-// Submitted by Gavin Brown <gavin.brown@centralnic.com> 2014-02-04
+// Submitted by Gavin Brown <gavin.brown@centralnic.com>
in.net
// US REGISTRY LLC : http://us.org
-// Submitted by Gavin Brown <gavin.brown@centralnic.com> 2014-02-04
+// Submitted by Gavin Brown <gavin.brown@centralnic.com>
us.org
// co.com Registry, LLC : https://registry.co.com
-// Submitted by Gavin Brown <gavin.brown@centralnic.com> 2014-02-04
+// Submitted by Gavin Brown <gavin.brown@centralnic.com>
co.com
// c.la : http://www.c.la/
c.la
// cloudControl : https://www.cloudcontrol.com/
-// Submitted by Tobias Wilken <tw@cloudcontrol.com> 2013-07-23
+// Submitted by Tobias Wilken <tw@cloudcontrol.com>
cloudcontrolled.com
cloudcontrolapp.com
// co.ca : http://registry.co.ca/
co.ca
+// i-registry s.r.o. : http://www.i-registry.cz/
+// Submitted by Martin Semrad <semrad@i-registry.cz>
+co.cz
+
// CDN77.com : http://www.cdn77.com
-// Submitted by Jan Krpes <jan.krpes@cdn77.com> 2015-07-13
+// Submitted by Jan Krpes <jan.krpes@cdn77.com>
c.cdn77.org
cdn77-ssl.net
r.cdn77.net
co.no
// Commerce Guys, SAS
-// Submitted by Damien Tournoud <damien@commerceguys.com> 2015-01-22
+// Submitted by Damien Tournoud <damien@commerceguys.com>
*.platform.sh
// Cupcake : https://cupcake.io/
-// Submitted by Jonathan Rudenberg <jonathan@cupcake.io> 2013-10-08
+// Submitted by Jonathan Rudenberg <jonathan@cupcake.io>
cupcake.is
// DreamHost : http://www.dreamhost.com/
-// Submitted by Andrew Farmer <andrew.farmer@dreamhost.com> 2012-10-02
+// Submitted by Andrew Farmer <andrew.farmer@dreamhost.com>
dreamhosters.com
+// Drobo : http://www.drobo.com/
+// Submitted by Ricardo Padilha <rpadilha@drobo.com>
+mydrobo.com
+
// DuckDNS : http://www.duckdns.org/
-// Submitted by Richard Harper <richard@duckdns.org> 2015-05-17
+// Submitted by Richard Harper <richard@duckdns.org>
duckdns.org
// DynDNS.com : http://www.dyndns.com/services/dns/dyndns/
writesthisblog.com
// EU.org https://eu.org/
-// Submitted by Pierre Beyssac <hostmaster@eu.org> 2015-04-17
-
+// Submitted by Pierre Beyssac <hostmaster@eu.org>
eu.org
al.eu.org
asso.eu.org
us.eu.org
// Fastly Inc. http://www.fastly.com/
-// Submitted by Vladimir Vuksan <vladimir@fastly.com> 2013-05-31
+// Submitted by Vladimir Vuksan <vladimir@fastly.com>
a.ssl.fastly.net
b.ssl.fastly.net
global.ssl.fastly.net
global.prod.fastly.net
// Firebase, Inc.
-// Submitted by Chris Raynor <chris@firebase.com> 2014-01-21
+// Submitted by Chris Raynor <chris@firebase.com>
firebaseapp.com
// Flynn : https://flynn.io
-// Submitted by Jonathan Rudenberg <jonathan@flynn.io> 2014-07-12
+// Submitted by Jonathan Rudenberg <jonathan@flynn.io>
flynnhub.com
// GDS : https://www.gov.uk/service-manual/operations/operating-servicegovuk-subdomains
-// Submitted by David Illsley <david.illsley@digital.cabinet-office.gov.uk> 2014-08-28
+// Submitted by David Illsley <david.illsley@digital.cabinet-office.gov.uk>
service.gov.uk
// GitHub, Inc.
-// Submitted by Ben Toews <btoews@github.com> 2014-02-06
+// Submitted by Ben Toews <btoews@github.com>
github.io
githubusercontent.com
// GlobeHosting, Inc.
-// Submitted by Zoltan Egresi <egresi@globehosting.com> 2013-07-12
+// Submitted by Zoltan Egresi <egresi@globehosting.com>
ro.com
// Google, Inc.
-// Submitted by Eduardo Vela <evn@google.com> 2014-12-19
+// Submitted by Eduardo Vela <evn@google.com>
appspot.com
blogspot.ae
blogspot.al
blogspot.tw
blogspot.ug
blogspot.vn
+cloudfunctions.net
codespot.com
googleapis.com
googlecode.com
withgoogle.com
withyoutube.com
+// Hashbang : https://hashbang.sh
+hashbang.sh
+
// Heroku : https://www.heroku.com/
-// Submitted by Tom Maher <tmaher@heroku.com> 2013-05-02
+// Submitted by Tom Maher <tmaher@heroku.com>
herokuapp.com
herokussl.com
// iki.fi
-// Submitted by Hannu Aronsson <haa@iki.fi> 2009-11-05
+// Submitted by Hannu Aronsson <haa@iki.fi>
iki.fi
// info.at : http://www.info.at/
co.pl
// Microsoft : http://microsoft.com
-// Submitted by Barry Dorrans <bdorrans@microsoft.com> 2014-01-24
+// Submitted by Barry Dorrans <bdorrans@microsoft.com>
azurewebsites.net
azure-mobile.net
cloudapp.net
// Mozilla Foundation : https://mozilla.org/
-// Submited by glob <glob@mozilla.com> 2015-07-06
+// Submitted by glob <glob@mozilla.com>
bmoattachments.org
// Neustar Inc.
-// Submitted by Trung Tran <Trung.Tran@neustar.biz> 2015-04-23
+// Submitted by Trung Tran <Trung.Tran@neustar.biz>
4u.com
+// ngrok : https://ngrok.com/
+// Submitted by Alan Shreve <alan@ngrok.com>
+ngrok.io
+
// NFSN, Inc. : https://www.NearlyFreeSpeech.NET/
-// Submitted by Jeff Wheelhouse <support@nearlyfreespeech.net> 2014-02-02
+// Submitted by Jeff Wheelhouse <support@nearlyfreespeech.net>
nfshost.com
// NYC.mn : http://www.information.nyc.mn
-// Submitted by Matthew Brown <mattbrown@nyc.mn> 2013-03-11
+// Submitted by Matthew Brown <mattbrown@nyc.mn>
nyc.mn
// One Fold Media : http://www.onefoldmedia.com/
-// Submitted by Eddie Jones <eddie@onefoldmedia.com> 2014-06-10
+// Submitted by Eddie Jones <eddie@onefoldmedia.com>
nid.io
// Opera Software, A.S.A.
-// Submitted by Yngve Pettersen <yngve@opera.com> 2009-11-26
+// Submitted by Yngve Pettersen <yngve@opera.com>
operaunite.com
// OutSystems
-// Submitted by Duarte Santos <domain-admin@outsystemscloud.com> 2014-03-11
+// Submitted by Duarte Santos <domain-admin@outsystemscloud.com>
outsystemscloud.com
+// Pagefront : https://www.pagefronthq.com/
+// Submitted by Jason Kriss <jason@pagefronthq.com>
+pagefrontapp.com
+
// .pl domains (grandfathered)
art.pl
gliwice.pl
zakopane.pl
// Pantheon Systems, Inc. : https://pantheon.io/
-// Submitted by Gary Dylina <gary@pantheon.io> 2015-09-14
+// Submitted by Gary Dylina <gary@pantheon.io>
pantheon.io
gotpantheon.com
+// prgmr.com : https://prgmr.com/
+// Submitted by Sarah Newman <owner@prgmr.com>
+xen.prgmr.com
+
// priv.at : http://www.nic.priv.at/
-// Submitted by registry <lendl@nic.at> 2008-06-09
+// Submitted by registry <lendl@nic.at>
priv.at
// QA2
-// Submitted by Daniel Dent (https://www.danieldent.com/) 2015-07-16
+// Submitted by Daniel Dent (https://www.danieldent.com/)
qa2.com
+// Rackmaze LLC : https://www.rackmaze.com
+// Submitted by Kirill Pertsev <kika@rackmaze.com>
+rackmaze.com
+rackmaze.net
+
// Red Hat, Inc. OpenShift : https://openshift.redhat.com/
-// Submitted by Tim Kramer <tkramer@rhcloud.com> 2012-10-24
+// Submitted by Tim Kramer <tkramer@rhcloud.com>
rhcloud.com
// Sandstorm Development Group, Inc. : https://sandcats.io/
-// Submitted by Asheesh Laroia <asheesh@sandstorm.io> 2015-07-21
+// Submitted by Asheesh Laroia <asheesh@sandstorm.io>
sandcats.io
// Service Online LLC : http://drs.ua/
-// Submitted by Serhii Bulakh <support@drs.ua> 2015-07-30
+// Submitted by Serhii Bulakh <support@drs.ua>
biz.ua
co.ua
pp.ua
// SinaAppEngine : http://sae.sina.com.cn/
-// Submitted by SinaAppEngine <saesupport@sinacloud.com> 2015-02-02
+// Submitted by SinaAppEngine <saesupport@sinacloud.com>
sinaapp.com
vipsinaapp.com
1kapp.com
+// Synology, Inc. : https://www.synology.com/
+// Submitted by Rony Weng <ronyweng@synology.com>
+diskstation.me
+dscloud.biz
+dscloud.me
+dscloud.mobi
+dsmynas.com
+dsmynas.net
+dsmynas.org
+familyds.com
+familyds.net
+familyds.org
+i234.me
+myds.me
+synology.me
+
// TASK geographical domains (www.task.gda.pl/uslugi/dns)
gda.pl
gdansk.pl
sopot.pl
// UDR Limited : http://www.udr.hk.com
-// Submitted by registry <hostmaster@udr.hk.com> 2014-11-07
+// Submitted by registry <hostmaster@udr.hk.com>
hk.com
hk.org
ltd.hk
inc.hk
// Yola : https://www.yola.com/
-// Submitted by Stefano Rivera <stefano@yola.com> 2014-07-09
+// Submitted by Stefano Rivera <stefano@yola.com>
yolasite.com
// ZaNiC : http://www.za.net/
-// Submitted by registry <hostmaster@nic.za.net> 2009-10-03
+// Submitted by registry <hostmaster@nic.za.net>
za.net
za.org
+++ /dev/null
-#
-#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
-#
-# script for sending updates to cloudflare.com
-#.2014-2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-# many thanks to Paul for testing and feedback during development
-#
-# This script is parsed by dynamic_dns_functions.sh inside send_update() function
-#
-# using following options from /etc/config/ddns
-# option username - your cloudflare e-mail
-# option password - cloudflare api key, you can get it from cloudflare.com/my-account/
-# option domain - your full hostname to update, in cloudflare its subdomain.domain
-# i.e. myhost.example.com where myhost is the subdomain and example.com is your domain
-#
-# variable __IP already defined with the ip-address to use for update
-#
-[ $use_https -eq 0 ] && write_log 14 "Cloudflare only support updates via Secure HTTP (HTTPS). Please correct configuration!"
-[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'"
-[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'"
-
-local __RECID __URL __KEY __KEYS __FOUND __SUBDOM __DOMAIN __TLD
-
-# split given Host/Domain into TLD, registrable domain, and subdomain
-split_FQDN $domain __TLD __DOMAIN __SUBDOM
-[ $? -ne 0 -o -z "$__DOMAIN" ] && \
- write_log 14 "Wrong Host/Domain configuration ($domain). Please correct configuration!"
-
-# put together what we need
-__DOMAIN="$__DOMAIN.$__TLD"
-
-# parse OpenWrt script with
-# functions for parsing and generating json
-. /usr/share/libubox/jshn.sh
-
-# function copied from /usr/share/libubox/jshn.sh
-# from BB14.09 for backward compatibility to AA12.09
-grep -i "json_get_keys" /usr/share/libubox/jshn.sh >/dev/null 2>&1 || json_get_keys() {
- local __dest="$1"
- local _tbl_cur
-
- if [ -n "$2" ]; then
- json_get_var _tbl_cur "$2"
- else
- _json_get_var _tbl_cur JSON_CUR
- fi
- local __var="${JSON_PREFIX}KEYS_${_tbl_cur}"
- eval "export -- \"$__dest=\${$__var}\"; [ -n \"\${$__var+x}\" ]"
-}
-
-# function to "sed" unwanted string parts from DATFILE
-cleanup() {
- # based on the sample output on cloudflare.com homepage we need to do some cleanup
- sed -i 's/^[ \t]*//;s/[ \t]*$//' $DATFILE # remove invisible chars at beginning and end of lines
- sed -i '/^-$/d' $DATFILE # remove lines with "-" (dash)
- sed -i '/^$/d' $DATFILE # remove empty lines
- sed -i "#'##g" $DATFILE # remove "'" (single quote)
-}
-
-# build url according to cloudflare client api at https://www.cloudflare.com/docs/client-api.html
-# to "rec_load_all" to detect rec_id needed for update
-__URL="https://www.cloudflare.com/api_json.html" # https://www.cloudflare.com/api_json.html
-__URL="${__URL}?a=rec_load_all" # -d 'a=rec_load_all'
-__URL="${__URL}&tkn=$password" # -d 'tkn=8afbe6dea02407989af4dd4c97bb6e25'
-__URL="${__URL}&email=$username" # -d 'email=sample@example.com'
-__URL="${__URL}&z=$__DOMAIN" # -d 'z=example.com'
-
-# lets request the data
-do_transfer "$__URL" || return 1
-
-cleanup # cleanup dat file
-json_load "$(cat $DATFILE)" # lets extract data
-__FOUND=0 # found record indicator
-json_get_var __RES "result" # cloudflare result of last request
-json_get_var __MSG "msg" # cloudflare error message
-[ "$__RES" != "success" ] && {
- write_log 4 "'rec_load_all' failed with error: \n$__MSG"
- return 1
-}
-
-json_select "response"
-json_select "recs"
-json_select "objs"
-json_get_keys __KEYS
-for __KEY in $__KEYS; do
- local __ZONE __DISPLAY __NAME __TYPE
- json_select "$__KEY"
-# json_get_var __ZONE "zone_name" # for debugging
-# json_get_var __DISPLAY "display_name" # for debugging
- json_get_var __NAME "name"
- json_get_var __TYPE "type"
- if [ "$__NAME" = "$domain" ]; then
- # we must verify IPv4 and IPv6 because there might be both for the same host
- [ \( $use_ipv6 -eq 0 -a "$__TYPE" = "A" \) -o \( $use_ipv6 -eq 1 -a "$__TYPE" = "AAAA" \) ] && {
- __FOUND=1 # mark found
- break # found leave for loop
- }
- fi
- json_select ..
-done
-[ $__FOUND -eq 0 ] && {
- # we don't need to continue trying to update cloudflare because record to update does not exist
- # user has to setup record first outside ddns-scripts
- write_log 14 "No valid record found at Cloudflare setup. Please create first!"
-}
-json_get_var __RECID "rec_id" # last thing to do get rec_id
-json_cleanup # cleanup
-write_log 7 "rec_id '$__RECID' detected for host/domain '$domain'"
-
-# build url according to cloudflare client api at https://www.cloudflare.com/docs/client-api.html
-# for "rec_edit" to update IP address
-__URL="https://www.cloudflare.com/api_json.html" # https://www.cloudflare.com/api_json.html
-__URL="${__URL}?a=rec_edit" # -d 'a=rec_edit'
-__URL="${__URL}&tkn=$password" # -d 'tkn=8afbe6dea02407989af4dd4c97bb6e25'
-__URL="${__URL}&id=$__RECID" # -d 'id=9001'
-__URL="${__URL}&email=$username" # -d 'email=sample@example.com'
-__URL="${__URL}&z=$__DOMAIN" # -d 'z=example.com'
-
-[ $use_ipv6 -eq 0 ] && __URL="${__URL}&type=A" # -d 'type=A' (IPv4)
-[ $use_ipv6 -eq 1 ] && __URL="${__URL}&type=AAAA" # -d 'type=AAAA' (IPv6)
-
-# handle subdomain or domain record
-[ -n "$__SUBDOM" ] && __URL="${__URL}&name=$__SUBDOM" # -d 'name=sub' (HOST/SUBDOMAIN)
-[ -z "$__SUBDOM" ] && __URL="${__URL}&name=$__DOMAIN" # -d 'name=example.com'(DOMAIN)
-
-__URL="${__URL}&content=$__IP" # -d 'content=1.2.3.4'
-__URL="${__URL}&service_mode=0" # -d 'service_mode=0'
-__URL="${__URL}&ttl=1" # -d 'ttl=1'
-
-# lets do the update
-do_transfer "$__URL" || return 1
-
-cleanup # cleanup tmp file
-json_load "$(cat $DATFILE)" # lets extract data
-json_get_var __RES "result" # cloudflare result of last request
-json_get_var __MSG "msg" # cloudflare error message
-[ "$__RES" != "success" ] && {
- write_log 4 "'rec_edit' failed with error:\n$__MSG"
- return 1
-}
-write_log 7 "Update of rec_id '$__RECID' successful"
-return 0
+++ /dev/null
-#
-#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
-#
-# script for sending updates to no-ip.com / noip.com
-#.2014-2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-#
-# This script is parsed by dynamic_dns_functions.sh inside send_update() function
-#
-# provider did not reactivate records, if no IP change was recognized
-# so we send a dummy (localhost) and a seconds later we send the correct IP addr
-#
-local __DUMMY
-local __UPDURL="http://[USERNAME]:[PASSWORD]@dynupdate.no-ip.com/nic/update?hostname=[DOMAIN]&myip=[IP]"
-# inside url we need username and password
-[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'"
-[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'"
-
-# set IP version dependend dummy (localhost)
-[ $use_ipv6 -eq 0 ] && __DUMMY="127.0.0.1" || __DUMMY="::1"
-
-# lets do DUMMY transfer
-write_log 7 "sending dummy IP to 'no-ip.com'"
-__URL=$(echo $__UPDURL | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#g" \
- -e "s#\[DOMAIN\]#$domain#g" -e "s#\[IP\]#$__DUMMY#g")
-[ $use_https -ne 0 ] && __URL=$(echo $__URL | sed -e 's#^http:#https:#')
-
-do_transfer "$__URL" || return 1
-
-write_log 7 "'no-ip.com' answered:\n$(cat $DATFILE)"
-# analyse provider answers
-# "good [IP_ADR]" = successful
-# "nochg [IP_ADR]" = no change but OK
-grep -E "good|nochg" $DATFILE >/dev/null 2>&1 || return 1
-
-# lets wait a seconds
-sleep 1
-
-# now send the correct data
-write_log 7 "sending real IP to 'no-ip.com'"
-__URL=$(echo $__UPDURL | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#g" \
- -e "s#\[DOMAIN\]#$domain#g" -e "s#\[IP\]#$__IP#g")
-[ $use_https -ne 0 ] && __URL=$(echo $__URL | sed -e 's#^http:#https:#')
-
-do_transfer "$__URL" || return 1
-
-write_log 7 "'no-ip.com' answered:\n$(cat $DATFILE)"
-# analyse provider answers
-# "good [IP_ADR]" = successful
-# "nochg [IP_ADR]" = no change but OK
-grep -E "good|nochg" $DATFILE >/dev/null 2>&1
-return $? # "0" if "good" or "nochg" found
-
--- /dev/null
+#
+#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
+#
+# script for sending updates to cloudflare.com
+#.2014-2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+# many thanks to Paul for testing and feedback during development
+#
+# This script is parsed by dynamic_dns_functions.sh inside send_update() function
+#
+# using following options from /etc/config/ddns
+# option username - your cloudflare e-mail
+# option password - cloudflare api key, you can get it from cloudflare.com/my-account/
+# option domain - your full hostname to update, in cloudflare its subdomain.domain
+# i.e. myhost.example.com where myhost is the subdomain and example.com is your domain
+#
+# variable __IP already defined with the ip-address to use for update
+#
+[ $use_https -eq 0 ] && write_log 14 "Cloudflare only support updates via Secure HTTP (HTTPS). Please correct configuration!"
+[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'"
+[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'"
+
+local __RECID __URL __KEY __KEYS __FOUND __SUBDOM __DOMAIN __TLD
+
+# split given Host/Domain into TLD, registrable domain, and subdomain
+split_FQDN $domain __TLD __DOMAIN __SUBDOM
+[ $? -ne 0 -o -z "$__DOMAIN" ] && \
+ write_log 14 "Wrong Host/Domain configuration ($domain). Please correct configuration!"
+
+# put together what we need
+__DOMAIN="$__DOMAIN.$__TLD"
+
+# parse OpenWrt script with
+# functions for parsing and generating json
+. /usr/share/libubox/jshn.sh
+
+# function copied from /usr/share/libubox/jshn.sh
+# from BB14.09 for backward compatibility to AA12.09
+grep -i "json_get_keys" /usr/share/libubox/jshn.sh >/dev/null 2>&1 || json_get_keys() {
+ local __dest="$1"
+ local _tbl_cur
+
+ if [ -n "$2" ]; then
+ json_get_var _tbl_cur "$2"
+ else
+ _json_get_var _tbl_cur JSON_CUR
+ fi
+ local __var="${JSON_PREFIX}KEYS_${_tbl_cur}"
+ eval "export -- \"$__dest=\${$__var}\"; [ -n \"\${$__var+x}\" ]"
+}
+
+# function to "sed" unwanted string parts from DATFILE
+cleanup() {
+ # based on the sample output on cloudflare.com homepage we need to do some cleanup
+ sed -i 's/^[ \t]*//;s/[ \t]*$//' $DATFILE # remove invisible chars at beginning and end of lines
+ sed -i '/^-$/d' $DATFILE # remove lines with "-" (dash)
+ sed -i '/^$/d' $DATFILE # remove empty lines
+ sed -i "#'##g" $DATFILE # remove "'" (single quote)
+}
+
+[ -n "$rec_id" ] && __RECID="$rec_id" || {
+ # build url according to cloudflare client api at https://www.cloudflare.com/docs/client-api.html
+ # to "rec_load_all" to detect rec_id needed for update
+ __URL="https://www.cloudflare.com/api_json.html" # https://www.cloudflare.com/api_json.html
+ __URL="${__URL}?a=rec_load_all" # -d 'a=rec_load_all'
+ __URL="${__URL}&tkn=$password" # -d 'tkn=8afbe6dea02407989af4dd4c97bb6e25'
+ __URL="${__URL}&email=$username" # -d 'email=sample@example.com'
+ __URL="${__URL}&z=$__DOMAIN" # -d 'z=example.com'
+
+ # lets request the data
+ do_transfer "$__URL" || return 1
+
+ cleanup # cleanup dat file
+ json_load "$(cat $DATFILE)" # lets extract data
+ __FOUND=0 # found record indicator
+ json_get_var __RES "result" # cloudflare result of last request
+ json_get_var __MSG "msg" # cloudflare error message
+ [ "$__RES" != "success" ] && {
+ write_log 4 "'rec_load_all' failed with error: \n$__MSG"
+ return 1
+ }
+
+ json_select "response"
+ json_select "recs"
+ json_select "objs"
+ json_get_keys __KEYS
+ for __KEY in $__KEYS; do
+ local __ZONE __DISPLAY __NAME __TYPE
+ json_select "$__KEY"
+ # json_get_var __ZONE "zone_name" # for debugging
+ # json_get_var __DISPLAY "display_name" # for debugging
+ json_get_var __NAME "name"
+ json_get_var __TYPE "type"
+ if [ "$__NAME" = "$domain" ]; then
+ # we must verify IPv4 and IPv6 because there might be both for the same host
+ [ \( $use_ipv6 -eq 0 -a "$__TYPE" = "A" \) -o \( $use_ipv6 -eq 1 -a "$__TYPE" = "AAAA" \) ] && {
+ __FOUND=1 # mark found
+ break # found leave for loop
+ }
+ fi
+ json_select ..
+ done
+ [ $__FOUND -eq 0 ] && {
+ # we don't need to continue trying to update cloudflare because record to update does not exist
+ # user has to setup record first outside ddns-scripts
+ write_log 14 "No valid record found at Cloudflare setup. Please create first!"
+ }
+ json_get_var __RECID "rec_id" # last thing to do get rec_id
+ json_cleanup # cleanup
+ write_log 7 "rec_id '$__RECID' detected for host/domain '$domain'"
+}
+
+# build url according to cloudflare client api at https://www.cloudflare.com/docs/client-api.html
+# for "rec_edit" to update IP address
+__URL="https://www.cloudflare.com/api_json.html" # https://www.cloudflare.com/api_json.html
+__URL="${__URL}?a=rec_edit" # -d 'a=rec_edit'
+__URL="${__URL}&tkn=$password" # -d 'tkn=8afbe6dea02407989af4dd4c97bb6e25'
+__URL="${__URL}&id=$__RECID" # -d 'id=9001'
+__URL="${__URL}&email=$username" # -d 'email=sample@example.com'
+__URL="${__URL}&z=$__DOMAIN" # -d 'z=example.com'
+
+[ $use_ipv6 -eq 0 ] && __URL="${__URL}&type=A" # -d 'type=A' (IPv4)
+[ $use_ipv6 -eq 1 ] && __URL="${__URL}&type=AAAA" # -d 'type=AAAA' (IPv6)
+
+# handle subdomain or domain record
+[ -n "$__SUBDOM" ] && __URL="${__URL}&name=$__SUBDOM" # -d 'name=sub' (HOST/SUBDOMAIN)
+[ -z "$__SUBDOM" ] && __URL="${__URL}&name=$__DOMAIN" # -d 'name=example.com'(DOMAIN)
+
+__URL="${__URL}&content=$__IP" # -d 'content=1.2.3.4'
+__URL="${__URL}&service_mode=0" # -d 'service_mode=0'
+__URL="${__URL}&ttl=1" # -d 'ttl=1'
+
+# lets do the update
+do_transfer "$__URL" || return 1
+
+cleanup # cleanup tmp file
+json_load "$(cat $DATFILE)" # lets extract data
+json_get_var __RES "result" # cloudflare result of last request
+json_get_var __MSG "msg" # cloudflare error message
+[ "$__RES" != "success" ] && {
+ write_log 4 "'rec_edit' failed with error:\n$__MSG"
+ return 1
+}
+write_log 7 "Update of rec_id '$__RECID' successful"
+return 0
--- /dev/null
+#
+#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
+#
+# script for sending updates to no-ip.com / noip.com
+#.2014-2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+#
+# This script is parsed by dynamic_dns_functions.sh inside send_update() function
+#
+# provider did not reactivate records, if no IP change was recognized
+# so we send a dummy (localhost) and a seconds later we send the correct IP addr
+#
+local __DUMMY
+local __UPDURL="http://[USERNAME]:[PASSWORD]@dynupdate.no-ip.com/nic/update?hostname=[DOMAIN]&myip=[IP]"
+# inside url we need username and password
+[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'"
+[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'"
+
+# set IP version dependend dummy (localhost)
+[ $use_ipv6 -eq 0 ] && __DUMMY="127.0.0.1" || __DUMMY="::1"
+
+# lets do DUMMY transfer
+write_log 7 "sending dummy IP to 'no-ip.com'"
+__URL=$(echo $__UPDURL | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#g" \
+ -e "s#\[DOMAIN\]#$domain#g" -e "s#\[IP\]#$__DUMMY#g")
+[ $use_https -ne 0 ] && __URL=$(echo $__URL | sed -e 's#^http:#https:#')
+
+do_transfer "$__URL" || return 1
+
+write_log 7 "'no-ip.com' answered:\n$(cat $DATFILE)"
+# analyse provider answers
+# "good [IP_ADR]" = successful
+# "nochg [IP_ADR]" = no change but OK
+grep -E "good|nochg" $DATFILE >/dev/null 2>&1 || return 1
+
+# lets wait a seconds
+sleep 1
+
+# now send the correct data
+write_log 7 "sending real IP to 'no-ip.com'"
+__URL=$(echo $__UPDURL | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#g" \
+ -e "s#\[DOMAIN\]#$domain#g" -e "s#\[IP\]#$__IP#g")
+[ $use_https -ne 0 ] && __URL=$(echo $__URL | sed -e 's#^http:#https:#')
+
+do_transfer "$__URL" || return 1
+
+write_log 7 "'no-ip.com' answered:\n$(cat $DATFILE)"
+# analyse provider answers
+# "good [IP_ADR]" = successful
+# "nochg [IP_ADR]" = no change but OK
+grep -E "good|nochg" $DATFILE >/dev/null 2>&1
+return $? # "0" if "good" or "nochg" found
+
#
-# Copyright (C) 2009-2014 OpenWrt.org
+# Copyright (C) 2009-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=dnscrypt-proxy
-PKG_VERSION:=1.6.0
-PKG_RELEASE:=2
+PKG_VERSION:=1.6.1
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://download.dnscrypt.org/dnscrypt-proxy
-PKG_MD5SUM:=039b8106cf4e15302dc2487cb7fbb17b
+PKG_MD5SUM:=6fc2a8c57007d582dee3313979a4d1b5
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
endef
define Build/Compile
- $(TARGET_CC) $(TARGET_CFLAGS) -D__UCLIBC__ $(PKG_BUILD_DIR)/ether-wake.c -o $(PKG_BUILD_DIR)/etherwake
+ $(TARGET_CC) $(TARGET_CFLAGS) -D__UCLIBC__ $(TARGET_LDFLAGS) $(PKG_BUILD_DIR)/ether-wake.c -o $(PKG_BUILD_DIR)/etherwake
endef
define Package/etherwake/install
#
-# Copyright (C) 2008-2014 OpenWrt.org
+# Copyright (C) 2008-2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=freeradius2
PKG_VERSION:=2.2.8
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=freeradius-server-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=\
$(if $(CONFIG_FREERADIUS_OPENSSL),--with,--without)-openssl \
$(if $(CONFIG_FREERADIUS_OPENSSL),--with-openssl-includes="$(STAGING_DIR)/usr/include",) \
$(if $(CONFIG_FREERADIUS_OPENSSL),--with-openssl-libraries="$(STAGING_DIR)/usr/lib",) \
+ $(if $(CONFIG_FREERADIUS_OPENSSL),--disable-openssl-version-check,) \
--with-system-libtool \
--with-system-libltdl \
--enable-strict-dependencies \
include $(TOPDIR)/rules.mk
PKG_NAME:=fwknop
-PKG_VERSION:=2.6.6
-PKG_RELEASE:=3
+PKG_VERSION:=2.6.8
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://www.cipherdyne.org/fwknop/download
-PKG_MD5SUM:=1372aeaf1e33ab1d6b9906ef9b5cd02e
+PKG_MD5SUM:=1259adc5cff5e29006e4c3ce9f9b2711
PKG_MAINTAINER:=Jonathan Bennett <JBennett@incomsystems.biz>
PKG_LICENSE:=GPLv2
PKG_INSTALL:=1
gen_confs()
{
[ -f /tmp/access.conf.tmp ] && rm /tmp/access.conf.tmp
- if [ "`uci get fwknopd.@config[0].PCAP_INTF`" = ""]
+ if [ -z "$( uci get fwknopd.@config[0].PCAP_INTF )" ]
then
. /lib/functions/network.sh
network_get_physdev device wan
+++ /dev/null
-diff --git a/CREDITS b/CREDITS
-index de17d9e..38e2108 100644
---- a/CREDITS
-+++ b/CREDITS
-@@ -1,5 +1,6 @@
- Jonathan Bennett
- - Contributed OpenWRT support - see the extras/openwrt/ directory.
-+ - Suggested the addition of the --key-gen option to fwknopd.
-
- Sebastien Jeanquier
- - Assisted with getting fwknop included in BackTrack Linux - the choice
-diff --git a/ChangeLog b/ChangeLog
-index 21a5093..4daf008 100644
---- a/ChangeLog
-+++ b/ChangeLog
-@@ -1,3 +1,8 @@
-+fwknop-2.6.7 (05//2015):
-+ - Added --key-gen to fwknopd. This feature was suggested by Jonathan
-+ Bennett, and will help with ease of use efforts. The first platform to
-+ take advantage of this will likely be OpenWRT thanks to Jonathan.
-+
- fwknop-2.6.6 (04/23/2015):
- - [server] Add the ability for fwknopd to function as an generic SPA
- gateway. This allows scenarios such as the fwknopd system providing DHCP
-diff --git a/client/config_init.c b/client/config_init.c
-index cdb233d..f0ae135 100644
---- a/client/config_init.c
-+++ b/client/config_init.c
-@@ -199,7 +199,7 @@ static int critical_var_array[] =
- };
-
- /**
-- * @brief Generate Rijndael + HMAC keys from /dev/random (base64 encoded) and exit.
-+ * @brief Generate Rijndael + HMAC keys from /dev/urandom (base64 encoded).
- *
- * @param options FKO command line option structure
- */
-diff --git a/client/fwknop_common.h b/client/fwknop_common.h
-index aef20c4..c57db02 100644
---- a/client/fwknop_common.h
-+++ b/client/fwknop_common.h
-@@ -69,8 +69,6 @@
- #define MAX_HOSTNAME_LEN 70
- #define MAX_URL_HOST_LEN 256
- #define MAX_URL_PATH_LEN 1024
--#define MAX_KEY_LEN 128
--#define MAX_B64_KEY_LEN 180
-
- /* fwknop client configuration parameters and values
- */
-@@ -156,10 +154,10 @@ typedef struct fko_cli_options
- unsigned char use_gpg;
- unsigned char use_gpg_agent;
- unsigned char gpg_no_signing_pw;
-+ unsigned char key_gen;
- int time_offset_plus;
- int time_offset_minus;
- int fw_timeout;
-- int key_gen;
-
- char use_rc_stanza[MAX_LINE_LEN];
- unsigned char got_named_stanza;
-diff --git a/common/common.h b/common/common.h
-index b63e7c2..c7b2e57 100644
---- a/common/common.h
-+++ b/common/common.h
-@@ -157,6 +157,9 @@ enum {
- #define MAX_GPG_KEY_ID 128
- #define MAX_USERNAME_LEN 30
-
-+#define MAX_KEY_LEN 128
-+#define MAX_B64_KEY_LEN 180
-+
- /* Command line argument / argv handling
- */
- #define MAX_CMDLINE_ARGS 30 /*!< should be way more than enough */
-diff --git a/doc/fwknop.man.asciidoc b/doc/fwknop.man.asciidoc
-index 070ac77..efa99a7 100644
---- a/doc/fwknop.man.asciidoc
-+++ b/doc/fwknop.man.asciidoc
-@@ -196,6 +196,11 @@ GENERAL OPTIONS
- keys are generally more secure than passphrases that are typed in from the
- command line.
-
-+*--key-gen-file*='<file>'::
-+ Write generated keys to the specified file. Note that the file is
-+ overwritten if it already exists. If this option is not given, then
-+ *--key-gen* writes the keys to stdout.
-+
- *--key-len*='<length>'::
- Specify the number of bytes for a generated Rijndael key. The maximum size
- is currently 128 bytes.
-diff --git a/server/cmd_opts.h b/server/cmd_opts.h
-index bc1eee1..d7a645c 100644
---- a/server/cmd_opts.h
-+++ b/server/cmd_opts.h
-@@ -141,6 +141,10 @@ enum {
- FW_LIST = 0x200,
- FW_LIST_ALL,
- FW_FLUSH,
-+ KEY_GEN_FILE,
-+ KEY_LEN,
-+ HMAC_KEY_LEN,
-+ HMAC_DIGEST_TYPE,
- AFL_PKT_FILE,
- GPG_HOME_DIR,
- GPG_EXE_PATH,
-@@ -178,7 +182,12 @@ static struct option cmd_opts[] =
- {"fault-injection-tag", 1, NULL, FAULT_INJECTION_TAG},
- {"help", 0, NULL, 'h'},
- {"interface", 1, NULL, 'i'},
-- {"kill", 0, NULL, 'K'},
-+ {"key-gen", 0, NULL, 'k'},
-+ {"key-gen-file", 1, NULL, KEY_GEN_FILE },
-+ {"key-len", 1, NULL, KEY_LEN },
-+ {"hmac-key-len", 1, NULL, HMAC_KEY_LEN },
-+ {"hmac-digest-type", 1, NULL, HMAC_DIGEST_TYPE },
-+ {"kill", 0, NULL, 'K' },
- {"fw-flush", 0, NULL, FW_FLUSH },
- {"fw-list", 0, NULL, FW_LIST },
- {"fw-list-all", 0, NULL, FW_LIST_ALL },
-diff --git a/server/config_init.c b/server/config_init.c
-index 0ddceee..2f1d293 100644
---- a/server/config_init.c
-+++ b/server/config_init.c
-@@ -201,6 +201,69 @@ validate_int_var_ranges(fko_srv_options_t *opts)
- return;
- }
-
-+/**
-+ * @brief Generate Rijndael + HMAC keys from /dev/urandom (base64 encoded).
-+ *
-+ * @param options FKO command line option structure
-+ */
-+static void
-+generate_keys(fko_srv_options_t *options)
-+{
-+ char key_base64[MAX_B64_KEY_LEN+1];
-+ char hmac_key_base64[MAX_B64_KEY_LEN+1];
-+
-+ FILE *key_gen_file_ptr = NULL;
-+ int res;
-+
-+ /* Set defaults and validate for --key-gen mode
-+ */
-+ if(options->key_len == 0)
-+ options->key_len = FKO_DEFAULT_KEY_LEN;
-+
-+ if(options->hmac_key_len == 0)
-+ options->hmac_key_len = FKO_DEFAULT_HMAC_KEY_LEN;
-+
-+ if(options->hmac_type == 0)
-+ options->hmac_type = FKO_DEFAULT_HMAC_MODE;
-+
-+ /* Zero out the key buffers */
-+ memset(key_base64, 0x00, sizeof(key_base64));
-+ memset(hmac_key_base64, 0x00, sizeof(hmac_key_base64));
-+
-+ /* Generate the key through libfko */
-+ res = fko_key_gen(key_base64, options->key_len,
-+ hmac_key_base64, options->hmac_key_len,
-+ options->hmac_type);
-+
-+ if(res != FKO_SUCCESS)
-+ {
-+ log_msg(LOG_ERR, "%s: fko_key_gen: Error %i - %s",
-+ MY_NAME, res, fko_errstr(res));
-+ clean_exit(options, NO_FW_CLEANUP, EXIT_FAILURE);
-+ }
-+
-+ if(options->key_gen_file[0] != '\0')
-+ {
-+ if ((key_gen_file_ptr = fopen(options->key_gen_file, "w")) == NULL)
-+ {
-+ log_msg(LOG_ERR, "Unable to create key gen file: %s: %s",
-+ options->key_gen_file, strerror(errno));
-+ clean_exit(options, NO_FW_CLEANUP, EXIT_FAILURE);
-+ }
-+ fprintf(key_gen_file_ptr, "KEY_BASE64: %s\nHMAC_KEY_BASE64: %s\n",
-+ key_base64, hmac_key_base64);
-+ fclose(key_gen_file_ptr);
-+ fprintf(stdout, "[+] Wrote Rijndael and HMAC keys to: %s",
-+ options->key_gen_file);
-+ }
-+ else
-+ {
-+ fprintf(stdout, "KEY_BASE64: %s\nHMAC_KEY_BASE64: %s\n",
-+ key_base64, hmac_key_base64);
-+ }
-+ clean_exit(options, NO_FW_CLEANUP, EXIT_SUCCESS);
-+}
-+
- /* Parse the config file...
- */
- static void
-@@ -427,7 +490,7 @@ validate_options(fko_srv_options_t *opts)
- if(opts->config[CONF_ENABLE_DIGEST_PERSISTENCE] == NULL)
- set_config_entry(opts, CONF_ENABLE_DIGEST_PERSISTENCE,
- DEF_ENABLE_DIGEST_PERSISTENCE);
--
-+
- /* Enable destination rule.
- */
- if(opts->config[CONF_ENABLE_DESTINATION_RULE] == NULL)
-@@ -928,8 +991,9 @@ config_init(fko_srv_options_t *opts, int argc, char **argv)
-
- /* First, scan the command-line args for -h/--help or an alternate
- * configuration file. If we find an alternate config file, use it,
-- * otherwise use the default. We also grab any override config files
-- * as well.
-+ * otherwise use the default. We also grab any override config files
-+ * as well. In addition, we handle key generation here since this is
-+ * independent of configuration parsing.
- */
- while ((cmd_arg = getopt_long(argc, argv,
- GETOPTS_OPTION_STRING, cmd_opts, &index)) != -1) {
-@@ -952,6 +1016,45 @@ config_init(fko_srv_options_t *opts, int argc, char **argv)
- if(got_override_config > 0)
- break;
-
-+ case 'k':
-+ opts->key_gen = 1;
-+ break;
-+ case KEY_GEN_FILE:
-+ opts->key_gen = 1;
-+ strlcpy(opts->key_gen_file, optarg, sizeof(opts->key_gen_file));
-+ break;
-+ case KEY_LEN: /* used in --key-gen mode only */
-+ opts->key_len = strtol_wrapper(optarg, 1,
-+ MAX_KEY_LEN, NO_EXIT_UPON_ERR, &is_err);
-+ if(is_err != FKO_SUCCESS)
-+ {
-+ log_msg(LOG_ERR,
-+ "Invalid key length '%s', must be in [%d-%d]",
-+ optarg, 1, MAX_KEY_LEN);
-+ clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);
-+ }
-+ break;
-+ case HMAC_DIGEST_TYPE: /* used in --key-gen mode only */
-+ if((opts->hmac_type = hmac_digest_strtoint(optarg)) < 0)
-+ {
-+ log_msg(LOG_ERR,
-+ "* Invalid hmac digest type: %s, use {md5,sha1,sha256,sha384,sha512}",
-+ optarg);
-+ clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);
-+ }
-+ break;
-+ case HMAC_KEY_LEN: /* used in --key-gen mode only */
-+ opts->hmac_key_len = strtol_wrapper(optarg, 1,
-+ MAX_KEY_LEN, NO_EXIT_UPON_ERR, &is_err);
-+ if(is_err != FKO_SUCCESS)
-+ {
-+ log_msg(LOG_ERR,
-+ "Invalid hmac key length '%s', must be in [%d-%d]",
-+ optarg, 1, MAX_KEY_LEN);
-+ clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);
-+ }
-+ break;
-+
- /* Look for override configuration file arg.
- */
- case 'O':
-@@ -965,6 +1068,9 @@ config_init(fko_srv_options_t *opts, int argc, char **argv)
- }
- }
-
-+ if(opts->key_gen)
-+ generate_keys(opts);
-+
- /* If no alternate configuration file was specified, we use the
- * default.
- */
-diff --git a/server/fwknopd_common.h b/server/fwknopd_common.h
-index ecf2a81..8c33eaa 100644
---- a/server/fwknopd_common.h
-+++ b/server/fwknopd_common.h
-@@ -585,10 +585,14 @@ typedef struct fko_srv_options
- unsigned char fw_list; /* List current firewall rules */
- unsigned char fw_list_all; /* List all current firewall rules */
- unsigned char fw_flush; /* Flush current firewall rules */
-+ unsigned char key_gen; /* Generate keys and exit */
-+ unsigned char exit_after_parse_config; /* Parse config and exit */
-+
-+ /* Operational flags
-+ */
- unsigned char test; /* Test mode flag */
- unsigned char afl_fuzzing; /* SPA pkts from stdin for AFL fuzzing */
- unsigned char verbose; /* Verbose mode flag */
-- unsigned char exit_after_parse_config; /* Parse config and exit */
- unsigned char enable_udp_server; /* Enable UDP server mode */
-
- unsigned char firewd_disable_check_support; /* Don't use firewall-cmd ... -C */
-@@ -605,6 +609,13 @@ typedef struct fko_srv_options
- int tcp_server_pid;
- int lock_fd;
-
-+ /* Values used in --key-gen mode only
-+ */
-+ char key_gen_file[MAX_PATH_LEN];
-+ int key_len;
-+ int hmac_key_len;
-+ int hmac_type;
-+
- #if USE_FILE_CACHE
- struct digest_cache_list *digest_cache; /* In-memory digest cache list */
- #endif
-diff --git a/test/tests/basic_operations.pl b/test/tests/basic_operations.pl
-index f4dde2e..76a509d 100644
---- a/test/tests/basic_operations.pl
-+++ b/test/tests/basic_operations.pl
-@@ -390,6 +390,14 @@
- 'exec_err' => $YES,
- 'cmdline' => "$default_client_args --key-gen -K " . 'A'x1030
- },
-+ {
-+ 'category' => 'basic operations',
-+ 'subcategory' => 'server',
-+ 'detail' => '--key-gen file path (-K) too long',
-+ 'function' => \&generic_exec,
-+ 'exec_err' => $YES,
-+ 'cmdline' => "$fwknopdCmd --key-gen --key-gen-file " . 'A'x1030
-+ },
-
- {
- 'category' => 'basic operations',
-diff --git a/test/tests/rijndael.pl b/test/tests/rijndael.pl
-index 26aab6a..34af65e 100644
---- a/test/tests/rijndael.pl
-+++ b/test/tests/rijndael.pl
-@@ -421,33 +421,6 @@
- 'key_file' => $cf{'rc_named_key'},
- },
-
-- ### --key-gen tests
-- {
-- 'category' => 'Rijndael',
-- 'subcategory' => 'client',
-- 'detail' => '--key-gen',
-- 'function' => \&generic_exec,
-- 'cmdline' => "$fwknopCmd --key-gen",
-- 'positive_output_matches' => [qr/^KEY_BASE64\:?\s\S{10}/,
-- qw/HMAC_KEY_BASE64\:?\s\S{10}/],
-- },
-- {
-- 'category' => 'Rijndael',
-- 'subcategory' => 'client',
-- 'detail' => "--key-gen $uniq_keys key uniqueness",
-- 'function' => \&key_gen_uniqueness,
-- 'cmdline' => "$fwknopCmd --key-gen", ### no valgrind string (too slow for 100 client exec's)
-- 'disable_valgrind' => $YES,
-- },
-- {
-- 'category' => 'Rijndael',
-- 'subcategory' => 'client',
-- 'detail' => '--key-gen to file',
-- 'function' => \&generic_exec,
-- 'cmdline' => "$fwknopCmd --key-gen --key-gen-file $key_gen_file",
-- 'positive_output_matches' => [qr/Wrote.*\skeys/],
-- },
--
- ### rc file tests
- {
- 'category' => 'Rijndael',
-diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl
-index fc1a8af..fd80f04 100644
---- a/test/tests/rijndael_hmac.pl
-+++ b/test/tests/rijndael_hmac.pl
-@@ -58,6 +58,59 @@
- 'exec_err' => $YES,
- },
-
-+ ### --key-gen tests
-+ {
-+ 'category' => 'Rijndael+HMAC',
-+ 'subcategory' => 'client',
-+ 'detail' => '--key-gen',
-+ 'function' => \&generic_exec,
-+ 'cmdline' => "$fwknopCmd --key-gen",
-+ 'positive_output_matches' => [qr/^KEY_BASE64\:?\s\S{10}/,
-+ qw/HMAC_KEY_BASE64\:?\s\S{10}/],
-+ },
-+ {
-+ 'category' => 'Rijndael+HMAC',
-+ 'subcategory' => 'server',
-+ 'detail' => '--key-gen',
-+ 'function' => \&generic_exec,
-+ 'cmdline' => "$fwknopdCmd --key-gen",
-+ 'positive_output_matches' => [qr/^KEY_BASE64\:?\s\S{10}/,
-+ qw/HMAC_KEY_BASE64\:?\s\S{10}/],
-+ },
-+ {
-+ 'category' => 'Rijndael+HMAC',
-+ 'subcategory' => 'client',
-+ 'detail' => "--key-gen $uniq_keys key uniqueness",
-+ 'function' => \&key_gen_uniqueness,
-+ 'cmdline' => "$fwknopCmd --key-gen", ### no valgrind string (too slow for 100 exec's)
-+ 'disable_valgrind' => $YES,
-+ },
-+ {
-+ 'category' => 'Rijndael+HMAC',
-+ 'subcategory' => 'server',
-+ 'detail' => "--key-gen $uniq_keys key uniqueness",
-+ 'function' => \&key_gen_uniqueness,
-+ 'cmdline' => "$fwknopdCmd --key-gen", ### no valgrind string (too slow for 100 exec's)
-+ 'disable_valgrind' => $YES,
-+ },
-+ {
-+ 'category' => 'Rijndael+HMAC',
-+ 'subcategory' => 'client',
-+ 'detail' => '--key-gen to file',
-+ 'function' => \&generic_exec,
-+ 'cmdline' => "$fwknopCmd --key-gen --key-gen-file $key_gen_file",
-+ 'positive_output_matches' => [qr/Wrote.*\skeys/],
-+ },
-+ {
-+ 'category' => 'Rijndael+HMAC',
-+ 'subcategory' => 'server',
-+ 'detail' => '--key-gen to file',
-+ 'function' => \&generic_exec,
-+ 'cmdline' => "$fwknopdCmd --key-gen --key-gen-file $key_gen_file",
-+ 'positive_output_matches' => [qr/Wrote.*\skeys/],
-+ },
-+
-+ ### complete cycle tests
- {
- 'category' => 'Rijndael+HMAC',
- 'subcategory' => 'client+server',
include $(TOPDIR)/rules.mk
PKG_NAME:=git
-PKG_VERSION:=2.6.3
+PKG_VERSION:=2.7.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/software/scm/git/
-PKG_MD5SUM:=5a6375349c3f13c8dbbabfc327bae429
+PKG_MD5SUM:=eece7b1e87983271621a0cb6aab37a25
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
include $(TOPDIR)/rules.mk
PKG_NAME:=gnunet
-PKG_SOURCE_VERSION:=36366
+PKG_SOURCE_VERSION:=36713
PKG_VERSION:=0.10.1-svn$(PKG_SOURCE_VERSION)
-PKG_RELEASE:=1
+PKG_RELEASE:=3
# ToDo:
# - break-out {peer,name,data}store for each backend
$(if $(CONFIG_PACKAGE_$(PKG_NAME)-mysql),--with-mysql="$(STAGING_DIR)/usr",--without-mysql) \
$(if $(CONFIG_PACKAGE_$(PKG_NAME)-pgsql),--with-postgresql="$(STAGING_DIR)/usr/bin/pg_config",--without-postgresql) \
$(if $(CONFIG_PACKAGE_$(PKG_NAME)-sqlite),--with-sqlite="$(STAGING_DIR)/usr",--without-sqlite) \
+ $(if $(CONFIG_PACKAGE_$(PKG_NAME)-experiments),--enable-experimental,--disable-experimental) \
--with-extractor=$(STAGING_DIR)/usr \
--with-gnutls=$(STAGING_DIR)/usr \
--with-libgnurl=$(STAGING_DIR)/usr \
$(INSTALL_DIR) $(1)/usr/bin $(1)/usr/lib/gnunet/libexec
$(INSTALL_DIR) $(1)/usr/share/gnunet/config.d $(1)/usr/share/gnunet/hellos
- ( for bin in arm ats core config ecc identity nat-server nse \
+ ( for bin in arm ats cadet core config ecc identity nat nat-server nse \
peerinfo peerstore revocation scalarproduct statistics transport uri; do \
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/gnunet-$$$$bin $(1)/usr/bin/ ; \
done )
service-core service-dht service-identity service-nse \
service-peerinfo service-peerstore service-regex \
service-revocation service-scalarproduct-alice \
- service-scalarproduct-bob service-set service-statistics \
+ service-scalarproduct-bob service-scalarproduct-ecc-alice \
+ service-scalarproduct-ecc-bob service-set service-statistics \
service-transport; do \
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/gnunet/libexec/gnunet-$$$$lex $(1)/usr/lib/gnunet/libexec ; \
done )
BIN_conversation:=conversation conversation-test
LIB_conversation:=conversation microphone speaker
PLUGIN_conversation:=gnsrecord_conversation
-LIBEXEC_conversation:=helper-audio-playback helper-audio-record
+LIBEXEC_conversation:=helper-audio-playback helper-audio-record service-conversation
CONF_conversation:=conversation
DEPENDS_transport-http_client:=+libgnurl
PLUGIN_transport-wlan:=transport_wlan
LIBEXEC_transport-wlan:=helper-transport-wlan
-DEPENDS_experiments:=+libglpk
-PLUGIN_experiments:=ats_mlp ats_ril
+DEPENDS_experiments:=+libglpk +gnunet-sqlite
+BIN_experiments:=multicast rps
+LIB_experiments:=consensus dv env multicast psyc psycstore psycutil rps secretsharing social
+PLUGIN_experiments:=ats_mlp ats_ril namecache_flat namestore_flat psycstore_sqlite transport_dv
+LIBEXEC_experiments:=service-consensus service-dv service-evil-consensus service-multicast service-psyc service-psycstore service-rps service-secretsharing service-social
+CONF_experiments:=consensus dv multicast psyc psycstore rps secretsharing social
DEPENDS_fs:=+gnunet-datastore +libextractor
BIN_fs:=auto-share directory download download-manager.scm fs publish unindex search
LIBEXEC_transport-bluetooth:=helper-transport-bluetooth
DEPENDS_utils:=+certtool +openssl-util
-BIN_utils:=gns-proxy-setup-ca transport-certificate-creation
+BIN_utils:=gns-proxy-setup-ca transport-certificate-creation scrypt
DEPENDS_vpn:=+kmod-tun +iptables
BIN_vpn:=vpn
# $1 "Type"
# $2 "Name"
local __TYPE="$1"
- local __NAME="$2"
+ local __NAME="${2/_/-}"
[ "${__TYPE}" = "gnunet-config" ] && _gnunet_section="${__NAME}"
[ "${__TYPE}" = "gnunet-exit-service" ] && _gnunet_section="${__NAME}.gnunet."
}
include $(TOPDIR)/rules.mk
PKG_NAME:=gnurl
-PKG_VERSION:=7.43.0
+PKG_VERSION:=7.45.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://gnunet.org/sites/default/files
-PKG_MD5SUM:=67c6667d8843cc514b230f2ce8d80f0e
+PKG_MD5SUM:=32b18f37d3a594dba9192e7e4254ce70
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=haproxy
-PKG_VERSION:=1.5.14
-PKG_RELEASE:=16
+PKG_VERSION:=1.5.15
+PKG_RELEASE:=13
PKG_SOURCE:=haproxy-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://haproxy.1wt.eu/download/1.5/src/
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
-PKG_MD5SUM:=ad9d7262b96ba85a0f8c6acc6cb9edde
+PKG_MD5SUM:=eeaa35744f84c92184cd735ee56dd0a3
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
PKG_LICENSE:=GPL-2.0
--- /dev/null
+From 4818bc3035bccc00d8c3fc9b14ec37366cac3059 Mon Sep 17 00:00:00 2001
+From: Jerome Duval <jerome.duval@gmail.com>
+Date: Mon, 2 Nov 2015 17:47:43 +0000
+Subject: [PATCH 01/10] BUG/BUILD: replace haproxy-systemd-wrapper with
+ $(EXTRA) in install-bin.
+
+[wt: this should be backported to 1.6 and 1.5 as well since some platforms
+ don't build the systemd-wrapper]
+(cherry picked from commit 796d2fc136359c31c5c35f00c0751890ab42a016)
+(cherry picked from commit 9d0b47d96825b0584ea81c826a96ed8babcc016b)
+---
+ Makefile | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 9556069..e3199b2 100644
+--- a/Makefile
++++ b/Makefile
+@@ -719,10 +719,9 @@ install-doc:
+ install -m 644 doc/$$x.txt "$(DESTDIR)$(DOCDIR)" ; \
+ done
+
+-install-bin: haproxy haproxy-systemd-wrapper
++install-bin: haproxy $(EXTRA)
+ install -d "$(DESTDIR)$(SBINDIR)"
+- install haproxy "$(DESTDIR)$(SBINDIR)"
+- install haproxy-systemd-wrapper "$(DESTDIR)$(SBINDIR)"
++ install haproxy $(EXTRA) "$(DESTDIR)$(SBINDIR)"
+
+ install: install-bin install-man install-doc
+
+--
+2.4.10
+
+++ /dev/null
-From df0a5960987b3cb663dcfa93d29c21acc13cd3e3 Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Thu, 9 Jul 2015 11:20:00 +0200
-Subject: [PATCH 1/4] BUG/MINOR: log: missing some ARGC_* entries in
- fmt_directives()
-
-ARGC_CAP was not added to fmt_directives() which is used to format
-error messages when failing to parse log format expressions. The
-whole switch/case has been reorganized to match the declaration
-order making it easier to spot missing values. The default is not
-the "log" directive anymore but "undefined" asking to report the
-bug.
-
-Backport to 1.5 is not strictly needed but is desirable at least
-for code sanity.
-(cherry picked from commit 53e1a6d31743b1bef6063ff30b812521391ae3c3)
----
- src/log.c | 24 ++++++++++++++----------
- 1 file changed, 14 insertions(+), 10 deletions(-)
-
-diff --git a/src/log.c b/src/log.c
-index 1a5ad25..f0a3072 100644
---- a/src/log.c
-+++ b/src/log.c
-@@ -167,22 +167,26 @@ struct logformat_var_args var_args_list[] = {
- static inline const char *fmt_directive(const struct proxy *curproxy)
- {
- switch (curproxy->conf.args.ctx) {
-- case ARGC_UIF:
-- return "unique-id-format";
-+ case ARGC_ACL:
-+ return "acl";
-+ case ARGC_STK:
-+ return "stick";
-+ case ARGC_TRK:
-+ return "track-sc";
-+ case ARGC_LOG:
-+ return "log-format";
- case ARGC_HRQ:
- return "http-request";
- case ARGC_HRS:
- return "http-response";
-- case ARGC_STK:
-- return "stick";
-- case ARGC_TRK:
-- return "track-sc"; break;
-+ case ARGC_UIF:
-+ return "unique-id-format";
- case ARGC_RDR:
-- return "redirect"; break;
-- case ARGC_ACL:
-- return "acl"; break;
-+ return "redirect";
-+ case ARGC_CAP:
-+ return "capture";
- default:
-- return "log-format";
-+ return "undefined(please report this bug)"; /* must never happen */
- }
- }
-
---
-2.3.6
-
--- /dev/null
+From 1af6a324c3206902f69bd2c9838e94ffb4cee3ae Mon Sep 17 00:00:00 2001
+From: Lukas Tribus <luky-37@hotmail.com>
+Date: Thu, 5 Nov 2015 13:59:30 +0100
+Subject: [PATCH 02/10] BUG/MINOR: acl: don't use record layer in req_ssl_ver
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The initial record layer version in a SSL handshake may be set to TLSv1.0
+or similar for compatibility reasons, this is allowed as per RFC5246
+Appendix E.1 [1]. Some implementations are Openssl [2] and NSS [3].
+
+A related issue has been fixed some time ago in commit 57d229747
+("BUG/MINOR: acl: req_ssl_sni fails with SSLv3 record version").
+
+Fix this by using the real client hello version instead of the record
+layer version.
+
+This was reported by Julien Vehent and analyzed by Cyril Bonté.
+The initial patch is from Julien Vehent as well.
+
+This should be backported to stable series, the req_ssl_ver keyword was
+first introduced in 1.3.16.
+
+[1] https://tools.ietf.org/html/rfc5246#appendix-E.1
+[2] https://github.com/openssl/openssl/commit/4a1cf50187659e60c5867ecbbc36e37b2605d2c3
+[3] https://bugzilla.mozilla.org/show_bug.cgi?id=774547
+(cherry picked from commit c93242cab986087f06a4655d14fec18eecb7f5f4)
+(cherry picked from commit b048a6eb3d9cb518e4a378e20ba2a801afec553c)
+---
+ src/payload.c | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/src/payload.c b/src/payload.c
+index f62163c..b8f1ca3 100644
+--- a/src/payload.c
++++ b/src/payload.c
+@@ -148,21 +148,24 @@ smp_fetch_req_ssl_ver(struct proxy *px, struct session *s, void *l7, unsigned in
+ data = (const unsigned char *)s->req->buf->p;
+ if ((*data >= 0x14 && *data <= 0x17) || (*data == 0xFF)) {
+ /* SSLv3 header format */
+- if (bleft < 5)
++ if (bleft < 11)
+ goto too_short;
+
+- version = (data[1] << 16) + data[2]; /* version: major, minor */
++ version = (data[1] << 16) + data[2]; /* record layer version: major, minor */
+ msg_len = (data[3] << 8) + data[4]; /* record length */
+
+ /* format introduced with SSLv3 */
+ if (version < 0x00030000)
+ goto not_ssl;
+
+- /* message length between 1 and 2^14 + 2048 */
+- if (msg_len < 1 || msg_len > ((1<<14) + 2048))
++ /* message length between 6 and 2^14 + 2048 */
++ if (msg_len < 6 || msg_len > ((1<<14) + 2048))
+ goto not_ssl;
+
+ bleft -= 5; data += 5;
++
++ /* return the client hello client version, not the record layer version */
++ version = (data[4] << 16) + data[5]; /* client hello version: major, minor */
+ } else {
+ /* SSLv2 header format, only supported for hello (msg type 1) */
+ int rlen, plen, cilen, silen, chlen;
+--
+2.4.10
+
+++ /dev/null
-From ea31f225c2c93a25b8bef7a9241a89cecfd9d350 Mon Sep 17 00:00:00 2001
-From: Baptiste Assmann <bedis9@gmail.com>
-Date: Fri, 17 Jul 2015 21:59:42 +0200
-Subject: [PATCH 2/4] DOC: usesrc root privileges requirements
-
-The "usesrc" parameter of the source statement requires root privileges.
-(cherry picked from commit 91bd337d90cb347feda34b01402f3471c8a4833c)
----
- doc/configuration.txt | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/doc/configuration.txt b/doc/configuration.txt
-index 6714afb..64697a4 100644
---- a/doc/configuration.txt
-+++ b/doc/configuration.txt
-@@ -6117,6 +6117,8 @@ source <addr>[:<port>] [interface <name>]
- is possible at the server level using the "source" server option. Refer to
- section 5 for more information.
-
-+ In order to work, "usesrc" requires root privileges.
-+
- Examples :
- backend private
- # Connect to the servers using our 192.168.1.200 source address
---
-2.3.6
-
--- /dev/null
+From ef8a113d59e89b2214adf7ab9f9b0b75905a7050 Mon Sep 17 00:00:00 2001
+From: lsenta <laurent.senta@gmail.com>
+Date: Fri, 13 Nov 2015 10:44:22 +0100
+Subject: [PATCH 03/10] BUG: http: do not abort keep-alive connections on
+ server timeout
+
+When a server timeout is detected on the second or nth request of a keep-alive
+connection, HAProxy closes the connection without writing a response.
+Some clients would fail with a remote disconnected exception and some
+others would retry potentially unsafe requests.
+
+This patch removes the special case and makes sure a 504 timeout is
+written back whenever a server timeout is handled.
+
+Signed-off-by: lsenta <laurent.senta@gmail.com>
+(cherry picked from commit 1e1f41d0f3473d86da84dc3785b7d7cbef6e9044)
+(cherry picked from commit 1f279c0b116f7fbc208793fffbd256c3c736fc52)
+---
+ src/proto_http.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/src/proto_http.c b/src/proto_http.c
+index 17742c6..e7e1785 100644
+--- a/src/proto_http.c
++++ b/src/proto_http.c
+@@ -5782,8 +5782,6 @@ int http_wait_for_response(struct session *s, struct channel *rep, int an_bit)
+ else if (rep->flags & CF_READ_TIMEOUT) {
+ if (msg->err_pos >= 0)
+ http_capture_bad_message(&s->be->invalid_rep, s, msg, msg->msg_state, s->fe);
+- else if (txn->flags & TX_NOT_FIRST)
+- goto abort_keep_alive;
+
+ s->be->be_counters.failed_resp++;
+ if (objt_server(s->target)) {
+--
+2.4.10
+
+++ /dev/null
-From eee374c28ea8ea22834ff14515b5584bc3e0c7b5 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Courr=C3=A8ges-Anglas?= <jca@wxcvbn.org>
-Date: Sat, 25 Jul 2015 16:50:52 -0600
-Subject: [PATCH 3/4] BUILD: ssl: Allow building against libssl without SSLv3.
-
-If SSLv3 is explicitely requested but not available, warn the user and
-bail out.
-(cherry picked from commit 17c3f6284cf605e47f6525c077bc644c45272849)
----
- src/ssl_sock.c | 16 ++++++++++++++--
- 1 file changed, 14 insertions(+), 2 deletions(-)
-
-diff --git a/src/ssl_sock.c b/src/ssl_sock.c
-index 7d77d36..2ae45ec 100644
---- a/src/ssl_sock.c
-+++ b/src/ssl_sock.c
-@@ -1405,8 +1405,14 @@ int ssl_sock_prepare_ctx(struct bind_conf *bind_conf, SSL_CTX *ctx, struct proxy
- ssloptions |= SSL_OP_NO_TLSv1_2;
- if (bind_conf->ssl_options & BC_SSL_O_NO_TLS_TICKETS)
- ssloptions |= SSL_OP_NO_TICKET;
-- if (bind_conf->ssl_options & BC_SSL_O_USE_SSLV3)
-+ if (bind_conf->ssl_options & BC_SSL_O_USE_SSLV3) {
-+#ifndef OPENSSL_NO_SSL3
- SSL_CTX_set_ssl_version(ctx, SSLv3_server_method());
-+#else
-+ Alert("SSLv3 support requested but unavailable.\n");
-+ cfgerr++;
-+#endif
-+ }
- if (bind_conf->ssl_options & BC_SSL_O_USE_TLSV10)
- SSL_CTX_set_ssl_version(ctx, TLSv1_server_method());
- #if SSL_OP_NO_TLSv1_1
-@@ -1750,8 +1756,14 @@ int ssl_sock_prepare_srv_ctx(struct server *srv, struct proxy *curproxy)
- options |= SSL_OP_NO_TLSv1_2;
- if (srv->ssl_ctx.options & SRV_SSL_O_NO_TLS_TICKETS)
- options |= SSL_OP_NO_TICKET;
-- if (srv->ssl_ctx.options & SRV_SSL_O_USE_SSLV3)
-+ if (srv->ssl_ctx.options & SRV_SSL_O_USE_SSLV3) {
-+#ifndef OPENSSL_NO_SSL3
- SSL_CTX_set_ssl_version(srv->ssl_ctx.ctx, SSLv3_client_method());
-+#else
-+ Alert("SSLv3 support requested but unavailable.");
-+ cfgerr++;
-+#endif
-+ }
- if (srv->ssl_ctx.options & SRV_SSL_O_USE_TLSV10)
- SSL_CTX_set_ssl_version(srv->ssl_ctx.ctx, TLSv1_client_method());
- #if SSL_OP_NO_TLSv1_1
---
-2.3.6
-
--- /dev/null
+From c0d56134320e507c82952f3d2a03f76b701945cb Mon Sep 17 00:00:00 2001
+From: Willy Tarreau <w@1wt.eu>
+Date: Wed, 18 Nov 2015 11:59:55 +0100
+Subject: [PATCH 04/10] BUG/MEDIUM: http: switch the request channel to
+ no-delay once done.
+
+There's an issue when sending POST data that came in a second packet,
+the CF_NEVER_WAIT flag is not always set on the request channel, while
+the server is waiting for the request. We must always set this flag in
+this case since we're not going to shut down after sending, contrary
+to the response side.
+
+Note that option http-no-delay works around this issue.
+
+Reproducer :
+
+listen px
+ mode http
+ timeout client 10s
+ timeout server 5s
+ timeout connect 3s
+ option http-server-close
+ #option http-no-delay
+ bind :8001
+ server s1 127.0.0.1:8003
+
+$ (printf "POST / HTTP/1.1\r\nTransfer-encoding: chunked\r\n\r\n"; sleep 0.01; printf "10\r\nAZERTYUIOPQSDFGH\r\n0\r\n\r\n") | nc6 0 8001
+
+Before this fix :
+
+12:03:31.946763 epoll_wait(3, {{EPOLLIN, {u32=5, u64=5}}}, 200, 1000) = 1
+12:03:32.634175 accept4(5, {sa_family=AF_INET, sin_port=htons(53849), sin_addr=inet_addr("127.0.0.1")}, [16], SOCK_NONBLOCK) = 6
+12:03:32.634318 setsockopt(6, SOL_TCP, TCP_NODELAY, [1], 4) = 0
+12:03:32.634434 accept4(5, 0x7ffccfbb2cf0, [128], SOCK_NONBLOCK) = -1 EAGAIN (Resource temporarily unavailable)
+12:03:32.634574 recvfrom(6, "POST / HTTP/1.1\r\nTransfer-encodi"..., 8192, 0, NULL, NULL) = 47
+12:03:32.634809 setsockopt(6, SOL_TCP, TCP_QUICKACK, [1], 4) = 0
+12:03:32.634952 socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 7
+12:03:32.635031 fcntl(7, F_SETFL, O_RDONLY|O_NONBLOCK) = 0
+12:03:32.635089 setsockopt(7, SOL_TCP, TCP_NODELAY, [1], 4) = 0
+12:03:32.635153 connect(7, {sa_family=AF_INET, sin_port=htons(8003), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
+12:03:32.635315 epoll_wait(3, {}, 200, 0) = 0
+12:03:32.635394 sendto(7, "POST / HTTP/1.1\r\nTransfer-encodi"..., 66, MSG_DONTWAIT|MSG_NOSIGNAL, NULL, 0) = 66
+12:03:32.635527 recvfrom(6, 0x7f0224e66024, 8192, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
+12:03:32.635651 epoll_ctl(3, EPOLL_CTL_ADD, 6, {EPOLLIN|0x2000, {u32=6, u64=6}}) = 0
+12:03:32.635782 epoll_wait(3, {}, 200, 0) = 0
+12:03:32.635842 recvfrom(7, 0x7f0224e66024, 8192, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
+12:03:32.635924 epoll_ctl(3, EPOLL_CTL_ADD, 7, {EPOLLIN|0x2000, {u32=7, u64=7}}) = 0
+12:03:32.636027 epoll_wait(3, {{EPOLLIN, {u32=6, u64=6}}}, 200, 1000) = 1
+12:03:32.644892 recvfrom(6, "10\r\nAZERTYUIOPQSDFGH\r\n0\r\n\r\n", 8192, 0, NULL, NULL) = 27
+12:03:32.645016 epoll_wait(3, {}, 200, 0) = 0
+12:03:32.645105 sendto(7, "10\r\nAZERTYUIOPQSDFGH\r\n0\r\n\r\n", 27, MSG_DONTWAIT|MSG_NOSIGNAL|MSG_MORE, NULL, 0) = 27
+
+After the fix :
+
+11:59:12.538617 connect(7, {sa_family=AF_INET, sin_port=htons(8003), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
+11:59:12.538787 epoll_wait(3, {}, 200, 0) = 0
+11:59:12.538867 sendto(7, "POST / HTTP/1.1\r\nTransfer-encodi"..., 66, MSG_DONTWAIT|MSG_NOSIGNAL, NULL, 0) = 66
+11:59:12.539031 recvfrom(6, 0x7f832ce45024, 8192, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
+11:59:12.539161 epoll_ctl(3, EPOLL_CTL_ADD, 6, {EPOLLIN|0x2000, {u32=6, u64=6}}) = 0
+11:59:12.539259 epoll_wait(3, {}, 200, 0) = 0
+11:59:12.539337 recvfrom(7, 0x7f832ce45024, 8192, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
+11:59:12.539421 epoll_ctl(3, EPOLL_CTL_ADD, 7, {EPOLLIN|0x2000, {u32=7, u64=7}}) = 0
+11:59:12.539499 epoll_wait(3, {{EPOLLIN, {u32=6, u64=6}}}, 200, 1000) = 1
+11:59:12.548519 recvfrom(6, "10\r\nAZERTYUIOPQSDFGH\r\n0\r\n\r\n", 8192, 0, NULL, NULL) = 27
+11:59:12.548844 epoll_wait(3, {}, 200, 0) = 0
+11:59:12.549012 sendto(7, "10\r\nAZERTYUIOPQSDFGH\r\n0\r\n\r\n", 27, MSG_DONTWAIT|MSG_NOSIGNAL, NULL, 0) = 27
+11:59:12.549454 epoll_wait(3, {}, 200, 1000) = 0
+
+This fix must be backported to 1.6, 1.5 and 1.4.
+(cherry picked from commit 7f876a1eeb14ffae708327aad8a0b4b029da5e26)
+(cherry picked from commit 712a5339f384db62796aa4d4901e091dd7fd24dd)
+---
+ src/proto_http.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/src/proto_http.c b/src/proto_http.c
+index e7e1785..b32e778 100644
+--- a/src/proto_http.c
++++ b/src/proto_http.c
+@@ -5001,6 +5001,13 @@ int http_sync_req_state(struct session *s)
+ */
+ chn->cons->flags |= SI_FL_NOHALF;
+
++ /* In any case we've finished parsing the request so we must
++ * disable Nagle when sending data because 1) we're not going
++ * to shut this side, and 2) the server is waiting for us to
++ * send pending data.
++ */
++ chn->flags |= CF_NEVER_WAIT;
++
+ if (txn->rsp.msg_state == HTTP_MSG_ERROR)
+ goto wait_other_side;
+
+@@ -5015,7 +5022,6 @@ int http_sync_req_state(struct session *s)
+ /* if any side switches to tunnel mode, the other one does too */
+ channel_auto_read(chn);
+ txn->req.msg_state = HTTP_MSG_TUNNEL;
+- chn->flags |= CF_NEVER_WAIT;
+ goto wait_other_side;
+ }
+
+@@ -5048,7 +5054,6 @@ int http_sync_req_state(struct session *s)
+ if ((txn->flags & TX_CON_WANT_MSK) == TX_CON_WANT_TUN) {
+ channel_auto_read(chn);
+ txn->req.msg_state = HTTP_MSG_TUNNEL;
+- chn->flags |= CF_NEVER_WAIT;
+ }
+ }
+
+--
+2.4.10
+
+++ /dev/null
-From e4766ba031e1fea8f2ca139316dc4e8209e960c2 Mon Sep 17 00:00:00 2001
-From: Daniel Jakots <vigdis@chown.me>
-Date: Wed, 29 Jul 2015 08:03:08 +0200
-Subject: [PATCH 4/4] DOC/MINOR: fix OpenBSD versions where haproxy works
-
-(cherry picked from commit 17d228be14762b282e5262262c45ecee4c265552)
----
- README | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/README b/README
-index add7f06..e267730 100644
---- a/README
-+++ b/README
-@@ -39,7 +39,7 @@ and assign it to the TARGET variable :
- - solaris for Solaris 8 or 10 (others untested)
- - freebsd for FreeBSD 5 to 10 (others untested)
- - osx for Mac OS/X
-- - openbsd for OpenBSD 3.1 to 5.2 (others untested)
-+ - openbsd for OpenBSD 3.1 and above
- - aix51 for AIX 5.1
- - aix52 for AIX 5.2
- - cygwin for Cygwin
---
-2.3.6
-
+++ /dev/null
-From 955587271031d66e9b7a768e3bb18dae00b60cc6 Mon Sep 17 00:00:00 2001
-From: Thierry FOURNIER <tfournier@arpalert.org>
-Date: Wed, 8 Jul 2015 00:15:20 +0200
-Subject: [PATCH 05/13] BUG/MINOR: http/sample: gmtime/localtime can fail
-
-The man said that gmtime() and localtime() can return a NULL value.
-This is not tested. It appears that all the values of a 32 bit integer
-are valid, but it is better to check the return of these functions.
-
-However, if the integer move from 32 bits to 64 bits, some 64 values
-can be unsupported.
-(cherry picked from commit fac9ccfb705702f211f99e67d5f5d5129002086a)
-[wt: we only have sample_conv_date() in 1.5]
----
- src/proto_http.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/proto_http.c b/src/proto_http.c
-index 5db64b5..02dc42b 100644
---- a/src/proto_http.c
-+++ b/src/proto_http.c
-@@ -11249,6 +11249,8 @@ static int sample_conv_http_date(const struct arg *args, struct sample *smp)
- curr_date += args[0].data.sint;
-
- tm = gmtime(&curr_date);
-+ if (!tm)
-+ return 0;
-
- temp = get_trash_chunk();
- temp->len = snprintf(temp->str, temp->size - temp->len,
---
-2.4.6
-
--- /dev/null
+From e77015cdc18ab74aba61cdf57de56d06be5c2a4d Mon Sep 17 00:00:00 2001
+From: Willy Tarreau <w@1wt.eu>
+Date: Wed, 14 Jan 2015 11:48:58 +0100
+Subject: [PATCH 05/10] MINOR: config: extend the default max hostname length
+ to 64 and beyond
+
+Some users reported that the default max hostname length of 32 is too
+short in some environments. This patch does two things :
+
+ - it relies on the system's max hostname length as found in MAXHOSTNAMELEN
+ if it is set. This is the most logical thing to do as the system libs
+ generally present the appropriate value supported by the system. This
+ value is 64 on Linux and 256 on Solaris, to give a few examples.
+
+ - otherwise it defaults to 64
+
+It is still possible to override this value by defining MAX_HOSTNAME_LEN at
+build time. After some observation time, this patch may be backported to
+1.5 if it does not cause any build issue, as it is harmless and may help
+some users.
+(cherry picked from commit 75abcb3106e2c27ef983df885558cf94e01f717a)
+
+Cc: Lukas Tribus <luky-37@hotmail.com>
+Cc: jose.castro.leon@cern.ch
+
+[wt: no issue reported so far and Jose rightfully asked for it in 1.5]
+---
+ include/common/defaults.h | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/include/common/defaults.h b/include/common/defaults.h
+index 0075509..a191b8a 100644
+--- a/include/common/defaults.h
++++ b/include/common/defaults.h
+@@ -190,8 +190,12 @@
+
+ /* Maximum host name length */
+ #ifndef MAX_HOSTNAME_LEN
+-#define MAX_HOSTNAME_LEN 32
+-#endif
++#if MAXHOSTNAMELEN
++#define MAX_HOSTNAME_LEN MAXHOSTNAMELEN
++#else
++#define MAX_HOSTNAME_LEN 64
++#endif // MAXHOSTNAMELEN
++#endif // MAX_HOSTNAME_LEN
+
+ /* Maximum health check description length */
+ #ifndef HCHK_DESC_LEN
+--
+2.4.10
+
--- /dev/null
+From 3de8e7ab8d9125402cc1a8fb48ee475ee21d7d4c Mon Sep 17 00:00:00 2001
+From: Willy Tarreau <w@1wt.eu>
+Date: Wed, 25 Nov 2015 20:11:11 +0100
+Subject: [PATCH 06/10] BUG/MEDIUM: http: don't enable auto-close on the
+ response side
+
+There is a bug where "option http-keep-alive" doesn't force a response
+to stay in keep-alive if the server sends the FIN along with the response
+on the second or subsequent response. The reason is that the auto-close
+was forced enabled when recycling the HTTP transaction and it's never
+disabled along the response processing chain before the SHUTR gets a
+chance to be forwarded to the client side. The MSG_DONE state of the
+HTTP response properly disables it but too late.
+
+There's no more reason for enabling auto-close here, because either it
+doesn't matter in non-keep-alive modes because the connection is closed,
+or it is automatically enabled by process_stream() when it sees there's
+no analyser on the stream.
+
+This bug also affects 1.5 so a backport is desired.
+(cherry picked from commit 714ea78c9a09fe6a35a1f2d86af8f7fc9abb64d1)
+(cherry picked from commit a15091be17f27fcf4e3a84338df1a8b732e396a1)
+---
+ src/proto_http.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/proto_http.c b/src/proto_http.c
+index b32e778..5facfbb 100644
+--- a/src/proto_http.c
++++ b/src/proto_http.c
+@@ -4946,11 +4946,13 @@ void http_end_txn_clean_session(struct session *s)
+ s->rep->flags |= CF_EXPECT_MORE;
+ }
+
+- /* we're removing the analysers, we MUST re-enable events detection */
++ /* we're removing the analysers, we MUST re-enable events detection.
++ * We don't enable close on the response channel since it's either
++ * already closed, or in keep-alive with an idle connection handler.
++ */
+ channel_auto_read(s->req);
+ channel_auto_close(s->req);
+ channel_auto_read(s->rep);
+- channel_auto_close(s->rep);
+
+ /* we're in keep-alive with an idle connection, monitor it */
+ si_idle_conn(s->req->cons);
+--
+2.4.10
+
+++ /dev/null
-From 6c7351bdd0778bc171a2b54faed058eadc8c9d0d Mon Sep 17 00:00:00 2001
-From: Baptiste Assmann <bedis9@gmail.com>
-Date: Mon, 3 Aug 2015 11:42:50 +0200
-Subject: [PATCH 06/13] DOC: typo in 'redirect', 302 code meaning
-
-302 means a temprary move, not a permanent one
-(cherry picked from commit ea849c0cca63b1b56c9c36f9c3504caa5e826816)
----
- doc/configuration.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/doc/configuration.txt b/doc/configuration.txt
-index 64697a4..e8d8b2a 100644
---- a/doc/configuration.txt
-+++ b/doc/configuration.txt
-@@ -5443,7 +5443,7 @@ redirect scheme <sch> [code <code>] <option> [{if | unless} <condition>]
- is desired. Only codes 301, 302, 303, 307 and 308 are supported,
- with 302 used by default if no code is specified. 301 means
- "Moved permanently", and a browser may cache the Location. 302
-- means "Moved permanently" and means that the browser should not
-+ means "Moved temporarily" and means that the browser should not
- cache the redirection. 303 is equivalent to 302 except that the
- browser will fetch the location with a GET method. 307 is just
- like 302 but makes it clear that the same method must be reused.
---
-2.4.6
-
--- /dev/null
+From 9154bc92ed11c6de75573dec341b6a0ce68bd0eb Mon Sep 17 00:00:00 2001
+From: Willy Tarreau <w@1wt.eu>
+Date: Wed, 25 Nov 2015 20:17:27 +0100
+Subject: [PATCH 07/10] BUG/MEDIUM: stream: fix half-closed timeout handling
+
+client-fin and server-fin are bogus. They are applied on the write
+side after a SHUTR was seen. The immediate effect is that sometimes
+if a SHUTR was seen after a SHUTW on the same side, the timeout is
+enabled again regardless of the fact that the output is already
+closed. This results in the timeout event not to be processed and
+a busy poll loop to happen until another timeout on the stream gets
+rid of it. Note that haproxy continues its job during this, it's just
+that it eats all the CPU trying to handle an event that it ignores.
+
+An reproducible case consists in having a client stop reading data from
+a server to ensure data remain in the response buffer, then the client
+sends a shutdown(write). If abortonclose is enabled on haproxy, the
+shutdown is passed to the server side and the server responds with a
+SHUTR that cannot immediately be forwarded to the client since the
+buffer is full. During this time the event is ignored and the task is
+woken again in loops.
+
+It is worth noting that the timeout handling since 1.5 is a bit fragile
+and that it might be possible that other similar conditions still exist,
+so the timeout handling should be audited regarding this issue.
+
+Many thanks to BaiYang for providing detailed information showing the
+problem in action.
+
+This bug also affects 1.5 thus the fix must be backported.
+(cherry picked from commit f25b3573d65fd2411c7537b7b0a4817b478df909)
+[Note for 1.5, it's in session.c here]
+(cherry picked from commit 44e86286159474a52dc74f80d3271504cc6f1550)
+---
+ src/session.c | 16 ----------------
+ 1 file changed, 16 deletions(-)
+
+diff --git a/src/session.c b/src/session.c
+index 7520a85..2b2ad78 100644
+--- a/src/session.c
++++ b/src/session.c
+@@ -2213,10 +2213,6 @@ struct task *process_session(struct task *t)
+ if (unlikely((s->req->flags & (CF_SHUTW|CF_SHUTW_NOW|CF_AUTO_CLOSE|CF_SHUTR)) ==
+ (CF_AUTO_CLOSE|CF_SHUTR))) {
+ channel_shutw_now(s->req);
+- if (tick_isset(s->fe->timeout.clientfin)) {
+- s->rep->wto = s->fe->timeout.clientfin;
+- s->rep->wex = tick_add(now_ms, s->rep->wto);
+- }
+ }
+
+ /* shutdown(write) pending */
+@@ -2241,10 +2237,6 @@ struct task *process_session(struct task *t)
+ if (s->req->prod->flags & SI_FL_NOHALF)
+ s->req->prod->flags |= SI_FL_NOLINGER;
+ si_shutr(s->req->prod);
+- if (tick_isset(s->fe->timeout.clientfin)) {
+- s->rep->wto = s->fe->timeout.clientfin;
+- s->rep->wex = tick_add(now_ms, s->rep->wto);
+- }
+ }
+
+ /* it's possible that an upper layer has requested a connection setup or abort.
+@@ -2391,10 +2383,6 @@ struct task *process_session(struct task *t)
+ if (unlikely((s->rep->flags & (CF_SHUTW|CF_SHUTW_NOW|CF_AUTO_CLOSE|CF_SHUTR)) ==
+ (CF_AUTO_CLOSE|CF_SHUTR))) {
+ channel_shutw_now(s->rep);
+- if (tick_isset(s->be->timeout.serverfin)) {
+- s->req->wto = s->be->timeout.serverfin;
+- s->req->wex = tick_add(now_ms, s->req->wto);
+- }
+ }
+
+ /* shutdown(write) pending */
+@@ -2417,10 +2405,6 @@ struct task *process_session(struct task *t)
+ if (s->rep->prod->flags & SI_FL_NOHALF)
+ s->rep->prod->flags |= SI_FL_NOLINGER;
+ si_shutr(s->rep->prod);
+- if (tick_isset(s->be->timeout.serverfin)) {
+- s->req->wto = s->be->timeout.serverfin;
+- s->req->wex = tick_add(now_ms, s->req->wto);
+- }
+ }
+
+ if (s->req->prod->state == SI_ST_DIS || s->req->cons->state == SI_ST_DIS)
+--
+2.4.10
+
+++ /dev/null
-From c3453d53f2862b22d8c8e7d2399dfc38ec966aa4 Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Sun, 9 Aug 2015 10:56:35 +0200
-Subject: [PATCH 07/13] DOC: mention that %ms is left-padded with zeroes.
-
-That's important to emit logs.
-(cherry picked from commit 812c88ec126e8fc4fc0f7853f265594d03c63956)
----
- doc/configuration.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/doc/configuration.txt b/doc/configuration.txt
-index e8d8b2a..1d95b5b 100644
---- a/doc/configuration.txt
-+++ b/doc/configuration.txt
-@@ -12381,7 +12381,7 @@ Please refer to the table below for currently defined variables :
- | | %hrl | captured_request_headers CLF style | string list |
- | | %hs | captured_response_headers default style | string |
- | | %hsl | captured_response_headers CLF style | string list |
-- | | %ms | accept date milliseconds | numeric |
-+ | | %ms | accept date milliseconds (left-padded with 0) | numeric |
- | | %pid | PID | numeric |
- | H | %r | http_request | string |
- | | %rc | retries | numeric |
---
-2.4.6
-
--- /dev/null
+From 07ccb48add8c8cb0dd8a0f7d3f4994866d0ef32e Mon Sep 17 00:00:00 2001
+From: Willy Tarreau <w@1wt.eu>
+Date: Thu, 26 Nov 2015 18:32:39 +0100
+Subject: [PATCH 08/10] BUG/MEDIUM: cli: changing compression rate-limiting
+ must require admin level
+
+Right now it's possible to change the global compression rate limiting
+without the CLI being at the admin level.
+
+This fix must be backported to 1.6 and 1.5.
+(cherry picked from commit a1c2b2c4f3e65d198a0a4b25a4f655f7b307a855)
+(cherry picked from commit 9e5f1489c9f2d6926729890f249f7ebb9d3bfd43)
+---
+ src/dumpstats.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/src/dumpstats.c b/src/dumpstats.c
+index b4be2cd..b1bbf31 100644
+--- a/src/dumpstats.c
++++ b/src/dumpstats.c
+@@ -1695,6 +1695,12 @@ static int stats_sock_parse_request(struct stream_interface *si, char *line)
+ if (strcmp(args[3], "global") == 0) {
+ int v;
+
++ if (s->listener->bind_conf->level < ACCESS_LVL_ADMIN) {
++ appctx->ctx.cli.msg = stats_permission_denied_msg;
++ appctx->st0 = STAT_CLI_PRINT;
++ return 1;
++ }
++
+ if (!*args[4]) {
+ appctx->ctx.cli.msg = "Expects a maximum input byte rate in kB/s.\n";
+ appctx->st0 = STAT_CLI_PRINT;
+--
+2.4.10
+
+++ /dev/null
-From 1104336c0ba5f474fce8fe7c0125511b59f4dd3d Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Tue, 11 Aug 2015 11:20:45 +0200
-Subject: [PATCH 08/13] CLEANUP: .gitignore: ignore more test files
-
-Exclude from "git status" many of the files that often result from
-development tests and bug reports reproducers.
-(cherry picked from commit de365a320ead43168e78facfa337130759783515)
----
- .gitignore | 27 +++++++++++++++++++++++++++
- 1 file changed, 27 insertions(+)
-
-diff --git a/.gitignore b/.gitignore
-index 762f5ad..f6ccd0e 100644
---- a/.gitignore
-+++ b/.gitignore
-@@ -18,3 +18,30 @@ make-*
- dlmalloc.c
- 00*.patch
- *.service
-+*.bak
-+contrib/base64/base64rev
-+contrib/halog/halog
-+contrib/ip6range/ip6range
-+contrib/iprange/iprange
-+tests/test_hashes
-+/*.cfg
-+/*.conf
-+/*.diff
-+/*.patch
-+/*.c
-+/*.o
-+/*.so
-+/*.txt
-+/*.TXT
-+/*.txt.*
-+/*.prof
-+/*.gprof
-+/*.prof.*
-+/*.gprof.*
-+/*.tar
-+/*.tar.gz
-+/*.tgz
-+/*.mbox
-+/*.sh
-+/bug*
-+/TAGS
---
-2.4.6
-
--- /dev/null
+From 97ef6f99b8426ffdc97864fc8bb2d85c87cfdad0 Mon Sep 17 00:00:00 2001
+From: Thierry FOURNIER <tfournier@arpalert.org>
+Date: Tue, 3 Nov 2015 19:17:37 +0100
+Subject: [PATCH 09/10] BUILD: freebsd: double declaration
+
+On freebsd, the macro LIST_PREV already exists in the header file
+<sys/queue.h>, and this makes a build error.
+
+This patch removes the macros before declaring it. This ensure
+that the error doesn't occurs.
+(cherry picked from commit 1db96672c4cd264ebca8197bec93a5ce1b23aaa9)
+(cherry picked from commit 6cf9c6b270e57f05abf72cd61f4facb5b6980d57)
+---
+ include/common/mini-clist.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/include/common/mini-clist.h b/include/common/mini-clist.h
+index 3c3f001..404b6fa 100644
+--- a/include/common/mini-clist.h
++++ b/include/common/mini-clist.h
+@@ -144,6 +144,7 @@ struct cond_wordlist {
+ * which contains list head <lh>, which is known as element <el> in
+ * struct pt.
+ */
++#undef LIST_PREV
+ #define LIST_PREV(lh, pt, el) (LIST_ELEM((lh)->p, pt, el))
+
+ /*
+--
+2.4.10
+
+++ /dev/null
-From 5e077624951a65e6aae381c7213fc54984768dd4 Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Tue, 11 Aug 2015 11:21:47 +0200
-Subject: [PATCH 09/13] CLEANUP: .gitignore: finally ignore everything but what
- is known.
-
-Still too many files remain, it's easier to block everything but
-what we know.
-(cherry picked from commit d71f1766bdbb041f80394662b0d293f033f93005)
----
- .gitignore | 20 ++++++++++++++++++++
- 1 file changed, 20 insertions(+)
-
-diff --git a/.gitignore b/.gitignore
-index f6ccd0e..1953ba3 100644
---- a/.gitignore
-+++ b/.gitignore
-@@ -45,3 +45,23 @@ tests/test_hashes
- /*.sh
- /bug*
- /TAGS
-+# Below we forbid everything and only allow what we know, that's much easier
-+# than blocking about 500 different test files and bug report outputs.
-+/.*
-+/*
-+!/.gitignore
-+!/CHANGELOG
-+!/LICENSE
-+!/Makefile
-+!/README
-+!/ROADMAP
-+!/SUBVERS
-+!/VERDATE
-+!/VERSION
-+!/contrib
-+!/doc
-+!/ebtree
-+!/examples
-+!/include
-+!/src
-+!/tests
---
-2.4.6
-
--- /dev/null
+From 0f836e1361933721c5689c7943143fd6cd260148 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Cyril=20Bont=C3=A9?= <cyril.bonte@free.fr>
+Date: Thu, 26 Nov 2015 21:39:56 +0100
+Subject: [PATCH 10/10] BUG/MEDIUM: sample: urlp can't match an empty value
+
+Currently urlp fetching samples were able to find parameters with an empty
+value, but the return code depended on the value length. The final result was
+that acls using urlp couldn't match empty values.
+
+Example of acl which always returned "false":
+ acl MATCH_EMPTY urlp(foo) -m len 0
+
+The fix consists in unconditionally return 1 when the parameter is found.
+
+This fix must be backported to 1.6 and 1.5.
+(cherry picked from commit ce1ef4df0135f9dc1cb6691395eacb487015fe3e)
+(cherry picked from commit 6bd426cf35c95985712369ed528c10a5f80ad8fd)
+[ note: in 1.5 we have value+value_l instead of vstart+vend ]
+---
+ src/proto_http.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/src/proto_http.c b/src/proto_http.c
+index 5facfbb..3af7880 100644
+--- a/src/proto_http.c
++++ b/src/proto_http.c
+@@ -11050,9 +11050,11 @@ find_url_param_pos(char* query_string, size_t query_string_l,
+ }
+
+ /*
+- * Given a url parameter name, returns its value and size into *value and
+- * *value_l respectively, and returns non-zero. If the parameter is not found,
+- * zero is returned and value/value_l are not touched.
++ * Given a url parameter name and a query string, find the next value.
++ * An empty url_param_name matches the first available parameter.
++ * If the parameter is found, 1 is returned and *value / *value_l are updated
++ * to respectively provide a pointer to the value and its length.
++ * Otherwise, 0 is returned and value/value_l are not modified.
+ */
+ static int
+ find_url_param_value(char* path, size_t path_l,
+@@ -11082,7 +11084,7 @@ find_url_param_value(char* path, size_t path_l,
+
+ *value = value_start;
+ *value_l = value_end - value_start;
+- return value_end != value_start;
++ return 1;
+ }
+
+ static int
+--
+2.4.10
+
+++ /dev/null
-From c7c1e55f09839727ba7defd37347fc500dabb202 Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Tue, 11 Aug 2015 11:36:45 +0200
-Subject: [PATCH 10/13] MEDIUM: config: emit a warning on a frontend without
- listener
-
-Commit c6678e2 ("MEDIUM: config: authorize frontend and listen without bind")
-completely removed the test for bind lines in frontends in order to make it
-easier for automated tools to generate configs (eg: replacing a bind with
-another one passing via a temporary config without any bind line). The
-problem is that some common mistakes are totally hidden now. For example,
-this apparently valid entry is silently ignored :
-
- listen 1.2.3.4:8000
- server s1 127.0.0.1:8000
-
-Hint: 1.2.3.4:8000 is mistakenly the proxy name here.
-
-Thus instead we now emit a warning to indicate that a frontend was found
-with no listener. This should be backported to 1.5 to help spot abnormal
-configurations.
-(cherry picked from commit f82d1ca2d7ec83804d6b54e61a35747ad2f85188)
----
- src/cfgparse.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/src/cfgparse.c b/src/cfgparse.c
-index 2a5f178..d67edc5 100644
---- a/src/cfgparse.c
-+++ b/src/cfgparse.c
-@@ -6193,6 +6193,12 @@ int check_config_validity()
- break;
- }
-
-+ if ((curproxy->cap & PR_CAP_FE) && LIST_ISEMPTY(&curproxy->conf.listeners)) {
-+ Warning("config : %s '%s' has no 'bind' directive. Please declare it as a backend if this was intended.\n",
-+ proxy_type_str(curproxy), curproxy->id);
-+ err_code |= ERR_WARN;
-+ }
-+
- if ((curproxy->cap & PR_CAP_BE) && (curproxy->mode != PR_MODE_HEALTH)) {
- if (curproxy->lbprm.algo & BE_LB_KIND) {
- if (curproxy->options & PR_O_TRANSP) {
---
-2.4.6
-
+++ /dev/null
-From ee12145d38a7dee81a20cf232c724ccb7a46ad8b Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Tue, 18 Aug 2015 17:15:20 +0200
-Subject: [PATCH 11/13] BUG/MEDIUM: counters: ensure that src_{inc,clr}_gpc0
- creates a missing entry
-
-During 1.5-dev20 there was some code refactoring to make the src_* fetch
-function use the same code as sc_*. Unfortunately this introduced a
-regression where src_* doesn't create an entry anymore if it does not
-exist in the table. The reason is that smp_fetch_sc_stkctr() only calls
-stktable_lookup_key() while src_inc_*/src_clr_* used to make use of
-stktable_update_key() which additionally create the entry if it does
-not exist.
-
-There's no point modifying the common function for these two exceptions,
-so instead we now have a function dedicated to the creation of this entry
-for src_* only. It is called when the entry didn't exist, so that requires
-minimal modifications to existing code.
-
-Thanks to Thierry Fournier for helping diagnose the issue.
-
-This fix must be backported to 1.5.
-(cherry picked from commit 0f4eadd4830279f5ee83aa545728fb750f5c8185)
-
-[Note: the backport to 1.5 significantly differs from the version in 1.6
- since we need to use the table's type and to retrieve the source address
- directly from the connection. At least it matches the way other src_*
- fetch functions work, and it's been verified to work fine]
----
- src/session.c | 33 +++++++++++++++++++++++++++++++++
- 1 file changed, 33 insertions(+)
-
-diff --git a/src/session.c b/src/session.c
-index 5b9e407..6d62e36 100644
---- a/src/session.c
-+++ b/src/session.c
-@@ -2806,6 +2806,33 @@ smp_fetch_sc_stkctr(struct session *l4, const struct arg *args, const char *kw)
- return &l4->stkctr[num];
- }
-
-+/* same as smp_fetch_sc_stkctr() but dedicated to src_* and can create
-+ * the entry if it doesn't exist yet. This is needed for a few fetch
-+ * functions which need to create an entry, such as src_inc_gpc* and
-+ * src_clr_gpc*.
-+ */
-+struct stkctr *
-+smp_create_src_stkctr(struct session *sess, const struct arg *args, const char *kw)
-+{
-+ static struct stkctr stkctr;
-+ struct stktable_key *key;
-+ struct connection *conn = objt_conn(sess->si[0].end);
-+
-+ if (strncmp(kw, "src_", 4) != 0)
-+ return NULL;
-+
-+ if (!conn)
-+ return NULL;
-+
-+ key = addr_to_stktable_key(&conn->addr.from, args->data.prx->table.type);
-+ if (!key)
-+ return NULL;
-+
-+ stkctr.table = &args->data.prx->table;
-+ stkctr_set_entry(&stkctr, stktable_update_key(stkctr.table, key));
-+ return &stkctr;
-+}
-+
- /* set return a boolean indicating if the requested session counter is
- * currently being tracked or not.
- * Supports being called as "sc[0-9]_tracked" only.
-@@ -2887,6 +2914,9 @@ smp_fetch_sc_inc_gpc0(struct proxy *px, struct session *l4, void *l7, unsigned i
- if (!stkctr)
- return 0;
-
-+ if (stkctr_entry(stkctr) == NULL)
-+ stkctr = smp_create_src_stkctr(l4, args, kw);
-+
- smp->flags = SMP_F_VOL_TEST;
- smp->type = SMP_T_UINT;
- smp->data.uint = 0;
-@@ -2924,6 +2954,9 @@ smp_fetch_sc_clr_gpc0(struct proxy *px, struct session *l4, void *l7, unsigned i
- if (!stkctr)
- return 0;
-
-+ if (stkctr_entry(stkctr) == NULL)
-+ stkctr = smp_create_src_stkctr(l4, args, kw);
-+
- smp->flags = SMP_F_VOL_TEST;
- smp->type = SMP_T_UINT;
- smp->data.uint = 0;
---
-2.4.6
-
--- /dev/null
+From 96a1b4a969a5f3c9224d786c79e90d15a47094b0 Mon Sep 17 00:00:00 2001
+From: Emeric Brun <ebrun@haproxy.com>
+Date: Wed, 16 Dec 2015 15:16:46 +0100
+Subject: [PATCH 11/13] BUG/MEDIUM: peers: table entries learned from a remote
+ are pushed to others after a random delay.
+
+New sticktable entries learned from a remote peer can be pushed to others after
+a random delay because they are not inserted at the right position in the updates
+tree.
+(cherry picked from commit 234fc3c31e751f8191b9b78fa5fd16663c2627fe)
+(cherry picked from commit 8b1a697362977b8392caca3efaf97a5a8a8c782b)
+---
+ src/peers.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/peers.c b/src/peers.c
+index 0564d3d..92b4df0 100644
+--- a/src/peers.c
++++ b/src/peers.c
+@@ -720,7 +720,7 @@ switchstate:
+ ts = stktable_store(ps->table->table, newts, 0);
+ newts = NULL; /* don't reuse it */
+
+- ts->upd.key= (++ps->table->table->update)+(2^31);
++ ts->upd.key= (++ps->table->table->update)+(2147483648U);
+ eb = eb32_insert(&ps->table->table->updates, &ts->upd);
+ if (eb != &ts->upd) {
+ eb32_delete(eb);
+--
+2.4.10
+
--- /dev/null
+From a320fd146f802a851a396b2cde491711a4fb87cf Mon Sep 17 00:00:00 2001
+From: Emeric Brun <ebrun@haproxy.com>
+Date: Wed, 16 Dec 2015 15:28:12 +0100
+Subject: [PATCH 12/13] BUG/MEDIUM: peers: old stick table updates could be
+ repushed.
+
+Because the stick table updates tree was not properly initialized to EB_ROOT_UNIQUE.
+(cherry picked from commit 1c6235dbba0a67bad1d5e57ada88f28e1270a5cb)
+(cherry picked from commit 6e80935a77c8c2c67a982780a0f14c241f02f2aa)
+---
+ src/stick_table.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/stick_table.c b/src/stick_table.c
+index 48d5710..6310690 100644
+--- a/src/stick_table.c
++++ b/src/stick_table.c
+@@ -385,6 +385,7 @@ int stktable_init(struct stktable *t)
+ if (t->size) {
+ memset(&t->keys, 0, sizeof(t->keys));
+ memset(&t->exps, 0, sizeof(t->exps));
++ t->updates = EB_ROOT_UNIQUE;
+
+ t->pool = create_pool("sticktables", sizeof(struct stksess) + t->data_size + t->key_size, MEM_F_SHARED);
+
+--
+2.4.10
+
+++ /dev/null
-From 2272b4ffde38c836adfd9a9b43ff5c019ef4190a Mon Sep 17 00:00:00 2001
-From: Thierry FOURNIER <tfournier@arpalert.org>
-Date: Wed, 26 Aug 2015 08:21:26 +0200
-Subject: [PATCH 12/13] DOC: ssl: missing LF
-
-An error message miss LF
-(cherry picked from commit bc965348d7ccc0a306504232ab85dc240fd31fbf)
----
- src/ssl_sock.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/ssl_sock.c b/src/ssl_sock.c
-index 2ae45ec..8f698c0 100644
---- a/src/ssl_sock.c
-+++ b/src/ssl_sock.c
-@@ -1760,7 +1760,7 @@ int ssl_sock_prepare_srv_ctx(struct server *srv, struct proxy *curproxy)
- #ifndef OPENSSL_NO_SSL3
- SSL_CTX_set_ssl_version(srv->ssl_ctx.ctx, SSLv3_client_method());
- #else
-- Alert("SSLv3 support requested but unavailable.");
-+ Alert("SSLv3 support requested but unavailable.\n");
- cfgerr++;
- #endif
- }
---
-2.4.6
-
--- /dev/null
+From 21fab69d332bfafd0a214ee29d8ad0779a055988 Mon Sep 17 00:00:00 2001
+From: David Carlier <devnexen@gmail.com>
+Date: Tue, 8 Dec 2015 21:43:09 +0000
+Subject: [PATCH 13/13] CLEANUP: haproxy: using _GNU_SOURCE instead of
+ __USE_GNU macro.
+
+In order to properly enable sched_setaffinity, in some versions of Linux,
+it is rather _GNU_SOURCE than __USE_GNU (spotted on Alpine Linux for instance),
+also for the sake of consistency as __USE_GNU seems not used across the code and
+for last, it seems on Linux it is the best way to enable non portable code.
+On Linux glibc's based versions, it seems _GNU_SOURCE defines __USE_GNU
+it should be safe enough.
+(cherry picked from commit 7ece096767d329d0ea04b70a1fb2c8b8a96b47e0)
+(cherry picked from commit 5a0ac35503f88a7bc8ee2c4f865354fa6cc25901)
+---
+ src/haproxy.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/src/haproxy.c b/src/haproxy.c
+index b94252d..20480a1 100644
+--- a/src/haproxy.c
++++ b/src/haproxy.c
+@@ -25,6 +25,7 @@
+ *
+ */
+
++#define _GNU_SOURCE
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+@@ -47,9 +48,7 @@
+ #include <syslog.h>
+ #include <grp.h>
+ #ifdef USE_CPU_AFFINITY
+-#define __USE_GNU
+ #include <sched.h>
+-#undef __USE_GNU
+ #endif
+
+ #ifdef DEBUG_FULL
+--
+2.4.10
+
+++ /dev/null
-From d3a93a932430bc1a4cd5d1350820c2bec706e26d Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Thu, 27 Aug 2015 17:15:05 +0200
-Subject: [PATCH 13/13] DOC: fix example of http-request using
- ssl_fc_session_id
-
-It was missing the ",hex" resulting in raw binary data being dumped in
-the header or the logs. Now we know where these crazy logs originated
-from!
-(cherry picked from commit fca4261dacab51db960d30120f4bb4201f7e4a51)
----
- doc/configuration.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/doc/configuration.txt b/doc/configuration.txt
-index 1d95b5b..67d273b 100644
---- a/doc/configuration.txt
-+++ b/doc/configuration.txt
-@@ -3135,7 +3135,7 @@ http-request { allow | deny | tarpit | auth [realm <realm>] | redirect <rule> |
- Example:
- http-request set-header X-Haproxy-Current-Date %T
- http-request set-header X-SSL %[ssl_fc]
-- http-request set-header X-SSL-Session_ID %[ssl_fc_session_id]
-+ http-request set-header X-SSL-Session_ID %[ssl_fc_session_id,hex]
- http-request set-header X-SSL-Client-Verify %[ssl_c_verify]
- http-request set-header X-SSL-Client-DN %{+Q}[ssl_c_s_dn]
- http-request set-header X-SSL-Client-CN %{+Q}[ssl_c_s_dn(cn)]
---
-2.4.6
-
+++ /dev/null
-From bcd033699c5a4904967652de4980e4f35f17ee34 Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Thu, 3 Sep 2015 17:15:21 +0200
-Subject: [PATCH 14/16] BUG/MINOR: http: remove stupid HTTP_METH_NONE entry
-
-When converting the "method" fetch to a string, we used to get an empty
-string if the first character was not an upper case. This was caused by
-the lookup function which returns HTTP_METH_NONE when a lookup is not
-possible, and this method being mapped to an empty string in the array.
-
-This is a totally stupid mechanism, there's no reason for having the
-result depend on the first char. In fact the message parser already
-checks that the syntax matches an HTTP token so we can only land there
-with a valid token, hence only HTTP_METH_OTHER should be returned.
-
-This fix should be backported to all actively supported branches.
-(cherry picked from commit b7ce424be2bc9df73a3b971fa9dd6daea0332bf1)
----
- include/types/proto_http.h | 1 -
- src/proto_http.c | 11 ++++-------
- 2 files changed, 4 insertions(+), 8 deletions(-)
-
-diff --git a/include/types/proto_http.h b/include/types/proto_http.h
-index a5a5d31..dbce972 100644
---- a/include/types/proto_http.h
-+++ b/include/types/proto_http.h
-@@ -219,7 +219,6 @@ enum {
-
- /* Known HTTP methods */
- enum http_meth_t {
-- HTTP_METH_NONE = 0,
- HTTP_METH_OPTIONS,
- HTTP_METH_GET,
- HTTP_METH_HEAD,
-diff --git a/src/proto_http.c b/src/proto_http.c
-index 02dc42b..46694cb 100644
---- a/src/proto_http.c
-+++ b/src/proto_http.c
-@@ -361,12 +361,11 @@ const struct http_method_desc http_methods[26][3] = {
- [0] = { .meth = HTTP_METH_TRACE , .len=5, .text="TRACE" },
- },
- /* rest is empty like this :
-- * [1] = { .meth = HTTP_METH_NONE , .len=0, .text="" },
-+ * [0] = { .meth = HTTP_METH_OTHER , .len=0, .text="" },
- */
- };
-
- const struct http_method_name http_known_methods[HTTP_METH_OTHER] = {
-- [HTTP_METH_NONE] = { "", 0 },
- [HTTP_METH_OPTIONS] = { "OPTIONS", 7 },
- [HTTP_METH_GET] = { "GET", 3 },
- [HTTP_METH_HEAD] = { "HEAD", 4 },
-@@ -793,8 +792,8 @@ struct chunk *http_error_message(struct session *s, int msgnum)
- }
-
- /*
-- * returns HTTP_METH_NONE if there is nothing valid to read (empty or non-text
-- * string), HTTP_METH_OTHER for unknown methods, or the identified method.
-+ * returns a known method among HTTP_METH_* or HTTP_METH_OTHER for all unknown
-+ * ones.
- */
- enum http_meth_t find_http_meth(const char *str, const int len)
- {
-@@ -810,10 +809,8 @@ enum http_meth_t find_http_meth(const char *str, const int len)
- if (likely(memcmp(str, h->text, h->len) == 0))
- return h->meth;
- };
-- return HTTP_METH_OTHER;
- }
-- return HTTP_METH_NONE;
--
-+ return HTTP_METH_OTHER;
- }
-
- /* Parse the URI from the given transaction (which is assumed to be in request
---
-2.4.6
-
+++ /dev/null
-From 3f34b5539e7ba31e44055d853b9ba496e73e0bae Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Mon, 7 Sep 2015 19:32:33 +0200
-Subject: [PATCH 15/16] BUG/MAJOR: http: don't call http_send_name_header()
- after an error
-
-A crash was reported when using the "famous" http-send-name-header
-directive. This time it's a bit tricky, it requires a certain number of
-conditions to be met including maxconn on a server, queuing, timeout in
-the queue and cookie-based persistence.
-
-The problem is that in stream.c, before calling http_send_name_header(),
-we check a number of conditions to know if we have to replace the header
-name. But prior to reaching this place, it's possible for
-sess_update_stream_int() to fail and change the stream-int's state to
-SI_ST_CLO, send an error 503 to the client, and flush all buffers. But
-http_send_name_header() can only be called with valid buffer contents
-matching the http_msg's description. So when it rewinds the stream to
-modify the header, buf->o becomes negative by the size of the incoming
-request and is used as the argument to memmove() which basically
-displaces 4GB of memory off a few bytes to write the new name, resulting
-in a core and a core file that's really not fun to play with.
-
-The solution obviously consists in refraining from calling this nasty
-function when the stream interface is already closed.
-
-This bug also affects 1.5 and possibly 1.4, so the fix must be backported
-there.
-(cherry picked from commit 9c03b33329cb4924716edc1c851913a18b0670dc)
----
- src/session.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/session.c b/src/session.c
-index 6d62e36..7520a85 100644
---- a/src/session.c
-+++ b/src/session.c
-@@ -2293,7 +2293,7 @@ struct task *process_session(struct task *t)
-
- /* Now we can add the server name to a header (if requested) */
- /* check for HTTP mode and proxy server_name_hdr_name != NULL */
-- if ((s->si[1].state >= SI_ST_CON) &&
-+ if ((s->si[1].state >= SI_ST_CON) && (s->si[1].state < SI_ST_CLO) &&
- (s->be->server_id_hdr_name != NULL) &&
- (s->be->mode == PR_MODE_HTTP) &&
- objt_server(s->target)) {
---
-2.4.6
-
+++ /dev/null
-From 36456071ea34546d98d3b66a696cd4c4c4643de5 Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Tue, 8 Sep 2015 16:01:25 +0200
-Subject: [PATCH 16/16] BUG/MINOR: tools: make str2sa_range() report
- unresolvable addresses
-
-If an environment variable is used in an address, and is not set, it's
-silently considered as ":" or "0.0.0.0:0" which is not correct as it
-can hide environment issues and lead to unexpected behaviours. Let's
-report this case when it happens.
-
-This fix should be backported to 1.5.
-(cherry picked from commit 9f69f46d1f1b1d116c00b4b0483c519747f977b7)
----
- src/standard.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/src/standard.c b/src/standard.c
-index f57724c..9299882 100644
---- a/src/standard.c
-+++ b/src/standard.c
-@@ -709,6 +709,11 @@ struct sockaddr_storage *str2sa_range(const char *str, int *low, int *high, char
- goto out;
- }
-
-+ if (!*str2) {
-+ memprintf(err, "'%s' resolves to an empty address (environment variable missing?)\n", str);
-+ goto out;
-+ }
-+
- memset(&ss, 0, sizeof(ss));
-
- if (strncmp(str2, "unix@", 5) == 0) {
---
-2.4.6
-
--- /dev/null
+#
+# Copyright (C) 2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=iptraf-ng
+PKG_VERSION:=1.1.4
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://fedorahosted.org/releases/i/p/iptraf-ng/
+PKG_MD5SUM:=de27cfeeede96e2acfb0edc8439b034a
+
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=LICENSE
+
+PKG_MAINTAINER:=Florian Fainelli <florian@openwrt.org>
+
+PKG_CHECK_FORMAT_SECURITY:=0
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/iptraf-ng
+ SECTION:=net
+ CATEGORY:=Network
+ DEPENDS:=+libncurses
+ TITLE:=A console-based network monitoring program
+ URL:=https://fedorahosted.org/iptraf-ng/
+endef
+
+define Package/iptraf-ng/description
+ iptraf-ng is a console-based network statistics utility for Linux. It gathers a
+ variety of figures such as TCP connection packet and byte counts, interface
+ statistics and activity indicators, TCP/UDP traffic breakdowns, and LAN
+ station packet and byte counts.
+endef
+
+define Package/iptraf-ng/postinst
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+ mkdir -p $${IPKG_INSTROOT}/var/log/iptraf-ng \
+ $${IPKG_INSTROOT}/var/run/iptraf-ng \
+ $${IPKG_INSTROOT}/var/lib/iptraf-ng
+fi
+endef
+
+MAKE_FLAGS += \
+ CFLAGS="$(TARGET_CFLAGS) -std=gnu99" \
+ CPPFLAGS="$(TARGET_CPPFLAGS) -D_GNU_SOURCE" \
+ NCURSES_CFLAGS="$(TARGET_CFLAGS)" \
+ NCURSES_LDFLAGS="$(TARGET_LDFLAGS) -lncurses -lpanel" \
+ iptraf-ng rvnamed-ng
+
+define Package/iptraf-ng/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/iptraf-ng $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/rvnamed-ng $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,iptraf-ng))
#
-# Copyright (C) 2014-2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
+# Copyright (C) 2014-2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=knot
-PKG_VERSION:=1.6.5
+PKG_VERSION:=2.1.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_URL:=https://secure.nic.cz/files/knot-dns/
-PKG_MD5SUM:=934b6feaeefd0df7b3be6709e39b19ce
+PKG_MD5SUM:=ee6a54ec8a7898579b768c66e2eaeb54
PKG_MAINTAINER:=Daniel Salzman <daniel.salzman@nic.cz>
-PKG_LICENSE:=GPL-2.0+
+PKG_LICENSE:=GPL-3.0 LGPL-2.0 0BSD MIT OLDAP-2.8
-PKG_BUILD_PARALLEL:=1
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
+define Package/knot-lib/Default
+ SECTION:=libs
+ CATEGORY:=Libraries
+ TITLE:=Knot DNS
+ URL:=https://www.knot-dns.cz
+endef
+
define Package/knot/Default
SECTION:=net
CATEGORY:=Network
+ SUBMENU:=IP Addresses and Names
TITLE:=Knot DNS
URL:=https://www.knot-dns.cz
- SUBMENU:=IP Addresses and Names
- DEPENDS:=+libopenssl +liburcu
+ USERID:=knot=5353:knot=5353
+endef
+
+define Package/knot-libdnssec
+ $(call Package/knot-lib/Default)
+ TITLE+= DNSSEC library
+ DEPENDS=+libpthread +libgnutls +jansson
endef
define Package/knot-libknot
- $(call Package/knot/Default)
- TITLE+= (library)
+ $(call Package/knot-lib/Default)
+ TITLE+= library
+ DEPENDS=+libpthread +knot-libdnssec
+endef
+
+define Package/knot-libzscanner
+ $(call Package/knot-lib/Default)
+ TITLE+= zone parser library
+ DEPENDS=+libpthread
endef
define Package/knot
$(call Package/knot/Default)
- TITLE+= (server)
- DEPENDS+=+knot-libknot
+ TITLE+= server
+ DEPENDS=+liburcu +knot-libdnssec +knot-libknot +knot-libzscanner
endef
define Package/knot-dig
$(call Package/knot/Default)
- TITLE+= lookup utility
- DEPENDS+=+knot-libknot
+ TITLE+= advanced DNS lookup utility
+ DEPENDS=+knot-libdnssec +knot-libknot
endef
define Package/knot-host
$(call Package/knot/Default)
TITLE+= simple DNS lookup utility
- DEPENDS+=+knot-libknot
+ DEPENDS=+knot-libdnssec +knot-libknot
+endef
+
+define Package/knot-nsupdate
+ $(call Package/knot/Default)
+ TITLE+= dynamic DNS update utility
+ DEPENDS=+knot-libdnssec +knot-libknot +knot-libzscanner
endef
define Package/knot-nsec3hash
$(call Package/knot/Default)
TITLE+= simple NSEC3 hash utility
- DEPENDS+=+knot-libknot
+ DEPENDS=+knot-libdnssec
endef
-define Package/knot-nsupdate
+define Package/knot-keymgr
$(call Package/knot/Default)
- TITLE+= dynamic DNS update utility
- DEPENDS+=+knot-libknot
+ TITLE+= DNSSEC key management utility
+ DEPENDS=+knot-libdnssec +knot-libzscanner
endef
define Package/knot-tests
$(call Package/knot/Default)
- TITLE+= (tests)
- DEPENDS+=+knot-libknot
+ TITLE+= tests
+ DEPENDS=+liburcu +knot-libdnssec +knot-libknot +knot-libzscanner
+endef
+
+define Package/knot-libdnssec/description
+ Knot DNS DNSSEC library.
endef
define Package/knot-libknot/description
Knot DNS library.
endef
+define Package/knot-libdnssec/description
+ Knot DNS zone parser library.
+endef
+
define Package/knot/description
High-performance authoritative-only DNS server.
endef
define Package/knot-dig/description
- Knot DNS lookup utility.
+ Knot DNS advanced DNS lookup utility.
endef
define Package/knot-host/description
Knot DNS simple DNS lookup utility.
endef
+define Package/knot-nsupdate/description
+ Knot DNS dynamic DNS update utility.
+endef
+
define Package/knot-nsec3hash/description
- Knot DNS simple utility to compute NSEC3 hash.
+ Knot DNS simple NSEC3 hash utility.
endef
-define Package/knot-nsupdate/description
- Knot DNS dynamic DNS update utility.
+define Package/knot-keymgr/description
+ Knot DNS DNSSEC key management utility.
endef
define Package/knot-tests/description
- Unit tests for Knot DNS server.
+ Unit tests for the Knot DNS server and libraries.
Usage: /usr/share/knot/runtests.sh
endef
-define Package/knot/conffiles
-/etc/knot/knot.conf
-endef
-
CONFIGURE_ARGS += \
--enable-recvmmsg=no \
--disable-fastparser \
--without-libidn \
- --with-rundir=/var/run \
- --with-storage=/etc/knot
+ --with-rundir=/var/run/knot \
+ --with-storage=/var/lib/knot \
+ --with-configdir=/etc/knot \
+ --with-timer-mapsize=50 \
+ --with-conf-mapsize=50
-TARGET_CFLAGS += -std=gnu99 -DPSELECT_COMPAT
+TARGET_CFLAGS += -DPSELECT_COMPAT -DNDEBUG
+
+define Package/knot/conffiles
+/etc/knot/knot.conf
+endef
define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR)
$(MAKE) -C $(PKG_BUILD_DIR)/libtap check
+ $(MAKE) -C $(PKG_BUILD_DIR)/src/dnssec/tests check-compile-only
$(MAKE) -C $(PKG_BUILD_DIR)/tests check-compile-only
$(MAKE) -C $(PKG_BUILD_DIR)/src/zscanner check-compile-only
endef
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.{a,so*} $(1)/usr/lib/
+
+ $(INSTALL_DIR) $(1)/usr/include/libknot
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/libknot/* $(1)/usr/include/libknot/
+
+ $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/*.pc $(1)/usr/lib/pkgconfig/
+endef
+
+define Package/knot-libdnssec/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libdnssec.so.* $(1)/usr/lib/
+endef
+
define Package/knot-libknot/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libknot.so.* $(1)/usr/lib/
+endef
+
+define Package/knot-libzscanner/install
+ $(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libzscanner.so.* $(1)/usr/lib/
endef
$(INSTALL_DIR) $(1)/etc/knot
$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/knot/knot.sample.conf $(1)/etc/knot/knot.conf
- $(INSTALL_DATA) $(PKG_INSTALL_DIR)/etc/knot/example.com.zone $(1)/etc/knot/
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/knotd.init $(1)/etc/init.d/knotd
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/khost $(1)/usr/bin/
endef
+define Package/knot-nsupdate/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/knsupdate $(1)/usr/bin/
+endef
+
define Package/knot-nsec3hash/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/knsec3hash $(1)/usr/bin/
endef
-define Package/knot-nsupdate/install
- $(INSTALL_DIR) $(1)/usr/bin
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/knsupdate $(1)/usr/bin/
+define Package/knot-keymgr/install
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/keymgr $(1)/usr/sbin/
endef
define Package/knot-tests/install
$(INSTALL_BIN) $(PKG_BUILD_DIR)/libtap/runtests $(1)/usr/share/knot/tap/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/libtap/tap/libtap.sh $(1)/usr/share/knot/tap/
- $(INSTALL_DIR) $(1)/usr/share/knot/tests
+ $(INSTALL_DIR) $(1)/usr/share/knot/tests
+
+ find $(PKG_BUILD_DIR)/src/dnssec/tests -maxdepth 1 -executable -type f | \
+ xargs -I{} basename {} | \
+ xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/src/dnssec/tests/{} $(1)/usr/share/knot/tests/dnssec_test_{}
+
find $(PKG_BUILD_DIR)/tests/.libs -maxdepth 1 -executable -type f | \
xargs -I{} basename {} | \
- xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/tests/.libs/{} $(1)/usr/share/knot/tests/test_{}
+ xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/tests/.libs/{} $(1)/usr/share/knot/tests/test_{}
- $(INSTALL_DIR) $(1)/usr/share/knot/tests/data
- $(INSTALL_DATA) $(PKG_BUILD_DIR)/tests/data/sample_conf $(1)/usr/share/knot/tests/data/
+ find $(PKG_BUILD_DIR)/tests/modules/.libs -maxdepth 1 -executable -type f | \
+ xargs -I{} basename {} | \
+ xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/tests/modules/.libs/{} $(1)/usr/share/knot/tests/test_module_{}
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/zscanner/tests/.libs/zscanner-tool $(1)/usr/share/knot/tests/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/zscanner/tests/unittests $(1)/usr/share/knot/tests/test_zscanner
cp -a $(PKG_BUILD_DIR)/src/zscanner/tests/data $(1)/usr/share/knot/tests/
endef
+$(eval $(call BuildPackage,knot-libdnssec))
$(eval $(call BuildPackage,knot-libknot))
+$(eval $(call BuildPackage,knot-libzscanner))
$(eval $(call BuildPackage,knot))
$(eval $(call BuildPackage,knot-dig))
$(eval $(call BuildPackage,knot-host))
-$(eval $(call BuildPackage,knot-nsec3hash))
$(eval $(call BuildPackage,knot-nsupdate))
+$(eval $(call BuildPackage,knot-nsec3hash))
+$(eval $(call BuildPackage,knot-keymgr))
$(eval $(call BuildPackage,knot-tests))
#!/bin/sh /etc/rc.common
-START=70
-
-knot_bin="/usr/sbin/knotd"
-knot_ctl="/usr/sbin/knotc"
-config_file="/etc/knot/knot.conf"
-pid_file="/var/run/knot.pid"
-
-start() {
- echo "Starting Knot DNS"
-
- if [ -e $pid_file ]; then
- echo " Already running with PID `cat $pid_file`"
- return 1
- fi
-
- $knot_bin -c $config_file -d
-
- if [ $? -ne 0 ]; then
- echo " Failed to start"
- fi
+#
+# Copyright (C) 2014-2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
+#
+# This is free software, licensed under the GNU General Public License v2.
+
+START=50
+USE_PROCD=1
+
+PROG="/usr/sbin/knotd"
+CONFFILE="/etc/knot/knot.conf"
+
+USER="knot"
+USERID="5353"
+RUNDIR="/var/run/knot"
+STORAGE="/var/lib/knot"
+
+fix_perms() {
+ user_exists $USER $USERID || user_add $USER $USERID
+ group_exists $USER $USERID || group_add $USER $USERID
+
+ for dir in $RUNDIR $STORAGE; do
+ test -e $dir || {
+ mkdir -p $dir
+ chgrp $USER $dir
+ chmod g+w $dir
+ }
+ chgrp $USER $CONFFILE
+ chmod g+r $CONFFILE
+ done
}
-stop() {
- echo "Stopping Knot DNS"
-
- if [ -e $pid_file ]; then
- kill `cat $pid_file`
- rm -f $pid_file
- else
- echo " No PID file $pid_file"
- return 1
- fi
-}
-
-restart() {
- stop
- start
-}
-
-reload() {
- echo "Reloading Knot DNS"
-
- $knot_ctl -c $config_file reload
+start_service() {
+ fix_perms
+ procd_open_instance
+ procd_set_param command $PROG -c $CONFFILE
+ procd_set_param respawn
+ procd_close_instance
}
#!/bin/sh
cd `dirname "$0"`/tests
-../tap/runtests -b /tmp ./test_*
-
+../tap/runtests -b /tmp ./dnssec_test_* ./test_*
ret=$?
cd -
+++ /dev/null
-diff --git a/src/libknot/dnssec/key.c b/src/libknot/dnssec/key.c
-index 7dc0540..3e351bb 100644
---- a/src/libknot/dnssec/key.c
-+++ b/src/libknot/dnssec/key.c
-@@ -260,7 +260,15 @@ static int key_param_time(const void *save_to, char *value)
-
- struct tm parsed = { 0 };
-
-- if (!strptime(value, "%Y%m%d%H%M%S", &parsed)) {
-+ if (strlen(value) != 14) {
-+ return KNOT_EINVAL;
-+ }
-+
-+ char *v = value;
-+ char buf[32] = "";
-+ int ret = sprintf(buf, "%.4s %.2s %.2s %.2s %.2s %.2s",
-+ v, v + 4, v + 6, v + 8, v + 10, v + 12);
-+ if (ret != 19 || !strptime(buf, "%Y %m %d %H %M %S", &parsed)) {
- return KNOT_EINVAL;
- }
-
--- /dev/null
+diff --git a/src/zscanner/tests/unittests.in b/src/zscanner/tests/unittests.in
+index 9a4af53..f9b45bf 100644
+--- a/src/zscanner/tests/unittests.in
++++ b/src/zscanner/tests/unittests.in
+@@ -1,15 +1,14 @@
+ #!/bin/sh
+
+-SOURCE=@top_srcdir@/src/zscanner/tests
+-BUILD=@top_builddir@/src/zscanner/tests
++SOURCE="."
++BUILD="/tmp/knot-test"
++mkdir -p "$BUILD"
+
+-. @top_srcdir@/libtap/tap/libtap.sh
+-
+-cd "$BUILD"
++. ../tap/libtap.sh
+
+ TMPDIR=$(test_tmpdir)
+ TESTS_DIR="$SOURCE"/data
+-ZSCANNER_TOOL="$BUILD"/zscanner-tool
++ZSCANNER_TOOL=./zscanner-tool
+
+ plan 71
+
diff --git a/samples/knot.sample.conf.in b/samples/knot.sample.conf.in
-index 956e8a9..a068e67 100644
+index e07c8a7..ecc13ad 100644
--- a/samples/knot.sample.conf.in
+++ b/samples/knot.sample.conf.in
-@@ -14,7 +14,7 @@ system {
+@@ -9,7 +9,7 @@ server:
+ # Listen on all configured IPv6 interfaces.
+ listen: ::@53
+ # User for running the server.
+- # user: knot:knot
++ user: knot:knot
- # User for running server
- # May also specify user.group (e.g. knot.knot)
-- user knot.knot;
-+ user root.root;
-
- # Directory for storing run-time data
- # e.g. PID file and control sockets
-@@ -63,11 +63,11 @@ zones {
- # storage "@storage_dir@";
- #
- # Example master zone
--# example.com {
--# file "@config_dir@/example.com.zone";
-+ example.com {
-+ file "example.com.zone";
- # xfr-out slave0;
- # notify-out slave0;
--# }
-+ }
- #
- # Example slave zone
- # example.net {
+ log:
+ # Log info and more serious events to syslog.
--- /dev/null
+diff --git a/libtap/tap/files.c b/libtap/tap/files.c
+index 0c24075..d33db6c 100644
+--- a/libtap/tap/files.c
++++ b/libtap/tap/files.c
+@@ -27,6 +27,10 @@
+ #include <sys/types.h>
+ #include <unistd.h>
+
++#ifndef O_NOFOLLOW
++#define O_NOFOLLOW 0
++#endif
++
+ char *test_mkdtemp(void)
+ {
+ char *tmpdir = getenv("TMPDIR");
+++ /dev/null
-diff --git a/src/zscanner/tests/TESTS b/src/zscanner/tests/TESTS
-index c88aef1..4e2148f 100644
---- a/src/zscanner/tests/TESTS
-+++ b/src/zscanner/tests/TESTS
-@@ -18,10 +18,8 @@
- 05-2_TTL
- 05-3_TTL
- 05-4_TTL
--06-0_INCLUDE
- 06-1_INCLUDE
- 06-2_INCLUDE
--06-3_INCLUDE
- 06-4_INCLUDE
- 06-5_INCLUDE
- 06-6_INCLUDE
-diff --git a/src/zscanner/tests/unittests.in b/src/zscanner/tests/unittests.in
-index 846f351..272856c 100644
---- a/src/zscanner/tests/unittests.in
-+++ b/src/zscanner/tests/unittests.in
-@@ -1,9 +1,9 @@
- #!/bin/sh
-
--SOURCE=@top_srcdir@/src/zscanner/tests
--BUILD=@top_builddir@/src/zscanner/tests
-+SOURCE="."
-+BUILD="."
-
--. @top_srcdir@/libtap/tap/libtap.sh
-+. ../tap/libtap.sh
-
- cd "$BUILD"
-
-@@ -11,7 +11,7 @@ TMPDIR=$(test_tmpdir)
- TESTS_DIR="$SOURCE"/data
- ZSCANNER_TOOL="$BUILD"/zscanner-tool
-
--plan 71
-+plan 69
-
- mkdir -p "$TMPDIR"/includes/
- for a in 1 2 3 4 5 6; do
#
-# Copyright (C) 2008-2015 OpenWrt.org
+# Copyright (C) 2008-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=knxd
-PKG_VERSION=2015-07-19-$(PKG_SOURCE_VERSION)
-PKG_RELEASE:=1
+PKG_VERSION=2016-01-01-$(PKG_SOURCE_VERSION)
+PKG_RELEASE:=3
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/knxd/knxd.git
-PKG_SOURCE_VERSION:=be1fcfe85cc1dfcc41f791cd9a45c57fe18da6a0
+PKG_SOURCE_VERSION:=0cca354494310c8700e95692d5e09c80f6b57085
PKG_SOURCE_SUBDIR:=$(PKG_NAME)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.gz
config daemon args
- # daemon is started as 'knxd $options $url'
- # use 'knxd --help' to get all possible options'
- #
- # typical example for options for tunnel mode
- option options '-D -T -S -d/tmp/knxd.log -i -p/var/run/knxd.pid'
- # add '-t1023' or '--trace=1023' for full log trace
-
- # example with tpuarts interface
- # option url 'tpuarts:/dev/ttyAMA0'
- # example with IP interface in tunnel mode
- option url 'ipt:192.168.1.20'
+ # driver:[arg] a Layer-2 driver to use (knxd supports more than one)
+ option layer2 ""
+ # enable caching of group communication networkstate
+ option GroupCache 0
+ # FILE start the programm as daemon. Output will be written to FILE if given
+ option daemon "/var/log/knxd.log"
+ #enable the EIBnet/IP server to answer discovery and description requests (SEARCH, DESCRIPTION)
+ option Discovery 1
+ # EIBADDR set our EIB address to EIBADDR (default 0.0.1)
+ option eibaddr "0.0.1"
+ # LEVEL set error level
+ option error 0
+ # PORT listen at TCP port PORT (default 6720)
+ option listen_tcp "6720"
+ # wait for L_Data_ind while sending (for all EMI based backends)
+ option no_emisend_queuing 0
+ # SERVERNAME name of the EIBnet/IP server (default is 'knxd')
+ option Name "OpenWrt"
+ # do not assume KNXnet/IP Tunneling bus interface can handle parallel cEMI requests
+ option no_tunnel_client_queuing 0
+ # the next Layer2 interface may not enter monitor mode
+ option no_monitor 0
+ # enable EIBnet/IP Routing in the EIBnet/IP server
+ option Routing 0
+ # [ip[:port]] starts an EIBnet/IP multicast server
+ option Server 1
+ # MASK set trace flags (bitmask)
+ option trace 0
+ # tpuarts backend should generate L2 acks for all group telegrams
+ option tpuarts_ack_all_group 0
+ # tpuarts backend should generate L2 acks for all individual telegrams
+ option tpuarts_ack_all_individual 0
+ # tpuarts backend should should use a full interface reset (for Disch TPUART interfaces)
+ option tpuarts_disch_reset 0
+ # enable EIBnet/IP Tunneling in the EIBnet/IP server
+ option Tunnelling 1
+ # FILE listen at Unix domain socket FILE (default /tmp/eib)
+ option listen_local "/var/run/knxd"
+ # example with tpuarts interface
+ # option url 'tpuarts:/dev/ttyAMA0'
+ # example with IP interface in tunnel mode
+ option url 'ip:'
#!/bin/sh /etc/rc.common
-# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2016 OpenWrt.org
START=98
STOP=20
-NAME=knxd
-PROG=/usr/bin/$NAME
+PROG=/usr/bin/knxd
+USE_PROCD=1
-start() {
- local options url
- config_load "$NAME"
- config_get options args options ''
- config_get url args url
- service_start $PROG $options $url
+append_bool() {
+ local section="$1"
+ local option="$2"
+ local value="$3"
+ local _loctmp
+ local default="$4"
+ config_get_bool _loctmp "$section" "$option"
+ [ -z "$_loctmp" ] && _loctmp="$default"
+ [ "$_loctmp" -gt 0 ] && append params "--$value"
}
-stop() {
- service_stop $PROG
+append_parm() {
+ local section="$1"
+ local option="$2"
+ local switch="$3"
+ local _loctmp
+ local default="$4"
+ config_get _loctmp "$section" "$option"
+ [ -z "$_loctmp" ] && _loctmp="$default"
+ [ -z "$_loctmp" ] && return 0
+ append params "--$switch=$_loctmp"
+}
+
+start_service() {
+ local options url
+ config_load knxd
+ append_parm args eibaddr "eibaddr" "0.0.1"
+ append_parm args layer2 "layer2"
+ append_bool args GroupCache "GroupCache" 0
+ append_parm args daemon "daemon" "/var/log/knxd.log"
+ append_bool args Discovery "Discovery" 1
+ append_parm args error "error" # "5"
+ append_parm args listen_tcp "listen-tcp" "6720"
+ append_bool args no_emisend_queuing "no-emisend-queuing" 0
+ append_parm args Name "Name" "OpenWrt"
+ append_bool args no_tunnel_client_queuing "no-tunnel-client-queuing" 0
+ append_bool args no_monitor "no-monitor" 0
+ append_bool args Routing "Routing" 0
+ append_parm args trace "trace" # "7"
+ append_bool args tpuarts_ack_all_group "tpuarts-ack-all-group" 0
+ append_bool args tpuarts_ack_all_individual "tpuarts-ack-all-individual" 0
+ append_bool args tpuarts_disch_reset "tpuarts-disch-reset" 0
+ append_bool args Tunnelling "Tunnelling" 1
+ append_parm args listen_local "listen-local" "/var/run/knxd"
+ append_bool args Server "Server" 1
+ config_get url args url
+ procd_open_instance
+ procd_set_param command $PROG $params $url
+ procd_set_param respawn
+ procd_close_instance
+}
+
+stop_service() {
+ killall knxd
+}
+
+reload_service()
+{
+ restart
+}
+
+service_triggers()
+{
+ procd_add_reload_trigger knxd
}
include $(TOPDIR)/rules.mk
PKG_NAME:=krb5
-PKG_VERSION:=1.13.2
+PKG_VERSION:=1.14
PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=NOTICE
-PKG_SOURCE:=krb5-$(PKG_VERSION)-signed.tar
-PKG_SOURCE_URL:=http://web.mit.edu/kerberos/dist/krb5/1.13/
-PKG_MD5SUM:=f7ebfa6c99c10b16979ebf9a98343189
+PKG_SOURCE:=krb5-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://web.mit.edu/kerberos/dist/krb5/1.14/
+PKG_MD5SUM:=0727968764d0208388b85ad31aafde24
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1
Kerberos
endef
-define Build/Prepare
- # Krb5 tarball contains signature and a second tarball
- # containing source code.
- tar xf "$(DL_DIR)/$(PKG_SOURCE)" -C "$(BUILD_DIR)"
- tar xzf "$(BUILD_DIR)/krb5-$(PKG_VERSION).tar.gz" -C "$(BUILD_DIR)"
- patch -p1 -d "$(PKG_BUILD_DIR)" < "$(PATCH_DIR)/001-fix-build.patch"
-endef
-
CONFIGURE_PATH = ./src
CONFIGURE_VARS += \
+++ /dev/null
-diff -u --recursive krb5-1.13.1-vanilla/src/lib/krad/packet.c krb5-1.13.1/src/lib/krad/packet.c
---- krb5-1.13.1-vanilla/src/lib/krad/packet.c 2015-02-22 10:08:38.213087138 -0500
-+++ krb5-1.13.1/src/lib/krad/packet.c 2015-02-22 10:13:25.223709951 -0500
-@@ -253,7 +253,7 @@
- {
- krb5_error_code retval;
- krad_packet *pkt;
-- uchar id;
-+ uchar id = 0;
- size_t attrset_len;
-
- pkt = packet_new();
-diff -u --recursive krb5-1.13.1-vanilla/src/lib/krb5/ccache/cc_file.c krb5-1.13.1/src/lib/krb5/ccache/cc_file.c
---- krb5-1.13.1-vanilla/src/lib/krb5/ccache/cc_file.c 2015-02-22 10:08:38.211087133 -0500
-+++ krb5-1.13.1/src/lib/krb5/ccache/cc_file.c 2015-02-22 10:14:15.410819464 -0500
-@@ -401,7 +401,7 @@
- {
- krb5_error_code ret;
- struct k5buf buf;
-- size_t maxsize;
-+ size_t maxsize = 0;
-
- *princ = NULL;
- k5_cc_mutex_assert_locked(context, &((fcc_data *)id->data)->lock);
-@@ -1088,7 +1088,7 @@
- krb5_fcc_cursor *fcursor = *cursor;
- fcc_data *data = id->data;
- struct k5buf buf;
-- size_t maxsize;
-+ size_t maxsize = 0;
-
- memset(creds, 0, sizeof(*creds));
- k5_cc_mutex_lock(context, &data->lock);
-diff -u --recursive krb5-1.13.1-vanilla/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c krb5-1.13.1/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c
---- krb5-1.13.1-vanilla/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c 2015-02-22 10:08:38.190087088 -0500
-+++ krb5-1.13.1/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c 2015-02-22 10:17:37.981263250 -0500
-@@ -3593,7 +3593,7 @@
- {
- CK_ULONG i, r;
- unsigned char *cp;
-- size_t label_len;
-+ size_t label_len = 0;
- CK_ULONG count = 0;
- CK_SLOT_ID_PTR slotlist;
- CK_TOKEN_INFO tinfo;
--- /dev/null
+diff -u --recursive krb5-1.14-vanilla/src/kadmin/ktutil/ktutil_funcs.c krb5-1.14/src/kadmin/ktutil/ktutil_funcs.c
+--- krb5-1.14-vanilla/src/kadmin/ktutil/ktutil_funcs.c 2015-12-31 21:50:20.572824136 -0500
++++ krb5-1.14/src/kadmin/ktutil/ktutil_funcs.c 2015-12-31 22:11:26.603926597 -0500
+@@ -64,7 +64,7 @@
+ krb5_kt_list *list;
+ int idx;
+ {
+- krb5_kt_list lp, prev;
++ krb5_kt_list lp, prev = NULL;
+ int i;
+
+ for (lp = *list, i = 1; lp; prev = lp, lp = lp->next, i++) {
+diff -u --recursive krb5-1.14-vanilla/src/lib/krad/packet.c krb5-1.14/src/lib/krad/packet.c
+--- krb5-1.14-vanilla/src/lib/krad/packet.c 2015-12-31 21:50:20.476819205 -0500
++++ krb5-1.14/src/lib/krad/packet.c 2015-12-31 22:05:32.041257903 -0500
+@@ -253,7 +253,7 @@
+ {
+ krb5_error_code retval;
+ krad_packet *pkt;
+- uchar id;
++ uchar id = 0;
+ size_t attrset_len;
+
+ pkt = packet_new();
+diff -u --recursive krb5-1.14-vanilla/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c krb5-1.14/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c
+--- krb5-1.14-vanilla/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c 2015-12-31 21:50:20.531822031 -0500
++++ krb5-1.14/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c 2015-12-31 22:08:32.871650805 -0500
+@@ -3618,7 +3618,7 @@
+ {
+ CK_ULONG i, r;
+ unsigned char *cp;
+- size_t label_len;
++ size_t label_len = 0;
+ CK_ULONG count = 0;
+ CK_SLOT_ID_PTR slotlist;
+ CK_TOKEN_INFO tinfo;
+diff -u --recursive krb5-1.14-vanilla/src/util/profile/prof_file.c krb5-1.14/src/util/profile/prof_file.c
+--- krb5-1.14-vanilla/src/util/profile/prof_file.c 2015-12-31 21:50:20.474819103 -0500
++++ krb5-1.14/src/util/profile/prof_file.c 2015-12-31 21:59:08.551797171 -0500
+@@ -359,6 +359,8 @@
+ if (f == NULL)
+ return (errno != 0) ? errno : ENOENT;
+ set_cloexec_file(f);
++ } else {
++ f = NULL;
+ }
+
+ data->upd_serial++;
include $(TOPDIR)/rules.mk
PKG_NAME:=lighttpd
-PKG_VERSION:=1.4.37
+PKG_VERSION:=1.4.38
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://download.lighttpd.net/lighttpd/releases-1.4.x
-PKG_MD5SUM:=ca40168f54b46ee29475868ced8507d6
+PKG_MD5SUM:=7adc12323f37ed24ecf026c7547b577d
PKG_LICENSE:=BSD-3c
PKG_LICENSE_FILES:=COPYING
#
-# Copyright (C) 2008-2015 OpenWrt.org
+# Copyright (C) 2008-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=linknx
-PKG_VERSION:=0.0.1.32
-PKG_RELEASE:=7
-PKG_MD5SUM:=7ecc1208f59bceb05068c752b2250b63
+PKG_VERSION:=0.0.1.33
+PKG_RELEASE:=1
PKG_MAINTAINER:=Othmar Truniger <github@truniger.ch>
PKG_LICENSE:=GPL-2.0+
-PKG_SOURCE_URL:=@SF/linknx
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/linknx/linknx.git
+PKG_SOURCE_VERSION:=f627ed44feaea5a1f67c53f2810c44a14c059cef
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)
+PKG_SOURCE:=$(PKG_NAME)-${PKG_VERSION}.tar.gz
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
PKG_BUILD_DEPENDS:=argp-standalone
PKG_FORTIFY_SOURCE:=1
+PKG_FIXUP:=autoreconf
+
include $(INCLUDE_DIR)/package.mk
define Package/linknx
+++ /dev/null
---- a/src/eibclient.c 2007-10-11 01:55:31.000000000 +0200
-+++ b/src/eibclient.c 2015-06-27 22:18:01.433296921 +0200
-@@ -32,6 +32,7 @@
- #include <netinet/in.h>
- #include <netdb.h>
- #include <errno.h>
-+#include <string.h>
-
- #include "config.h"
-
+++ /dev/null
---- a/src/linknx.cpp 2012-06-04 22:12:13.000000000 +0200
-+++ b/src/linknx.cpp 2015-06-27 22:35:23.705721355 +0200
-@@ -136,7 +136,7 @@
- if (errno)
- printf (": %s\n", strerror (errno));
- else
-- printf ("\n", strerror (errno));
-+ printf ("\n");
- exit (1);
- }
-
include $(TOPDIR)/rules.mk
PKG_NAME:=mDNSResponder
-PKG_VERSION:=567
-PKG_RELEASE:=2
+PKG_VERSION:=576.30.4
+PKG_RELEASE:=1
PKG_SOURCE:=mDNSResponder-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://opensource.apple.com/tarballs/mDNSResponder/
-PKG_MD5SUM:=6eff6d243a12a3d4b6fca03c05a9893b
+PKG_MD5SUM:=940057ac8b513b00e8e9ca12ef796762
PKG_MAINTAINER:=Steven Barth <cyrus@openwrt.org>
PKG_LICENSE:=Apache-2.0
# I have no idea why -lc is required, but without it, C library symbols are
# not found:
MAKE_FLAGS += \
+ LD="$(TARGET_CC)" \
CFLAGS_DEBUG="$(TARGET_CFLAGS)" \
LINKOPTS=-lc \
LDCONFIG= \
--- /dev/null
+--- a/mDNSPosix/mDNSPosix.c
++++ b/mDNSPosix/mDNSPosix.c
+@@ -1673,7 +1673,7 @@ mDNSexport mDNSs32 mDNSPlatformGetServic
+ return -1;
+ }
+
+-mDNSexport void mDNSPlatformSetDelegatePID(UDPSocket *src, const mDNSAddr *dst, DNSQuestion *q)
++mDNSexport void mDNSPlatformSetuDNSSocktOpt(UDPSocket *src, const mDNSAddr *dst, DNSQuestion *q)
+ {
+ (void) src;
+ (void) dst;
default y
help
Includes websockets support in the broker, via libwebsockets
+
+config MOSQUITTO_PASSWD
+ bool "Include mosquitto_passwd utility"
+ depends on PACKAGE_mosquitto
+ default y
+ help
+ mosquitto_passwd is a tool for managing password files for mosquitto.
include $(TOPDIR)/rules.mk
PKG_NAME:=mosquitto
-PKG_VERSION:=1.4.4
+PKG_VERSION:=1.4.7
PKG_RELEASE:=1
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE.txt
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://mosquitto.org/files/source/
-PKG_MD5SUM:=89a57f11cdfec140fa21fe3d4493b2ca
+PKG_MD5SUM:=4cb978502312bff2dcdaab6a433b1bf2
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
include $(INCLUDE_DIR)/package.mk
Package/$(PKG_NAME)-nossl/conffiles = $(Package/$(PKG_NAME)/conffiles)
-define Package/$(PKG_NAME)/install
+define Package/mosquitto/install/default
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mosquitto $(1)/usr/sbin/mosquitto
$(INSTALL_DIR) $(1)/etc/mosquitto
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) ./files/mosquitto.uci.convert $(1)/usr/bin
endef
-Package/$(PKG_NAME)-nossl/install = $(Package/$(PKG_NAME)/install)
+define Package/mosquitto-nossl/install
+ $(call Package/mosquitto/install/default,$(1))
+endef
+
+define Package/mosquitto/install
+ $(call Package/mosquitto/install/default,$(1))
+ifeq ($(CONFIG_MOSQUITTO_PASSWD),y)
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mosquitto_passwd $(1)/usr/bin
+endif
+endef
define Package/mosquitto-client/install
$(INSTALL_DIR) $(1)/usr/bin
# Applies to all...
MAKE_FLAGS += WITH_DOCS=no
ifeq ($(BUILD_VARIANT),nossl)
- MAKE_FLAGS += WITH_TLS=no WITH_WEBSOCKETS=no
+ MAKE_FLAGS += WITH_TLS=no WITH_WEBSOCKETS=no
else
MAKE_FLAGS += WITH_WEBSOCKETS=$(if $(CONFIG_MOSQUITTO_LWS),"yes","no")
endif
include $(TOPDIR)/rules.mk
PKG_NAME:=mwan3
-PKG_VERSION:=1.6
-PKG_RELEASE:=3
+PKG_VERSION:=2.0
+PKG_RELEASE:=2
PKG_MAINTAINER:=Jeroen Louwes <jeroen.louwes@gmail.com>
PKG_LICENSE:=GPLv2
list use_member 'wan_m2_w3'
list use_member 'wan2_m1_w2'
-config rule 'youtube'
- option sticky '1'
- option ipset 'youtube'
- option dest_port '80,443'
- option proto 'tcp'
- option use_policy 'balanced'
-
config rule 'https'
option sticky '1'
option dest_port '443'
#!/bin/sh
-local IP IPS IPT LOG
+. /lib/functions.sh
+. /lib/functions/network.sh
+. /lib/mwan3/mwan3.sh
-[ -n "$ACTION" ] || exit 0
-[ -n "$INTERFACE" ] || exit 0
+config_load mwan3
-if [ $ACTION == "ifup" ]; then
- [ -n "$DEVICE" ] || exit 0
-fi
-
-if [ -x /usr/sbin/ip ]; then
- IP="/usr/sbin/ip -4"
-elif [ -x /usr/bin/ip ]; then
- IP="/usr/bin/ip -4"
-else
- exit 1
-fi
+config_get enabled $INTERFACE enabled 0
+[ "$enabled" == "1" ] || exit 0
-if [ -x /usr/sbin/ipset ]; then
- IPS="/usr/sbin/ipset"
-else
- exit 1
-fi
-
-if [ -x /usr/sbin/iptables ]; then
- IPT="/usr/sbin/iptables -t mangle -w"
-else
- exit 1
-fi
+[ "$ACTION" == "ifup" -o "$ACTION" == "ifdown" ] || exit 1
+[ -n "$INTERFACE" ] || exit 2
-if [ -x /usr/bin/logger ]; then
- LOG="/usr/bin/logger -t mwan3 -p"
-else
- exit 1
+if [ "$ACTION" == "ifup" ]; then
+ [ -n "$DEVICE" ] || exit 3
fi
+[ -x /usr/bin/ip ] || exit 4
+[ -x /usr/sbin/ipset ] || exit 5
+[ -x /usr/sbin/iptables ] || exit 6
+[ -x /usr/sbin/ip6tables ] || exit 7
+[ -x /usr/bin/logger ] || exit 8
-mwan3_get_iface_id()
-{
- let iface_count++
- [ "$1" == "$INTERFACE" ] && iface_id=$iface_count
-}
-
-mwan3_set_general_iptables()
-{
- if ! $IPT -S mwan3_ifaces &> /dev/null; then
- $IPT -N mwan3_ifaces
- fi
-
- if ! $IPT -S mwan3_connected &> /dev/null; then
- $IPT -N mwan3_connected
- $IPS create mwan3_connected hash:net
- $IPT -A mwan3_connected -m set --match-set mwan3_connected dst -j MARK --set-xmark 0xff00/0xff00
- fi
-
- if ! $IPT -S mwan3_track &> /dev/null; then
- $IPT -N mwan3_track
- fi
-
- if ! $IPT -S mwan3_rules &> /dev/null; then
- $IPT -N mwan3_rules
- fi
-
- if ! $IPT -S mwan3_hook &> /dev/null; then
- $IPT -N mwan3_hook
- $IPT -A mwan3_hook -j CONNMARK --restore-mark --nfmask 0xff00 --ctmask 0xff00
- $IPT -A mwan3_hook -m mark --mark 0x0/0xff00 -j mwan3_ifaces
- $IPT -A mwan3_hook -m mark --mark 0x0/0xff00 -j mwan3_connected
- $IPT -A mwan3_hook -m mark --mark 0x0/0xff00 -j mwan3_track
- $IPT -A mwan3_hook -m mark --mark 0x0/0xff00 -j mwan3_rules
- $IPT -A mwan3_hook -j CONNMARK --save-mark --nfmask 0xff00 --ctmask 0xff00
- $IPT -A mwan3_hook -m mark ! --mark 0xff00/0xff00 -j mwan3_connected
- fi
-
- if ! $IPT -S PREROUTING | grep mwan3_hook &> /dev/null; then
- $IPT -A PREROUTING -j mwan3_hook
- fi
-
- if ! $IPT -S OUTPUT | grep mwan3_hook &> /dev/null; then
- $IPT -A OUTPUT -j mwan3_hook
- fi
-
- $IPT -F mwan3_rules
-}
-
-mwan3_set_general_rules()
-{
- if [ -z "$($IP rule list | awk '$1 == "2253:"')" ]; then
- $IP rule add pref 2253 fwmark 0xfd00/0xff00 blackhole
- fi
-
- if [ -z "$($IP rule list | awk '$1 == "2254:"')" ]; then
- $IP rule add pref 2254 fwmark 0xfe00/0xff00 unreachable
- fi
-}
-
-mwan3_set_connected_iptables()
-{
- local connected_network
-
- if $IPT -S mwan3_connected &> /dev/null; then
-
- $IPS create mwan3_connected_temp hash:net
-
- for connected_network in $($IP route | awk '{print $1}' | egrep '[0-9]{1,3}(\.[0-9]{1,3}){3}'); do
- $IPS -! add mwan3_connected_temp $connected_network
- done
-
- for connected_network in $($IP route list table 0 | awk '{print $2}' | egrep '[0-9]{1,3}(\.[0-9]{1,3}){3}'); do
- $IPS -! add mwan3_connected_temp $connected_network
- done
-
- $IPS add mwan3_connected_temp 224.0.0.0/3
- $IPS swap mwan3_connected_temp mwan3_connected
- $IPS destroy mwan3_connected_temp
-
- fi
-}
-
-mwan3_set_iface_iptables()
-{
- if ! $IPT -S mwan3_iface_$INTERFACE &> /dev/null; then
- $IPT -N mwan3_iface_$INTERFACE
- fi
-
- $IPT -F mwan3_iface_$INTERFACE
- $IPT -D mwan3_ifaces -m mark --mark 0x0/0xff00 -j mwan3_iface_$INTERFACE &> /dev/null
-
- if [ $ACTION == "ifup" ]; then
- $IPT -I mwan3_iface_$INTERFACE -i $DEVICE -m set --match-set mwan3_connected src -m mark --mark 0x0/0xff00 -m comment --comment "default" -j MARK --set-xmark 0xff00/0xff00
- $IPT -A mwan3_iface_$INTERFACE -i $DEVICE -m mark --mark 0x0/0xff00 -m comment --comment "$INTERFACE" -j MARK --set-xmark $(($iface_id*256))/0xff00
- $IPT -A mwan3_ifaces -m mark --mark 0x0/0xff00 -j mwan3_iface_$INTERFACE
- fi
-
- if [ $ACTION == "ifdown" ]; then
- $IPT -X mwan3_iface_$INTERFACE
- fi
-}
-
-mwan3_set_iface_route()
-{
- $IP route flush table $iface_id
- [ $ACTION == "ifup" ] && $IP route add table $iface_id default $route_args
-}
-
-mwan3_set_iface_rules()
-{
- while [ -n "$($IP rule list | awk '$1 == "'$(($iface_id+1000)):'"')" ]; do
- $IP rule del pref $(($iface_id+1000))
- done
-
- while [ -n "$($IP rule list | awk '$1 == "'$(($iface_id+2000)):'"')" ]; do
- $IP rule del pref $(($iface_id+2000))
- done
-
- [ $ACTION == "ifup" ] && $IP rule add pref $(($iface_id+1000)) iif $DEVICE lookup main
- [ $ACTION == "ifup" ] && $IP rule add pref $(($iface_id+2000)) fwmark $(($iface_id*256))/0xff00 lookup $iface_id
-}
-
-mwan3_set_iface_ipset()
-{
- local setname entry
-
- for setname in $(ipset -n list | grep ^mwan3_sticky_); do
- for entry in $(ipset list $setname | grep "$(echo $(($iface_id*256)) | awk '{ printf "0x%08x", $1; }')" | cut -d ' ' -f 1); do
- $IPS del $setname $entry
- done
- done
-}
-
-mwan3_track()
-{
- local track_ip track_ips reliability count timeout interval down up
-
- mwan3_list_track_ips()
- {
- track_ips="$1 $track_ips"
- }
- config_list_foreach $INTERFACE track_ip mwan3_list_track_ips
-
- if [ -e /var/run/mwan3track-$INTERFACE.pid ] ; then
- kill $(cat /var/run/mwan3track-$INTERFACE.pid) &> /dev/null
- rm /var/run/mwan3track-$INTERFACE.pid &> /dev/null
- fi
-
- if [ -n "$track_ips" ]; then
- config_get reliability $INTERFACE reliability 1
- config_get count $INTERFACE count 1
- config_get timeout $INTERFACE timeout 4
- config_get interval $INTERFACE interval 10
- config_get down $INTERFACE down 5
- config_get up $INTERFACE up 5
-
- $IPS -! create mwan3_track_$INTERFACE hash:ip
- $IPS create mwan3_track_temp_$INTERFACE hash:ip
-
- for track_ip in $track_ips; do
- $IPS -! add mwan3_track_temp_$INTERFACE $track_ip
- done
-
- $IPS swap mwan3_track_temp_$INTERFACE mwan3_track_$INTERFACE
- $IPS destroy mwan3_track_temp_$INTERFACE
-
- $IPT -D mwan3_track -p icmp -m set --match-set mwan3_track_$INTERFACE dst -m icmp --icmp-type 8 -m length --length 32 -j MARK --set-xmark 0xff00/0xff00 &> /dev/null
- $IPT -A mwan3_track -p icmp -m set --match-set mwan3_track_$INTERFACE dst -m icmp --icmp-type 8 -m length --length 32 -j MARK --set-xmark 0xff00/0xff00
-
- [ -x /usr/sbin/mwan3track ] && /usr/sbin/mwan3track $INTERFACE $DEVICE $reliability $count $timeout $interval $down $up $track_ips &
- else
- $IPT -D mwan3_track -p icmp -m set --match-set mwan3_track_$INTERFACE dst -m icmp --icmp-type 8 -m length --length 32 -j MARK --set-xmark 0xff00/0xff00 &> /dev/null
- $IPS destroy mwan3_track_$INTERFACE
- fi
-}
-
-mwan3_set_policy()
-{
- local iface_count iface_id INTERFACE metric probability weight
-
- config_get INTERFACE $1 interface
- config_get metric $1 metric 1
- config_get weight $1 weight 1
-
- [ -n "$INTERFACE" ] || return 0
-
- config_foreach mwan3_get_iface_id interface
-
- [ -n "$iface_id" ] || return 0
+local family gateway
- if $IPT -S mwan3_iface_$INTERFACE &> /dev/null; then
- if [ "$metric" -lt "$lowest_metric" ]; then
+config_get family $INTERFACE family ipv4
- total_weight=$weight
- $IPT -F mwan3_policy_$policy
- $IPT -A mwan3_policy_$policy -m mark --mark 0x0/0xff00 -m comment --comment "$INTERFACE $weight $weight" -j MARK --set-xmark $(($iface_id*256))/0xff00
-
- lowest_metric=$metric
-
- elif [ "$metric" -eq "$lowest_metric" ]; then
-
- total_weight=$(($total_weight+$weight))
- probability=$(($weight*1000/$total_weight))
-
- if [ "$probability" -lt 10 ]; then
- probability="0.00$probability"
- elif [ $probability -lt 100 ]; then
- probability="0.0$probability"
- elif [ $probability -lt 1000 ]; then
- probability="0.$probability"
- else
- probability="1"
- fi
-
- probability="-m statistic --mode random --probability $probability"
-
- $IPT -I mwan3_policy_$policy -m mark --mark 0x0/0xff00 $probability -m comment --comment "$INTERFACE $weight $total_weight" -j MARK --set-xmark $(($iface_id*256))/0xff00
- fi
- fi
-}
-
-mwan3_set_policies_iptables()
-{
- local last_resort lowest_metric policy total_weight
-
- policy=$1
-
- config_get last_resort $1 last_resort unreachable
-
- if [ "$policy" != $(echo "$policy" | cut -c1-15) ]; then
- $LOG warn "Policy $policy exceeds max of 15 chars. Not setting policy" && return 0
- fi
-
- if ! $IPT -S mwan3_policy_$policy &> /dev/null; then
- $IPT -N mwan3_policy_$policy
- fi
-
- $IPT -F mwan3_policy_$policy
-
- case "$last_resort" in
- blackhole)
- $IPT -A mwan3_policy_$policy -m mark --mark 0x0/0xff00 -m comment --comment "blackhole" -j MARK --set-xmark 0xfd00/0xff00
- ;;
- default)
- $IPT -A mwan3_policy_$policy -m mark --mark 0x0/0xff00 -m comment --comment "default" -j MARK --set-xmark 0xff00/0xff00
- ;;
- *)
- $IPT -A mwan3_policy_$policy -m mark --mark 0x0/0xff00 -m comment --comment "unreachable" -j MARK --set-xmark 0xfe00/0xff00
- ;;
- esac
-
- lowest_metric=256
- total_weight=0
-
- config_list_foreach $policy use_member mwan3_set_policy
-}
-
-mwan3_set_sticky_iptables()
-{
- local INTERFACE iface_count iface_id
-
- INTERFACE="$1"
-
- config_foreach mwan3_get_iface_id interface
- unset iface_count
-
- $IPS -! create mwan3_sticky_$rule hash:ip,mark markmask 0xff00 timeout $timeout
-
- if [ -n "$iface_id" ]; then
- if [ -n "$($IPT -S mwan3_iface_$1 2> /dev/null)" ]; then
- $IPT -I mwan3_rule_$rule -m set ! --match-set mwan3_sticky_$rule src,src -j MARK --set-xmark 0x0/0xff00
- $IPT -I mwan3_rule_$rule -m mark --mark 0/0xff00 -j MARK --set-xmark $(($iface_id*256))/0xff00
- fi
- fi
-
- unset iface_id
-}
-
-mwan3_set_user_rules_iptables()
-{
- local ipset proto src_ip src_port sticky dest_ip dest_port use_policy rule timeout
-
- config_get sticky $1 sticky 0
- config_get timeout $1 timeout 600
- config_get ipset $1 ipset
- config_get proto $1 proto all
- config_get src_ip $1 src_ip 0.0.0.0/0
- config_get src_port $1 src_port 0:65535
- config_get dest_ip $1 dest_ip 0.0.0.0/0
- config_get dest_port $1 dest_port 0:65535
- config_get use_policy $1 use_policy
-
- rule="$1"
-
- if [ "$rule" != $(echo "$rule" | cut -c1-15) ]; then
- $LOG warn "Rule $rule exceeds max of 15 chars. Not setting rule" && return 0
- fi
-
- if [ -n "$ipset" ]; then
- if [ -z "$($IPS -n list $ipset)" ]; then
- $IPS create $ipset hash:ip timeout 3600
- fi
-
- ipset="-m set --match-set $ipset dst"
- fi
-
- if [ -n "$use_policy" ]; then
- if [ "$use_policy" == "default" ]; then
- use_policy="MARK --set-xmark 0xff00/0xff00"
- elif [ "$use_policy" == "unreachable" ]; then
- use_policy="MARK --set-xmark 0xfe00/0xff00"
- elif [ "$use_policy" == "blackhole" ]; then
- use_policy="MARK --set-xmark 0xfd00/0xff00"
- else
- if [ "$sticky" -eq 1 ]; then
-
- if ! $IPT -S mwan3_rule_$rule &> /dev/null; then
- $IPT -N mwan3_rule_$rule
- fi
-
- $IPT -F mwan3_rule_$rule
-
- config_foreach mwan3_set_sticky_iptables interface
-
- $IPT -A mwan3_rule_$rule -m mark --mark 0/0xff00 -j mwan3_policy_$use_policy
- $IPT -A mwan3_rule_$rule -m mark ! --mark 0xfc00/0xfc00 -j SET --del-set mwan3_sticky_$rule src,src
- $IPT -A mwan3_rule_$rule -m mark ! --mark 0xfc00/0xfc00 -j SET --add-set mwan3_sticky_$rule src,src
-
- use_policy="mwan3_rule_$rule"
- else
- use_policy="mwan3_policy_$use_policy"
- fi
- fi
-
- case $proto in
- tcp|udp)
- $IPT -A mwan3_rules -p $proto -s $src_ip -d $dest_ip $ipset -m multiport --sports $src_port -m multiport --dports $dest_port -m mark --mark 0/0xff00 -m comment --comment "$1" -j $use_policy &> /dev/null
- ;;
- *)
- $IPT -A mwan3_rules -p $proto -s $src_ip -d $dest_ip $ipset -m mark --mark 0/0xff00 -m comment --comment "$1" -j $use_policy &> /dev/null
- ;;
- esac
- fi
-}
-
-mwan3_ifupdown()
-{
- local counter enabled iface_count iface_id route_args wan_metric
-
- config_load mwan3
- config_foreach mwan3_get_iface_id interface
-
- [ -n "$iface_id" ] || return 0
- [ "$iface_count" -le 250 ] || return 0
- unset iface_count
-
- config_get enabled $INTERFACE enabled 0
-
- counter=0
-
- if [ $ACTION == "ifup" ]; then
- [ "$enabled" -eq 1 ] || return 0
-
- while [ -z "$($IP route list dev $DEVICE default | head -1)" -a "$counter" -lt 10 ]; do
- sleep 1
- let counter++
- if [ "$counter" -ge 10 ]; then
- $LOG warn "Could not find gateway for interface $INTERFACE ($DEVICE)" && return 0
- fi
- done
-
- route_args=$($IP route list dev $DEVICE default | head -1 | sed '/.*via \([^ ]*\) .*$/!d;s//via \1/;q' | egrep '[0-9]{1,3}(\.[0-9]{1,3}){3}')
- route_args="$route_args dev $DEVICE"
- fi
-
- while [ "$(pgrep -f -o hotplug-call)" -ne $$ -a "$counter" -lt 60 ]; do
- sleep 1
- let counter++
- if [ "$counter" -ge 60 ]; then
- $LOG warn "Timeout waiting for older hotplug processes to finish. $ACTION interface $INTERFACE (${DEVICE:-unknown}) aborted" && return 0
- fi
- done
-
- $LOG notice "$ACTION interface $INTERFACE (${DEVICE:-unknown})"
+if [ "$family" == "ipv4" ]; then
+ network_get_gateway gateway $INTERFACE
+elif [ "$family" == "ipv6" ]; then
+ network_get_gateway6 gateway $INTERFACE
+fi
- mwan3_set_general_iptables
- mwan3_set_general_rules
- mwan3_set_iface_iptables
- mwan3_set_iface_route
- mwan3_set_iface_rules
+[ -n "$gateway" ] || exit 9
- [ $ACTION == "ifdown" ] && mwan3_set_iface_ipset
- [ $ACTION == "ifup" ] && mwan3_track
+$LOG notice "$ACTION interface $INTERFACE (${DEVICE:-unknown})"
- config_foreach mwan3_set_policies_iptables policy
- config_foreach mwan3_set_user_rules_iptables rule
-}
+mwan3_set_connected_iptables
case "$ACTION" in
- ifup|ifdown)
- mwan3_ifupdown
- mwan3_set_connected_iptables
+ ifup)
+ mwan3_set_general_rules
+ mwan3_set_general_iptables
+ mwan3_create_iface_rules $INTERFACE $DEVICE
+ mwan3_create_iface_iptables $INTERFACE $DEVICE
+ mwan3_create_iface_route $INTERFACE $DEVICE
+ mwan3_track $INTERFACE $DEVICE
+ mwan3_set_policies_iptables
+ mwan3_set_user_rules
+ ;;
+ ifdown)
+ mwan3_delete_iface_rules $INTERFACE
+ mwan3_delete_iface_iptables $INTERFACE
+ mwan3_delete_iface_route $INTERFACE
+ mwan3_delete_iface_ipset_entries $INTERFACE
+ mwan3_set_policies_iptables
+ mwan3_set_user_rules
;;
esac
--- /dev/null
+#!/bin/sh
+
+local IP4 IP6 IPS IPT4 IPT6 LOG
+
+IP4="/usr/bin/ip -4"
+IP6="/usr/bin/ip -6"
+IPS="/usr/sbin/ipset"
+IPT4="/usr/sbin/iptables -t mangle -w"
+IPT6="/usr/sbin/ip6tables -t mangle -w"
+LOG="/usr/bin/logger -t mwan3 -p"
+
+mwan3_get_iface_id()
+{
+ local _tmp _iface _iface_count
+
+ _iface="$2"
+
+ mwan3_get_id()
+ {
+ let _iface_count++
+ [ "$1" == "$_iface" ] && _tmp=$_iface_count
+ }
+ config_foreach mwan3_get_id interface
+ export "$1=$_tmp"
+}
+
+mwan3_set_connected_iptables()
+{
+ local connected_network_v4 connected_network_v6
+
+ $IPS -! create mwan3_connected_v4 hash:net
+ $IPS create mwan3_connected_v4_temp hash:net
+
+ for connected_network_v4 in $($IP4 route | awk '{print $1}' | egrep '[0-9]{1,3}(\.[0-9]{1,3}){3}'); do
+ $IPS -! add mwan3_connected_v4_temp $connected_network_v4
+ done
+
+ for connected_network_v4 in $($IP4 route list table 0 | awk '{print $2}' | egrep '[0-9]{1,3}(\.[0-9]{1,3}){3}'); do
+ $IPS -! add mwan3_connected_v4_temp $connected_network_v4
+ done
+
+ $IPS add mwan3_connected_v4_temp 224.0.0.0/3
+
+ $IPS swap mwan3_connected_v4_temp mwan3_connected_v4
+ $IPS destroy mwan3_connected_v4_temp
+
+ $IPS -! create mwan3_connected_v6 hash:net family inet6
+ $IPS create mwan3_connected_v6_temp hash:net family inet6
+
+ for connected_network_v6 in $($IP6 route | awk '{print $1}' | egrep '([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])'); do
+ $IPS -! add mwan3_connected_v6_temp $connected_network_v6
+ done
+
+ $IPS swap mwan3_connected_v6_temp mwan3_connected_v6
+ $IPS destroy mwan3_connected_v6_temp
+
+ $IPS -! create mwan3_connected list:set
+ $IPS -! add mwan3_connected mwan3_connected_v4
+ $IPS -! add mwan3_connected mwan3_connected_v6
+}
+
+mwan3_set_general_rules()
+{
+ local IP
+
+ for IP in "$IP4" "$IP6"; do
+
+ if [ -z "$($IP rule list | awk '$1 == "2253:"')" ]; then
+ $IP rule add pref 2253 fwmark 0xfd00/0xff00 blackhole
+ fi
+
+ if [ -z "$($IP rule list | awk '$1 == "2254:"')" ]; then
+ $IP rule add pref 2254 fwmark 0xfe00/0xff00 unreachable
+ fi
+ done
+}
+
+mwan3_set_general_iptables()
+{
+ local IPT
+
+ for IPT in "$IPT4" "$IPT6"; do
+
+ if ! $IPT -S mwan3_ifaces_in &> /dev/null; then
+ $IPT -N mwan3_ifaces_in
+ fi
+
+ if ! $IPT -S mwan3_connected &> /dev/null; then
+ $IPT -N mwan3_connected
+ $IPS -! create mwan3_connected list:set
+ $IPT -A mwan3_connected -m set --match-set mwan3_connected dst -j MARK --set-xmark 0xff00/0xff00
+ fi
+
+ if ! $IPT -S mwan3_ifaces_out &> /dev/null; then
+ $IPT -N mwan3_ifaces_out
+ fi
+
+ if ! $IPT -S mwan3_rules &> /dev/null; then
+ $IPT -N mwan3_rules
+ fi
+
+ if ! $IPT -S mwan3_hook &> /dev/null; then
+ $IPT -N mwan3_hook
+ $IPT -A mwan3_hook -j CONNMARK --restore-mark --nfmask 0xff00 --ctmask 0xff00
+ $IPT -A mwan3_hook -m mark --mark 0x0/0xff00 -j mwan3_ifaces_in
+ $IPT -A mwan3_hook -m mark --mark 0x0/0xff00 -j mwan3_connected
+ $IPT -A mwan3_hook -m mark --mark 0x0/0xff00 -j mwan3_ifaces_out
+ $IPT -A mwan3_hook -m mark --mark 0x0/0xff00 -j mwan3_rules
+ $IPT -A mwan3_hook -j CONNMARK --save-mark --nfmask 0xff00 --ctmask 0xff00
+ $IPT -A mwan3_hook -m mark ! --mark 0xff00/0xff00 -j mwan3_connected
+ fi
+
+ if ! $IPT -S PREROUTING | grep mwan3_hook &> /dev/null; then
+ $IPT -A PREROUTING -j mwan3_hook
+ fi
+
+ if ! $IPT -S OUTPUT | grep mwan3_hook &> /dev/null; then
+ $IPT -A OUTPUT -j mwan3_hook
+ fi
+ done
+}
+
+mwan3_create_iface_iptables()
+{
+ local id family src_ip src_ipv6
+
+ config_get family $1 family ipv4
+ mwan3_get_iface_id id $1
+
+ [ -n "$id" ] || return 0
+
+ if [ "$family" == "ipv4" ]; then
+
+ network_get_ipaddr src_ip $1
+
+ $IPS -! create mwan3_connected list:set
+
+ if ! $IPT4 -S mwan3_ifaces_in &> /dev/null; then
+ $IPT4 -N mwan3_ifaces_in
+ fi
+
+ if ! $IPT4 -S mwan3_ifaces_out &> /dev/null; then
+ $IPT4 -N mwan3_ifaces_out
+ fi
+
+ if ! $IPT4 -S mwan3_iface_in_$1 &> /dev/null; then
+ $IPT4 -N mwan3_iface_in_$1
+ fi
+
+ if ! $IPT4 -S mwan3_iface_out_$1 &> /dev/null; then
+ $IPT4 -N mwan3_iface_out_$1
+ fi
+
+ $IPT4 -F mwan3_iface_in_$1
+ $IPT4 -A mwan3_iface_in_$1 -i $2 -m set --match-set mwan3_connected src -m mark --mark 0x0/0xff00 -m comment --comment "default" -j MARK --set-xmark 0xff00/0xff00
+ $IPT4 -A mwan3_iface_in_$1 -i $2 -m mark --mark 0x0/0xff00 -m comment --comment "$1" -j MARK --set-xmark $(($id*256))/0xff00
+
+ $IPT4 -D mwan3_ifaces_in -m mark --mark 0x0/0xff00 -j mwan3_iface_in_$1 &> /dev/null
+ $IPT4 -A mwan3_ifaces_in -m mark --mark 0x0/0xff00 -j mwan3_iface_in_$1
+
+ $IPT4 -F mwan3_iface_out_$1
+ $IPT4 -A mwan3_iface_out_$1 -s $src_ip -m mark --mark 0x0/0xff00 -m comment --comment "$1" -j MARK --set-xmark $(($id*256))/0xff00
+
+ $IPT4 -D mwan3_ifaces_out -m mark --mark 0x0/0xff00 -j mwan3_iface_out_$1 &> /dev/null
+ $IPT4 -A mwan3_ifaces_out -m mark --mark 0x0/0xff00 -j mwan3_iface_out_$1
+ fi
+
+ if [ "$family" == "ipv6" ]; then
+
+ network_get_ipaddr6 src_ipv6 $1
+
+ $IPS -! create mwan3_connected_v6 hash:net family inet6
+
+ if ! $IPT6 -S mwan3_ifaces_in &> /dev/null; then
+ $IPT6 -N mwan3_ifaces_in
+ fi
+
+ if ! $IPT6 -S mwan3_ifaces_out &> /dev/null; then
+ $IPT6 -N mwan3_ifaces_out
+ fi
+
+ if ! $IPT6 -S mwan3_iface_in_$1 &> /dev/null; then
+ $IPT6 -N mwan3_iface_in_$1
+ fi
+
+ if ! $IPT6 -S mwan3_iface_out_$1 &> /dev/null; then
+ $IPT6 -N mwan3_iface_out_$1
+ fi
+
+ $IPT6 -F mwan3_iface_in_$1
+ $IPT6 -A mwan3_iface_in_$1 -i $2 -m set --match-set mwan3_connected_v6 src -m mark --mark 0x0/0xff00 -m comment --comment "default" -j MARK --set-xmark 0xff00/0xff00
+ $IPT6 -A mwan3_iface_in_$1 -i $2 -m mark --mark 0x0/0xff00 -m comment --comment "$1" -j MARK --set-xmark $(($id*256))/0xff00
+
+ $IPT6 -D mwan3_ifaces_in -m mark --mark 0x0/0xff00 -j mwan3_iface_in_$1 &> /dev/null
+ $IPT6 -A mwan3_ifaces_in -m mark --mark 0x0/0xff00 -j mwan3_iface_in_$1
+
+ $IPT6 -F mwan3_iface_out_$1
+ $IPT6 -A mwan3_iface_out_$1 -s $src_ipv6 -m mark --mark 0x0/0xff00 -m comment --comment "$1" -j MARK --set-xmark $(($id*256))/0xff00
+
+ $IPT6 -D mwan3_ifaces_out -m mark --mark 0x0/0xff00 -j mwan3_iface_out_$1 &> /dev/null
+ $IPT6 -A mwan3_ifaces_out -m mark --mark 0x0/0xff00 -j mwan3_iface_out_$1
+ fi
+}
+
+mwan3_delete_iface_iptables()
+{
+ config_get family $1 family ipv4
+
+ if [ "$family" == "ipv4" ]; then
+
+ $IPT4 -D mwan3_ifaces_in -m mark --mark 0x0/0xff00 -j mwan3_iface_in_$1 &> /dev/null
+ $IPT4 -F mwan3_iface_in_$1 &> /dev/null
+ $IPT4 -X mwan3_iface_in_$1 &> /dev/null
+
+ $IPT4 -D mwan3_ifaces_out -m mark --mark 0x0/0xff00 -j mwan3_iface_out_$1 &> /dev/null
+ $IPT4 -F mwan3_iface_out_$1 &> /dev/null
+ $IPT4 -X mwan3_iface_out_$1 &> /dev/null
+ fi
+
+ if [ "$family" == "ipv6" ]; then
+
+ $IPT6 -D mwan3_ifaces_in -m mark --mark 0x0/0xff00 -j mwan3_iface_in_$1 &> /dev/null
+ $IPT6 -F mwan3_iface_in_$1 &> /dev/null
+ $IPT6 -X mwan3_iface_in_$1 &> /dev/null
+
+ $IPT6 -D mwan3_ifaces_out -m mark --mark 0x0/0xff00 -j mwan3_iface_out_$1 &> /dev/null
+ $IPT6 -F mwan3_iface_out_$1 &> /dev/null
+ $IPT6 -X mwan3_iface_out_$1 &> /dev/null
+ fi
+}
+
+mwan3_create_iface_route()
+{
+ local id route_args
+
+ config_get family $1 family ipv4
+ mwan3_get_iface_id id $1
+
+ [ -n "$id" ] || return 0
+
+ if [ "$family" == "ipv4" ]; then
+
+ network_get_gateway route_args $1
+ route_args="via $route_args dev $2"
+
+ $IP4 route flush table $id
+ $IP4 route add table $id default $route_args
+ fi
+
+ if [ "$family" == "ipv6" ]; then
+
+ network_get_gateway6 route_args $1
+ route_args="via $route_args dev $2"
+
+ $IP6 route flush table $id
+ $IP6 route add table $id default $route_args
+ fi
+}
+
+mwan3_delete_iface_route()
+{
+ local id
+
+ config_get family $1 family ipv4
+ mwan3_get_iface_id id $1
+
+ [ -n "$id" ] || return 0
+
+ if [ "$family" == "ipv4" ]; then
+ $IP4 route flush table $id
+ fi
+
+ if [ "$family" == "ipv6" ]; then
+ $IP6 route flush table $id
+ fi
+}
+
+mwan3_create_iface_rules()
+{
+ local id family
+
+ config_get family $1 family ipv4
+ mwan3_get_iface_id id $1
+
+ [ -n "$id" ] || return 0
+
+ if [ "$family" == "ipv4" ]; then
+
+ while [ -n "$($IP4 rule list | awk '$1 == "'$(($id+1000)):'"')" ]; do
+ $IP4 rule del pref $(($id+1000))
+ done
+
+ while [ -n "$($IP4 rule list | awk '$1 == "'$(($id+2000)):'"')" ]; do
+ $IP4 rule del pref $(($id+2000))
+ done
+
+ $IP4 rule add pref $(($id+1000)) iif $2 lookup main
+ $IP4 rule add pref $(($id+2000)) fwmark $(($id*256))/0xff00 lookup $id
+ fi
+
+ if [ "$family" == "ipv6" ]; then
+
+ while [ -n "$($IP6 rule list | awk '$1 == "'$(($id+1000)):'"')" ]; do
+ $IP6 rule del pref $(($id+1000))
+ done
+
+ while [ -n "$($IP6 rule list | awk '$1 == "'$(($id+2000)):'"')" ]; do
+ $IP6 rule del pref $(($id+2000))
+ done
+
+ $IP6 rule add pref $(($id+1000)) iif $2 lookup main
+ $IP6 rule add pref $(($id+2000)) fwmark $(($id*256))/0xff00 lookup $id
+ fi
+}
+
+mwan3_delete_iface_rules()
+{
+ local id family
+
+ config_get family $1 family ipv4
+ mwan3_get_iface_id id $1
+
+ [ -n "$id" ] || return 0
+
+ if [ "$family" == "ipv4" ]; then
+
+ while [ -n "$($IP4 rule list | awk '$1 == "'$(($id+1000)):'"')" ]; do
+ $IP4 rule del pref $(($id+1000))
+ done
+
+ while [ -n "$($IP4 rule list | awk '$1 == "'$(($id+2000)):'"')" ]; do
+ $IP4 rule del pref $(($id+2000))
+ done
+ fi
+
+ if [ "$family" == "ipv6" ]; then
+
+ while [ -n "$($IP6 rule list | awk '$1 == "'$(($id+1000)):'"')" ]; do
+ $IP6 rule del pref $(($id+1000))
+ done
+
+ while [ -n "$($IP6 rule list | awk '$1 == "'$(($id+2000)):'"')" ]; do
+ $IP6 rule del pref $(($id+2000))
+ done
+ fi
+}
+
+mwan3_delete_iface_ipset_entries()
+{
+ local id setname entry
+
+ mwan3_get_iface_id id $1
+
+ [ -n "$id" ] || return 0
+
+ for setname in $(ipset -n list | grep ^mwan3_sticky_); do
+ for entry in $(ipset list $setname | grep "$(echo $(($id*256)) | awk '{ printf "0x%08x", $1; }')" | cut -d ' ' -f 1); do
+ $IPS del $setname $entry
+ done
+ done
+}
+
+mwan3_track()
+{
+ local track_ip track_ips reliability count timeout interval down up
+
+ mwan3_list_track_ips()
+ {
+ track_ips="$1 $track_ips"
+ }
+ config_list_foreach $1 track_ip mwan3_list_track_ips
+
+ if [ -e /var/run/mwan3track-$1.pid ] ; then
+ kill $(cat /var/run/mwan3track-$1.pid) &> /dev/null
+ rm /var/run/mwan3track-$1.pid &> /dev/null
+ fi
+
+ if [ -n "$track_ips" ]; then
+ config_get reliability $1 reliability 1
+ config_get count $1 count 1
+ config_get timeout $1 timeout 4
+ config_get interval $1 interval 10
+ config_get down $1 down 5
+ config_get up $1 up 5
+
+ [ -x /usr/sbin/mwan3track ] && /usr/sbin/mwan3track $1 $2 $reliability $count $timeout $interval $down $up $track_ips &
+ fi
+}
+
+mwan3_set_policy()
+{
+ local iface_count id iface family metric probability weight
+
+ config_get iface $1 interface
+ config_get metric $1 metric 1
+ config_get weight $1 weight 1
+
+ [ -n "$iface" ] || return 0
+
+ mwan3_get_iface_id id $iface
+
+ [ -n "$id" ] || return 0
+
+ config_get family $iface family ipv4
+
+ if [ "$family" == "ipv4" ]; then
+
+ if [ -n "$($IP4 route list table $id)" ]; then
+ if [ "$metric" -lt "$lowest_metric_v4" ]; then
+
+ total_weight_v4=$weight
+ $IPT4 -F mwan3_policy_$policy
+ $IPT4 -A mwan3_policy_$policy -m mark --mark 0x0/0xff00 -m comment --comment "$iface $weight $weight" -j MARK --set-xmark $(($id*256))/0xff00
+
+ lowest_metric_v4=$metric
+
+ elif [ "$metric" -eq "$lowest_metric_v4" ]; then
+
+ total_weight_v4=$(($total_weight_v4+$weight))
+ probability=$(($weight*1000/$total_weight_v4))
+
+ if [ "$probability" -lt 10 ]; then
+ probability="0.00$probability"
+ elif [ $probability -lt 100 ]; then
+ probability="0.0$probability"
+ elif [ $probability -lt 1000 ]; then
+ probability="0.$probability"
+ else
+ probability="1"
+ fi
+
+ probability="-m statistic --mode random --probability $probability"
+
+ $IPT4 -I mwan3_policy_$policy -m mark --mark 0x0/0xff00 $probability -m comment --comment "$iface $weight $total_weight_v4" -j MARK --set-xmark $(($id*256))/0xff00
+ fi
+ fi
+ fi
+
+ if [ "$family" == "ipv6" ]; then
+
+ if [ -n "$($IP6 route list table $id)" ]; then
+ if [ "$metric" -lt "$lowest_metric_v6" ]; then
+
+ total_weight_v6=$weight
+ $IPT6 -F mwan3_policy_$policy
+ $IPT6 -A mwan3_policy_$policy -m mark --mark 0x0/0xff00 -m comment --comment "$iface $weight $weight" -j MARK --set-xmark $(($id*256))/0xff00
+
+ lowest_metric_v6=$metric
+
+ elif [ "$metric" -eq "$lowest_metric_v6" ]; then
+
+ total_weight_v6=$(($total_weight_v6+$weight))
+ probability=$(($weight*1000/$total_weight_v6))
+
+ if [ "$probability" -lt 10 ]; then
+ probability="0.00$probability"
+ elif [ $probability -lt 100 ]; then
+ probability="0.0$probability"
+ elif [ $probability -lt 1000 ]; then
+ probability="0.$probability"
+ else
+ probability="1"
+ fi
+
+ probability="-m statistic --mode random --probability $probability"
+
+ $IPT6 -I mwan3_policy_$policy -m mark --mark 0x0/0xff00 $probability -m comment --comment "$iface $weight $total_weight_v6" -j MARK --set-xmark $(($id*256))/0xff00
+ fi
+ fi
+ fi
+}
+
+mwan3_create_policies_iptables()
+{
+ local last_resort lowest_metric_v4 lowest_metric_v6 total_weight_v4 total_weight_v6 policy IPT
+
+ policy="$1"
+
+ config_get last_resort $1 last_resort unreachable
+
+ if [ "$1" != $(echo "$1" | cut -c1-15) ]; then
+ $LOG warn "Policy $1 exceeds max of 15 chars. Not setting policy" && return 0
+ fi
+
+ for IPT in "$IPT4" "$IPT6"; do
+
+ if ! $IPT -S mwan3_policy_$1 &> /dev/null; then
+ $IPT -N mwan3_policy_$1
+ fi
+
+ $IPT -F mwan3_policy_$1
+
+ case "$last_resort" in
+ blackhole)
+ $IPT -A mwan3_policy_$1 -m mark --mark 0x0/0xff00 -m comment --comment "blackhole" -j MARK --set-xmark 0xfd00/0xff00
+ ;;
+ default)
+ $IPT -A mwan3_policy_$1 -m mark --mark 0x0/0xff00 -m comment --comment "default" -j MARK --set-xmark 0xff00/0xff00
+ ;;
+ *)
+ $IPT -A mwan3_policy_$1 -m mark --mark 0x0/0xff00 -m comment --comment "unreachable" -j MARK --set-xmark 0xfe00/0xff00
+ ;;
+ esac
+ done
+
+ lowest_metric_v4=256
+ total_weight_v4=0
+
+ lowest_metric_v6=256
+ total_weight_v6=0
+
+ config_list_foreach $1 use_member mwan3_set_policy
+}
+
+mwan3_set_policies_iptables()
+{
+ config_foreach mwan3_create_policies_iptables policy
+}
+
+mwan3_set_sticky_iptables()
+{
+ local id iface
+
+ for iface in $($IPT4 -S $policy | cut -s -d'"' -f2 | awk '{print $1}'); do
+
+ if [ "$iface" == "$1" ]; then
+
+ mwan3_get_iface_id id $1
+
+ [ -n "$id" ] || return 0
+
+ for IPT in "$IPT4" "$IPT6"; do
+ if [ -n "$($IPT -S mwan3_iface_in_$1 2> /dev/null)" -a -n "$($IPT -S mwan3_iface_out_$1 2> /dev/null)" ]; then
+ $IPT -I mwan3_rule_$rule -m mark --mark $(($id*256))/0xff00 -m set ! --match-set mwan3_sticky_$rule src,src -j MARK --set-xmark 0x0/0xff00
+ $IPT -I mwan3_rule_$rule -m mark --mark 0/0xff00 -j MARK --set-xmark $(($id*256))/0xff00
+ fi
+ done
+ fi
+ done
+}
+
+mwan3_set_user_iptables_rule()
+{
+ local ipset family proto policy src_ip src_port sticky dest_ip dest_port use_policy timeout rule policy IPT
+
+ rule="$1"
+
+ config_get sticky $1 sticky 0
+ config_get timeout $1 timeout 600
+ config_get ipset $1 ipset
+ config_get proto $1 proto all
+ config_get src_ip $1 src_ip 0.0.0.0/0
+ config_get src_port $1 src_port 0:65535
+ config_get dest_ip $1 dest_ip 0.0.0.0/0
+ config_get dest_port $1 dest_port 0:65535
+ config_get use_policy $1 use_policy
+ config_get family $1 family any
+
+ if [ "$1" != $(echo "$1" | cut -c1-15) ]; then
+ $LOG warn "Rule $1 exceeds max of 15 chars. Not setting rule" && return 0
+ fi
+
+ if [ -n "$ipset" ]; then
+ ipset="-m set --match-set $ipset dst"
+ fi
+
+ if [ -n "$use_policy" ]; then
+ if [ "$use_policy" == "default" ]; then
+ policy="MARK --set-xmark 0xff00/0xff00"
+ elif [ "$use_policy" == "unreachable" ]; then
+ policy="MARK --set-xmark 0xfe00/0xff00"
+ elif [ "$use_policy" == "blackhole" ]; then
+ policy="MARK --set-xmark 0xfd00/0xff00"
+ else
+ if [ "$sticky" -eq 1 ]; then
+
+ policy="mwan3_policy_$use_policy"
+
+ for IPT in "$IPT4" "$IPT6"; do
+ if ! $IPT -S $policy &> /dev/null; then
+ $IPT -N $policy
+ fi
+
+ if ! $IPT -S mwan3_rule_$1 &> /dev/null; then
+ $IPT -N mwan3_rule_$1
+ fi
+
+ $IPT -F mwan3_rule_$1
+ done
+
+ $IPS -! create mwan3_sticky_v4_$rule hash:ip,mark markmask 0xff00 timeout $timeout
+ $IPS -! create mwan3_sticky_v6_$rule hash:ip,mark markmask 0xff00 timeout $timeout family inet6
+ $IPS -! create mwan3_sticky_$rule list:set
+ $IPS -! add mwan3_sticky_$rule mwan3_sticky_v4_$rule
+ $IPS -! add mwan3_sticky_$rule mwan3_sticky_v6_$rule
+
+ config_foreach mwan3_set_sticky_iptables interface
+
+ for IPT in "$IPT4" "$IPT6"; do
+ $IPT -A mwan3_rule_$1 -m mark --mark 0/0xff00 -j $policy
+ $IPT -A mwan3_rule_$1 -m mark ! --mark 0xfc00/0xfc00 -j SET --del-set mwan3_sticky_$rule src,src
+ $IPT -A mwan3_rule_$1 -m mark ! --mark 0xfc00/0xfc00 -j SET --add-set mwan3_sticky_$rule src,src
+ done
+
+ policy="mwan3_rule_$1"
+ else
+ policy="mwan3_policy_$use_policy"
+
+ for IPT in "$IPT4" "$IPT6"; do
+ if ! $IPT -S $policy &> /dev/null; then
+ $IPT -N $policy
+ fi
+ done
+
+ fi
+ fi
+
+ if [ "$family" == "any" ]; then
+
+ for IPT in "$IPT4" "$IPT6"; do
+ case $proto in
+ tcp|udp)
+ $IPT -A mwan3_rules -p $proto -s $src_ip -d $dest_ip $ipset -m multiport --sports $src_port -m multiport --dports $dest_port -m mark --mark 0/0xff00 -m comment --comment "$1" -j $policy &> /dev/null
+ ;;
+ *)
+ $IPT -A mwan3_rules -p $proto -s $src_ip -d $dest_ip $ipset -m mark --mark 0/0xff00 -m comment --comment "$1" -j $policy &> /dev/null
+ ;;
+ esac
+ done
+
+ elif [ "$family" == "ipv4" ]; then
+
+ case $proto in
+ tcp|udp)
+ $IPT4 -A mwan3_rules -p $proto -s $src_ip -d $dest_ip $ipset -m multiport --sports $src_port -m multiport --dports $dest_port -m mark --mark 0/0xff00 -m comment --comment "$1" -j $policy &> /dev/null
+ ;;
+ *)
+ $IPT4 -A mwan3_rules -p $proto -s $src_ip -d $dest_ip $ipset -m mark --mark 0/0xff00 -m comment --comment "$1" -j $policy &> /dev/null
+ ;;
+ esac
+
+ elif [ "$family" == "ipv6" ]; then
+
+ case $proto in
+ tcp|udp)
+ $IPT6 -A mwan3_rules -p $proto -s $src_ip -d $dest_ip $ipset -m multiport --sports $src_port -m multiport --dports $dest_port -m mark --mark 0/0xff00 -m comment --comment "$1" -j $policy &> /dev/null
+ ;;
+ *)
+ $IPT6 -A mwan3_rules -p $proto -s $src_ip -d $dest_ip $ipset -m mark --mark 0/0xff00 -m comment --comment "$1" -j $policy &> /dev/null
+ ;;
+ esac
+ fi
+ fi
+}
+
+mwan3_set_user_rules()
+{
+ local IPT
+
+ for IPT in "$IPT4" "$IPT6"; do
+
+ if ! $IPT -S mwan3_rules &> /dev/null; then
+ $IPT -N mwan3_rules
+ fi
+
+ $IPT -F mwan3_rules
+ done
+
+ config_foreach mwan3_set_user_iptables_rule rule
+}
+
+mwan3_report_iface_status()
+{
+ local device result track_ips tracking IP IPT
+
+ mwan3_get_iface_id id $1
+ network_get_device device $1
+ config_get enabled "$1" enabled 0
+ config_get family "$1" family ipv4
+
+ if [ "$family" == "ipv4" ]; then
+ IP="$IP4"
+ IPT="$IPT4"
+ fi
+
+ if [ "$family" == "ipv6" ]; then
+ IP="$IP6"
+ IPT="$IPT6"
+ fi
+
+ if [ -z "$id" -o -z "$device" ]; then
+ result="unknown"
+ elif [ -n "$($IP rule | awk '$1 == "'$(($id+1000)):'"')"i -a -n "$($IP rule | awk '$1 == "'$(($id+2000)):'"')" -a -n "$($IPT -S mwan3_iface_in_$1 2> /dev/null)" -a -n "$($IPT -S mwan3_iface_out_$1 2> /dev/null)" -a -n "$($IP route list table $id default dev $device 2> /dev/null)" ]; then
+ result="online"
+ elif [ -n "$($IP rule | awk '$1 == "'$(($id+1000)):'"')" -o -n "$($IP rule | awk '$1 == "'$(($id+2000)):'"')" -o -n "$($IPT -S mwan3_iface_in_$1 2> /dev/null)" -o -n "$($IPT -S mwan3_iface_out_$1 2> /dev/null)" -o -n "$($IP route list table $id default dev $device 2> /dev/null)" ]; then
+ result="error"
+ else
+ if [ "$enabled" == "1" ]; then
+ result="offline"
+ else
+ result="disabled"
+ fi
+ fi
+
+ mwan3_list_track_ips()
+ {
+ track_ips="$1 $track_ips"
+ }
+ config_list_foreach $1 track_ip mwan3_list_track_ips
+
+ if [ -n "$track_ips" ]; then
+ if [ -n "$(ps -w | grep mwan3track | grep -v grep | sed '/.*\/usr\/sbin\/mwan3track \([^ ]*\) .*$/!d;s//\1/' | awk '$1 == "'$1'"')" ]; then
+ tracking="active"
+ else
+ tracking="down"
+ fi
+ else
+ tracking="not enabled"
+ fi
+
+ echo " interface $1 is $result and tracking is $tracking"
+}
+
+mwan3_report_policies_v4()
+{
+ local percent policy share total_weight weight iface
+
+ for policy in $($IPT4 -S | awk '{print $2}' | grep mwan3_policy_ | sort -u); do
+ echo "$policy:" | sed 's/mwan3_policy_//'
+
+ [ -n "$total_weight" ] || total_weight=$($IPT4 -S $policy | cut -s -d'"' -f2 | head -1 | awk '{print $3}')
+
+ if [ ! -z "${total_weight##*[!0-9]*}" ]; then
+ for iface in $($IPT4 -S $policy | cut -s -d'"' -f2 | awk '{print $1}'); do
+ weight=$($IPT4 -S $policy | cut -s -d'"' -f2 | awk '$1 == "'$iface'"' | awk '{print $2}')
+ percent=$(($weight*100/$total_weight))
+ echo " $iface ($percent%)"
+ done
+ else
+ echo " $($IPT4 -S $policy | sed '/.*--comment \([^ ]*\) .*$/!d;s//\1/;q')"
+ fi
+
+ unset total_weight
+
+ echo -e
+ done
+}
+
+mwan3_report_policies_v6()
+{
+ local percent policy share total_weight weight iface
+
+ for policy in $($IPT6 -S | awk '{print $2}' | grep mwan3_policy_ | sort -u); do
+ echo "$policy:" | sed 's/mwan3_policy_//'
+
+ [ -n "$total_weight" ] || total_weight=$($IPT6 -S $policy | cut -s -d'"' -f2 | head -1 | awk '{print $3}')
+
+ if [ ! -z "${total_weight##*[!0-9]*}" ]; then
+ for iface in $($IPT6 -S $policy | cut -s -d'"' -f2 | awk '{print $1}'); do
+ weight=$($IPT6 -S $policy | cut -s -d'"' -f2 | awk '$1 == "'$iface'"' | awk '{print $2}')
+ percent=$(($weight*100/$total_weight))
+ echo " $iface ($percent%)"
+ done
+ else
+ echo " $($IPT6 -S $policy | sed '/.*--comment \([^ ]*\) .*$/!d;s//\1/;q')"
+ fi
+
+ unset total_weight
+
+ echo -e
+ done
+}
+
+mwan3_report_connected_v4()
+{
+ local address
+
+ if [ -n "$($IPT4 -S mwan3_connected 2> /dev/null)" ]; then
+ for address in $($IPS list mwan3_connected_v4 | egrep '[0-9]{1,3}(\.[0-9]{1,3}){3}'); do
+ echo " $address"
+ done
+ fi
+}
+
+mwan3_report_connected_v6()
+{
+ local address
+
+ if [ -n "$($IPT6 -S mwan3_connected 2> /dev/null)" ]; then
+ for address in $($IPS list mwan3_connected_v6 | egrep '([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])'); do
+ echo " $address"
+ done
+ fi
+}
+
+mwan3_report_rules_v4()
+{
+ if [ -n "$($IPT4 -S mwan3_rules 2> /dev/null)" ]; then
+ $IPT4 -L mwan3_rules -n -v 2> /dev/null | tail -n+3 | sed 's/mark.*//' | sed 's/mwan3_policy_/- /' | sed 's/mwan3_rule_/S /'
+ fi
+}
+
+mwan3_report_rules_v6()
+{
+ if [ -n "$($IPT6 -S mwan3_rules 2> /dev/null)" ]; then
+ $IPT6 -L mwan3_rules -n -v 2> /dev/null | tail -n+3 | sed 's/mark.*//' | sed 's/mwan3_policy_/- /' | sed 's/mwan3_rule_/S /'
+ fi
+}
#!/bin/sh
-if [ -x /usr/sbin/ip ]; then
- IP="/usr/sbin/ip -4"
-elif [ -x /usr/bin/ip ]; then
- IP="/usr/bin/ip -4"
-else
- exit 1
-fi
-
-if [ -x /usr/sbin/ipset ]; then
- IPS="/usr/sbin/ipset"
-else
- exit 1
-fi
-
-if [ -x /usr/sbin/iptables ]; then
- IPT="/usr/sbin/iptables -t mangle -w"
-else
- exit 1
-fi
+[ -x /usr/bin/ip ] || exit 4
+[ -x /usr/sbin/ipset ] || exit 5
+[ -x /usr/sbin/iptables ] || exit 6
+[ -x /usr/sbin/ip6tables ] || exit 7
+[ -x /usr/bin/logger ] || exit 8
. /lib/functions.sh
+. /lib/functions/network.sh
+. /lib/mwan3/mwan3.sh
help()
{
ifup <iface> Load rules and routes for specific interface
ifdown <iface> Unload rules and routes for specific interface
interfaces Show interfaces status
- policies Show policies status
- rules Show rules status
+ policies Show currently active policy
+ connected Show directly connected networks
+ rules Show active rules
status Show all status
EOF
echo "Error: Too many arguments. Usage: mwan3 ifdown <interface>" && exit 0
fi
+ ACTION=ifdown INTERFACE=$1 /sbin/hotplug-call iface
+
if [ -e /var/run/mwan3track-$1.pid ] ; then
kill $(cat /var/run/mwan3track-$1.pid)
rm /var/run/mwan3track-$1.pid
fi
-
- ACTION=ifdown INTERFACE=$1 /sbin/hotplug-call iface
}
ifup()
interfaces()
{
- local device enabled iface_id tracking
-
config_load mwan3
echo "Interface status:"
-
- check_iface_status()
- {
- let iface_id++
- device=$(uci -p /var/state get network.$1.ifname) &> /dev/null
-
- if [ -z "$device" ]; then
- echo " interface $1 is unknown"
- return 0
- fi
-
- config_get enabled "$1" enabled 0
-
- if [ -n "$(ps -w | grep mwan3track | grep -v grep | sed '/.*\/usr\/sbin\/mwan3track \([^ ]*\) .*$/!d;s//\1/' | awk '$1 == "'$1'"')" ]; then
- tracking="active"
- else
- tracking="down"
- fi
-
- if [ -n "$($IP rule | awk '$5 == "'$device'"')" -a -n "$($IPT -S mwan3_iface_$1 2> /dev/null)" -a -n "$($IP route list table $iface_id default dev $device 2> /dev/null)" ]; then
- if [ -n "$(uci -p /var/state get mwan3.$1.track_ip 2> /dev/null)" ]; then
- echo " interface $1 is online (tracking $tracking)"
- else
- echo " interface $1 is online"
- fi
- elif [ -n "$($IP rule | awk '$5 == "'$device'"')" -o -n "$($IPT -S mwan3_iface_$1 2> /dev/null)" -o -n "$($IP route list table $iface_id default dev $device 2> /dev/null)" ]; then
- echo " interface $1 error"
- else
- if [ "$enabled" -eq 1 ]; then
- if [ -n "$(uci -p /var/state get mwan3.$1.track_ip 2> /dev/null)" ]; then
- echo " interface $1 is offline (tracking $tracking)"
- else
- echo " interface $1 is offline"
- fi
- else
- echo " interface $1 is disabled"
- fi
- fi
- }
- config_foreach check_iface_status interface
+ config_foreach mwan3_report_iface_status interface
echo -e
}
policies()
{
- local percent policy share total_weight weight iface
-
- for policy in $($IPT -S | awk '{print $2}' | grep mwan3_policy_ | sort -u); do
- echo "Policy $policy:" | sed 's/mwan3_policy_//'
-
- [ -n "$total_weight" ] || total_weight=$($IPT -S $policy | cut -s -d'"' -f2 | head -1 | awk '{print $3}')
-
- if [ ! -z "${total_weight##*[!0-9]*}" ]; then
- for iface in $($IPT -S $policy | cut -s -d'"' -f2 | awk '{print $1}'); do
- weight=$($IPT -S $policy | cut -s -d'"' -f2 | awk '$1 == "'$iface'"' | awk '{print $2}')
- percent=$(($weight*100/$total_weight))
- echo " $iface ($percent%)"
- done
- else
- echo " $($IPT -S $policy | sed '/.*--comment \([^ ]*\) .*$/!d;s//\1/;q')"
- fi
-
- echo -e
+ echo "Current ipv4 policies:"
+ mwan3_report_policies_v4
+ echo -e
+ echo "Current ipv6 policies:"
+ mwan3_report_policies_v6
+ echo -e
+}
- unset iface
- unset total_weight
- done
+connected()
+{
+ echo "Directly connected ipv4 networks:"
+ mwan3_report_connected_v4
+ echo -e
+ echo "Directly connected ipv6 networks:"
+ mwan3_report_connected_v6
+ echo -e
}
+
rules()
{
- local address
-
- if [ -n "$($IPT -S mwan3_connected 2> /dev/null)" ]; then
- echo "Known networks:"
- for address in $($IPS list mwan3_connected | egrep '[0-9]{1,3}(\.[0-9]{1,3}){3}'); do
- echo " $address"
- done
- echo -e
- fi
-
- if [ -n "$($IPT -S mwan3_rules 2> /dev/null)" ]; then
- echo "Active rules:"
- $IPT -L mwan3_rules -n -v 2> /dev/null | tail -n+3 | sed 's/mark.*//' | sed 's/mwan3_policy_/- /' | sed 's/mwan3_rule_/S /'
- echo -e
- fi
+ echo "Active ipv4 user rules:"
+ mwan3_report_rules_v4
+ echo -e
+ echo "Active ipv6 user rules:"
+ mwan3_report_rules_v6
+ echo -e
}
status()
{
interfaces
policies
+ connected
rules
}
stop()
{
- local ipset route rule table
+ local ipset route rule table IP IPT
killall mwan3track &> /dev/null
rm /var/run/mwan3track-* &> /dev/null
- for route in $($IP route list table all | sed 's/.*table \([^ ]*\) .*/\1/' | awk '{print $1}' | awk '{for(i=1;i<=NF;i++) if($i+0>0) if($i+0<255) {print;break}}'); do
- $IP route flush table $route &> /dev/null
- done
+ for IP in "$IP4" "$IP6"; do
+
+ for route in $($IP route list table all | sed 's/.*table \([^ ]*\) .*/\1/' | awk '{print $1}' | awk '{for(i=1;i<=NF;i++) if($i+0>0) if($i+0<255) {print;break}}'); do
+ $IP route flush table $route &> /dev/null
+ done
- for rule in $($IP rule list | egrep '^[1-2][0-9]{3}\:' | cut -d ':' -f 1); do
- $IP rule del pref $rule &> /dev/null
+ for rule in $($IP rule list | egrep '^[1-2][0-9]{3}\:' | cut -d ':' -f 1); do
+ $IP rule del pref $rule &> /dev/null
+ done
done
- $IPT -D PREROUTING -j mwan3_hook &> /dev/null
- $IPT -D OUTPUT -j mwan3_hook &> /dev/null
+ for IPT in "$IPT4" "$IPT6"; do
- for table in $($IPT -S | awk '{print $2}' | grep mwan3 | sort -u); do
- $IPT -F $table &> /dev/null
+ $IPT -D PREROUTING -j mwan3_hook &> /dev/null
+ $IPT -D OUTPUT -j mwan3_hook &> /dev/null
+
+ for table in $($IPT -S | awk '{print $2}' | grep mwan3 | sort -u); do
+ $IPT -F $table &> /dev/null
+ done
+
+ for table in $($IPT -S | awk '{print $2}' | grep mwan3 | sort -u); do
+ $IPT -X $table &> /dev/null
+ done
done
- for table in $($IPT -S | awk '{print $2}' | grep mwan3 | sort -u); do
- $IPT -X $table &> /dev/null
+ for ipset in $($IPS -n list | grep mwan3_); do
+ $IPS -q destroy $ipset
done
- for ipset in $(ipset -n list | grep mwan3); do
- $IPS destroy $ipset
+ for ipset in $($IPS -n list | grep mwan3 | grep -E '_v4|_v6'); do
+ $IPS -q destroy $ipset
done
}
}
case "$1" in
- ifup|ifdown|interfaces|policies|rules|status|start|stop|restart)
+ ifup|ifdown|interfaces|policies|connected|rules|status|start|stop|restart)
$*
;;
*)
while true; do
for track_ip in $track_ips; do
- ping -I $2 -c $4 -W $5 -s 4 -q $track_ip &> /dev/null
+ ping -I $2 -c $4 -W $5 -q $track_ip &> /dev/null
if [ $? -eq 0 ]; then
let host_up_count++
else
echo "access $group $context $version $level $prefix $read $write $notify" >> $CONFIGFILE
}
+snmpd_trap_hostname_add() {
+ local cfg="$1"
+ config_get hostname "$cfg" HostName
+ config_get port "$cfg" Port
+ config_get community "$cfg" Community
+ config_get type "$cfg" Type
+ echo "$type $hostname $community $port" >> $CONFIGFILE
+}
+
+snmpd_trap_ip_add() {
+ local cfg="$1"
+ config_get host_ip "$cfg" HostIP
+ config_get port "$cfg" Port
+ config_get community "$cfg" Community
+ config_get type "$cfg" Type
+ echo "$type $host_ip $community $port" >> $CONFIGFILE
+}
+
+snmpd_access_default_add() {
+ local cfg="$1"
+ config_get mode "$cfg" Mode
+ config_get community "$cfg" CommunityName
+ config_get oidrestrict "$cfg" RestrictOID
+ config_get oid "$cfg" RestrictedOID
+ echo -n "$mode $community default" >> $CONFIGFILE
+ [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
+ [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
+}
+
+snmpd_access_HostName_add() {
+ local cfg="$1"
+ config_get hostname "$cfg" HostName
+ config_get mode "$cfg" Mode
+ config_get community "$cfg" CommunityName
+ config_get oidrestrict "$cfg" RestrictOID
+ config_get oid "$cfg" RestrictedOID
+ echo -n "$mode $community $hostname" >> $CONFIGFILE
+ [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
+ [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
+}
+
+snmpd_access_HostIP_add() {
+ local cfg="$1"
+ config_get host_ip "$cfg" HostIP
+ config_get ip_mask "$cfg" IPMask
+ config_get mode "$cfg" Mode
+ config_get community "$cfg" CommunityName
+ config_get oidrestrict "$cfg" RestrictOID
+ config_get oid "$cfg" RestrictedOID
+ echo -n "$mode $community $host_ip/$ip_mask" >> $CONFIGFILE
+ [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
+ [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
+}
+
snmpd_pass_add() {
local cfg="$1"
local pass='pass'
config_foreach snmpd_group_add group
config_foreach snmpd_view_add view
config_foreach snmpd_access_add access
+ config_foreach snmpd_trap_hostname_add trap_HostName
+ config_foreach snmpd_trap_ip_add trap_HostIP
+ config_foreach snmpd_access_default_add access_default
+ config_foreach snmpd_access_HostName_add access_HostName
+ config_foreach snmpd_access_HostIP_add access_HostIP
config_foreach snmpd_pass_add pass
config_foreach snmpd_exec_add exec
config_foreach snmpd_disk_add disk
stop_service() {
[ -f "$CONFIGFILE" ] && rm -f "$CONFIGFILE"
}
+
+service_triggers(){
+ procd_add_reload_trigger 'snmpd'
+}
-# Copyright (C) 2009-2015 OpenWrt.org
+# Copyright (C) 2009-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=nfs-kernel-server
PKG_VERSION:=1.3.3
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_MD5SUM:=9b87d890669eaaec8e97a2b0a35b2665
PKG_SOURCE_URL:=@SF/nfs
$(call Package/nfs-kernel-server/Default)
SECTION:=utils
CATEGORY:=Utilities
- DEPENDS+= +libevent +USE_UCLIBC:librpc
+ DEPENDS+= +libevent2 +USE_UCLIBC:librpc
TITLE:=updated mount utility (includes nfs4)
endef
OPT="$(TARGET_CFLAGS)" \
INSTALLSUID="install -m 4755" \
DESTDIR="$(PKG_INSTALL_DIR)" \
- RPCGEN_PATH=$(STAGING_DIR_HOST)/bin/rpcgen \
- RPCGEN=$(STAGING_DIR_HOST)/bin/rpcgen
+ RPCGEN_PATH=$(STAGING_DIR)/host/bin/rpcgen \
+ RPCGEN=$(STAGING_DIR)/host/bin/rpcgen
HOST_CFLAGS += -Dlinux
endef
define Host/Install
- $(INSTALL_BIN) $(HOST_BUILD_DIR)/tools/rpcgen/rpcgen $(STAGING_DIR_HOST)/bin/rpcgen
+ $(INSTALL_DIR) $(STAGING_DIR)/host/bin
+ $(INSTALL_BIN) $(HOST_BUILD_DIR)/tools/rpcgen/rpcgen $(STAGING_DIR)/host/bin/rpcgen
endef
define Package/nfs-kernel-server/install
prompt "Enable PCRE library usage"
default y
+config NGINX_NAXSI
+ bool
+ prompt "Enable NAXSI module"
+ default y
+
endmenu
include $(TOPDIR)/rules.mk
PKG_NAME:=nginx
-PKG_VERSION:=1.9.6
-PKG_RELEASE:=1
+PKG_VERSION:=1.9.9
+PKG_RELEASE:=2
PKG_SOURCE:=nginx-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://nginx.org/download/
-PKG_MD5SUM:=f6899825e7a8deadba4948ff84515ad6
+PKG_MD5SUM:=50fdfa08e93ead7a111cba5a5f5735af
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
PKG_LICENSE:=2-clause BSD-like license
/etc/nginx/
endef
+ADDITIONAL_MODULES:=
+ifeq ($(CONFIG_NGINX_NAXSI),y)
+ ADDITIONAL_MODULES += --add-module=$(PKG_BUILD_DIR)/nginx-naxsi/naxsi_src
+endif
+
ADDITIONAL_MODULES:=
ifeq ($(CONFIG_IPV6),y)
ADDITIONAL_MODULES += --with-ipv6
$(INSTALL_DATA) $(addprefix $(PKG_INSTALL_DIR)/etc/nginx/,$(config_files)) $(1)/etc/nginx/
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/nginx.init $(1)/etc/init.d/nginx
+ifeq ($(CONFIG_NGINX_NAXSI),y)
+ $(INSTALL_DIR) $(1)/etc/nginx
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/nginx-naxsi/naxsi_config/naxsi_core.rules $(1)/etc/nginx
+ chmod 0640 $(1)/etc/nginx/naxsi_core.rules
+endif
+ $(if $(CONFIG_NGINX_NAXSI),$($(INSTALL_BIN) $(PKG_BUILD_DIR)/nginx-naxsi/naxsi_config/naxsi_core.rules $(1)/etc/nginx))
+ $(if $(CONFIG_NGINX_NAXSI),$(chmod 0640 $(1)/etc/nginx/naxsi_core.rules))
+endef
+
+define Build/Prepare
+ $(call Build/Prepare/Default)
+ $(if $(CONFIG_NGINX_NAXSI),$(call Prepare/nginx-naxsi))
+endef
+
+define Download/nginx-naxsi
+ VERSION:=6358c3d2e68a0c9e3ad11661c2a1f63fadc9b4f2
+ SUBDIR:=nginx-naxsi
+ FILE:=nginx-naxsi-module-$(PKG_VERSION)-$$(VERSION).tar.gz
+ URL:=https://github.com/nbs-system/naxsi.git
+ PROTO:=git
+endef
+
+define Prepare/nginx-naxsi
+ $(eval $(call Download,nginx-naxsi))
+ gzip -dc $(DL_DIR)/$(FILE) | tar -C $(PKG_BUILD_DIR) $(TAR_OPTIONS)
endef
$(eval $(call BuildPackage,nginx))
include $(TOPDIR)/rules.mk
PKG_NAME:=ngircd
-PKG_VERSION:=22.1
+PKG_VERSION:=23
PKG_RELEASE:=1
PKG_MAINTAINER:=Claudio Leite <leitec@staticky.com>
PKG_LICENSE:=GPL-2.0
PKG_SOURCE_URL:= \
http://ngircd.barton.de/pub/ngircd/ \
ftp://ftp.berlios.de/pub/ngircd/
-PKG_MD5SUM:=586c4fef1fbb77dcbe723e9136ec08eb
+PKG_MD5SUM:=a58e0075fea60176fa7df092ca7e2c6a
PKG_INSTALL:=1
#
-# Copyright (C) 2006-2014 OpenWrt.org
+# Copyright (C) 2006-2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=nmap
-PKG_VERSION:=6.47
-PKG_RELEASE:=2
+PKG_VERSION:=7.01
+PKG_RELEASE:=1
PKG_MAINTAINER=Nuno Goncalves <nunojpg@gmail.com>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://nmap.org/dist/
-PKG_MD5SUM:=edfe81f6763223c0a29bfa15a8526e2a
+PKG_MD5SUM:=7fa4edc592184c7addc14f5acb3fe6f7
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
#
-# Copyright (C) 2006-2015 OpenWrt.org
+# Copyright (C) 2006-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=ntp
-PKG_VERSION:=4.2.8p2
-PKG_RELEASE:=3
+PKG_VERSION:=4.2.8p6
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/
-PKG_MD5SUM:=fa37049383316322d060ec9061ac23a9
+PKG_MD5SUM:=60049f51e9c8305afe30eb22b711c5c6
PKG_LICENSE:=Unique
PKG_LICENSE_FILES:=COPYRIGHT html/copyright.html
TITLE:=ISC ntp
MAINTAINER:=Peter Wagner <tripolar@gmx.at>
URL:=http://www.ntp.org/
- DEPENDS:=+libopenssl +libpthread
+ DEPENDS:=+libopenssl +libpthread +libcap
endef
define Package/ntpd/Default/description
define Package/ntpd
$(call Package/ntpd/Default)
TITLE+= server
- DEPENDS+= +libcap
USERID:=ntp=123:ntp=123
endef
define Package/ntp-keygen
$(call Package/ntpd/Default)
TITLE+=keygen
+ DEPENDS+= +libevent2-core
endef
define Package/ntp-keygen/description
include $(TOPDIR)/rules.mk
PKG_NAME:=ocserv
-PKG_VERSION:=0.10.9
-PKG_RELEASE:=2
+PKG_VERSION:=0.10.12
+PKG_RELEASE:=1
PKG_USE_MIPS16:=0
PKG_BUILD_DIR :=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=ftp://ftp.infradead.org/pub/ocserv/
-PKG_MD5SUM:=74834c59aa96beaa222c21ee6521adb2
+PKG_MD5SUM:=a0080697a6e7b07d3868d224a81b60f3
PKG_LICENSE:=GPLv2
PKG_LICENSE_FILES:=COPYING
EXTRA_LDFLAGS+=-lncurses
CONFIGURE_ARGS+= \
+ --with-pager="" \
--enable-local-libopts \
--with-libreadline-prefix="$(STAGING_DIR)/" \
--without-libnl \
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ocserv $(1)/usr/sbin/
$(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ocserv-fw $(1)/usr/bin/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ocpasswd $(1)/usr/bin/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/occtl $(1)/usr/bin/
$(INSTALL_DIR) $(1)/etc/init.d
It is recommended to setup a dynamic DNS address with openwrt prior
to starting the server. That is because during the first startup
-a certificate file which contain the setup dynamic DNS name will be
+a certificate file which will contain the dynamic DNS name will be
created. You can always regenerate the certificate by deleting
/etc/ocserv/server-key.pem.
connecting to the LAN, and the latter when you may need to connect
multiple networks with the LAN.
+If for the client side you use OpenWRT it is recommended to check you
+have the latest vpnc-scripts and openconnect packages.
+
1. Proxy-ARP Approach
=====================
-----------------------------------------------------------------
```
+Setting up split-dns
+====================
+
+To allow the clients to resolv with the local domain add the following
+to the ocserv configuration file.
+
+```
+----/etc/config/ocserv-------------------------------------------
+config ocserv 'config'
+ option split_dns '1'
+ option default_domain 'mydomain'
+```
+
+The ```default_domain``` is optional and if not set, it will be autodetected
+from dnsmasq's configuration.
+
Setting up the firewall
=======================
# The domains over which the provided DNS should be used. Use
# multiple lines for multiple domains.
-#split-dns = example.com
+|ENABLE_SPLIT_DNS|split-dns = |DEFAULT_DOMAIN|
# Prior to leasing any IP from the pool ping it to verify that
# it is not in use by another (unrelated to this server) host.
# The following example is from linux systems. %{R} should be something
# like 192.168.2.0/24
-route-add-cmd = "/sbin/route add -net %{R} dev %{D}"
-route-del-cmd = "/sbin/route del -net %{R} dev %{D}"
+#route-add-cmd = "/usr/sbin/ip route add %{R} dev %{D}"
+#route-del-cmd = "/usr/sbin/ip route delete %{R} dev %{D}"
+
+route-add-cmd = "/sbin/route add -net %{RI} dev %{D}"
+route-del-cmd = "/sbin/route del -net %{RI} dev %{D}"
# This option allows to forward a proxy. The special strings '%{U}'
# and '%{G}', if present will be replaced by the username and group name.
# Option to allow sending arbitrary custom headers to the client after
# authentication and prior to VPN tunnel establishment.
#custom-header = "X-My-Header: hi there"
+
+expose-iroutes = true
config_get ip6addr $1 ip6addr ""
config_get proxy_arp $1 proxy_arp "0"
config_get ping_leases $1 ping_leases "0"
+ config_get split_dns $1 split_dns "0"
config_get default_domain $1 default_domain ""
# Enable proxy arp, and make sure that ping leases is set to true in that case,
enable_default_domain="#"
enable_udp="#"
enable_compression="#"
+ enable_split_dns="#"
test $predictable_ips = "0" && predictable_ips="false"
test $predictable_ips = "1" && predictable_ips="true"
test $cisco_compat = "0" && cisco_compat="false"
test $ping_leases = "0" && ping_leases="false"
test $ping_leases = "1" && ping_leases="true"
test $udp = "1" && enable_udp=""
+ test $split_dns = "1" && enable_split_dns=""
test $compression = "1" && enable_compression=""
- test -z $default_domain && enable_default_domain=""
+
+ test -z $default_domain && default_domain=$(uci get dhcp.@dnsmasq[0].domain)
+ test -n $default_domain && enable_default_domain=""
test -z $ip6addr && enable_ipv6="#"
test $auth = "plain" && authsuffix="\[passwd=/var/etc/ocpasswd\]"
-e "s/|PREDICTABLE_IPS|/$predictable_ips/g" \
-e "s/|DEFAULT_DOMAIN|/$default_domain/g" \
-e "s/|ENABLE_DEFAULT_DOMAIN|/$enable_default_domain/g" \
+ -e "s/|ENABLE_SPLIT_DNS|/$enable_split_dns/g" \
-e "s/|CISCO_COMPAT|/$cisco_compat/g" \
-e "s/|PING_LEASES|/$ping_leases/g" \
-e "s/|UDP|/$enable_udp/g" \
--- /dev/null
+diff --git a/Makefile.am b/Makefile.am
+index 22647be..7dcf0de 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -32,7 +32,7 @@ AM_DISTCHECK_CONFIGURE_FLAGS = --enable-python-libs
+ COMMON_CXXFLAGS_ONLY_WARNINGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+- -Wall -Wformat -W -fvisibility-inlines-hidden \
++ -Wall -Wformat -W \
+ $(libprotobuf_CFLAGS)
+
+ COMMON_CXXFLAGS = $(COMMON_CXXFLAGS_ONLY_WARNINGS)
include $(TOPDIR)/rules.mk
PKG_NAME:=openssh
-PKG_VERSION:=7.1p1
+PKG_VERSION:=7.1p2
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/ \
http://ftp.belnet.be/pub/OpenBSD/OpenSSH/portable/
-PKG_MD5SUM:=8709736bc8a8c253bc4eeb4829888ca5
+PKG_MD5SUM:=4d8547670e2a220d5ef805ad9e47acf2
PKG_LICENSE:=BSD ISC
PKG_LICENSE_FILES:=LICENCE
PROG=/usr/sbin/sshd
start_service() {
- for type in rsa dsa; do {
+ for type in rsa ecdsa ed25519; do {
# check for keys
key=/etc/ssh/ssh_host_${type}_key
[ ! -f $key ] && {
# $Id: Makefile $
include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=openvswitch
-PKG_RELEASE:=2
-PKG_VERSION:=2.4.0
+PKG_RELEASE:=4
+PKG_VERSION:=2.5.0
PKG_RELEASE=$(PKG_SOURCE_VERSION)
PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/openvswitch/ovs
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=b979c282ef040a20d09b8d6885648b09352f05db
+PKG_SOURCE_VERSION:=98b94d1e7002063ce2ea3c3221fe9234cac4e124
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_BUILD_PARALLEL:=1
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
-SUPPORTED_KERNELS:=LINUX_3_8||LINUX_3_10||LINUX_3_13||LINUX_3_14||LINUX_3_18||LINUX_4_0||LINUX_4_1
+# Upstream package supports kernels between 2.6.32 and 4.3
+# see https://github.com/openvswitch/ovs/blob/master/FAQ.md
+# This list is pruned to only those kernels used in OpenWRT
+SUPPORTED_KERNELS:=LINUX_3_18||LINUX_4_1||LINUX_4_3
include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/kernel.mk
$(call include_mk, python-package.mk)
define Package/openvswitch/Default
SECTION:=net
+ SUBMENU:=Open vSwitch
CATEGORY:=Network
URL:=http://openvswitch.org/
MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
1000V.
endef
-define Package/openvswitch
+define Package/openvswitch-base
$(call Package/openvswitch/Default)
- TITLE:=Open vSwitch Userspace Package
+ TITLE:=Open vSwitch Userspace Package (base)
DEPENDS:=+libpcap +libopenssl +librt +kmod-openvswitch @($(SUPPORTED_KERNELS))
endef
-define Package/openvswitch/description
+define Package/openvswitch-base/description
Provides the main userspace components required for Open vSwitch to function.
+ The main OVS tools (ovs-vsctl, ovs-ofctl, etc) are packaged separately
+ to conserve some room and allow more configurability.
endef
define Package/openvswitch-python
$(call Package/openvswitch/Default)
TITLE:=Open vSwitch Python Support
- DEPENDS:=@PACKAGE_openvswitch +PACKAGE_openvswitch:openvswitch +python
+ DEPENDS:=+openvswitch +python
endef
define Package/openvswitch-python/description
define Package/openvswitch-ipsec
$(call Package/openvswitch/Default)
- TITLE:=Open vSwitch Userspace Package
- DEPENDS:=@PACKAGE_openvswitch +PACKAGE_openvswitch:openvswitch-python
+ TITLE:=Open vSwitch GRE through IPsec tool
+ DEPENDS:=+openvswitch-python
endef
define Package/openvswitch-ipsec/description
define Package/openvswitch-benchmark
$(call Package/openvswitch/Default)
- TITLE:=Open vSwitch Userspace Package
- DEPENDS:=@PACKAGE_openvswitch +PACKAGE_openvswitch:openvswitch
+ TITLE:=Open vSwitch flow setup benchmark utility
+ DEPENDS:=+openvswitch
endef
define Package/openvswitch-benchmark/description
Utility for running OpenVSwitch benchmarking
endef
+OVS_BIN_TOOLS:=ovs-appctl ovs-ofctl ovs-dpctl ovs-vsctl ovsdb-client
+define Package/openvswitch
+ $(call Package/openvswitch/Default)
+ TITLE:=Open vSwitch Userspace Package
+ DEPENDS:=+openvswitch-base $(foreach t,$(OVS_BIN_TOOLS),+openvswitch-$(t))
+endef
+
+define Package/openvswitch/description
+ Provides the main userspace components required for Open vSwitch to function.
+ Includes also the main OVS utilities (ovs-appctl, ovs-vsctl, etc).
+endef
+
define KernelPackage/openvswitch
SECTION:=kernel
CATEGORY:=Kernel modules
SUBMENU:=Network Support
TITLE:=Open vSwitch Kernel Package
KCONFIG:=CONFIG_BRIDGE
- DEPENDS:=+kmod-stp @IPV6 +kmod-gre +kmod-lib-crc32c +kmod-vxlan @($(SUPPORTED_KERNELS))
+ DEPENDS:=+kmod-stp @IPV6 +kmod-gre +kmod-lib-crc32c +kmod-vxlan +kmod-nf-conntrack +kmod-nf-conntrack6 @($(SUPPORTED_KERNELS))
FILES:= \
$(PKG_BUILD_DIR)/datapath/linux/openvswitch.$(LINUX_KMOD_SUFFIX)
AUTOLOAD:=$(call AutoLoad,21,openvswitch)
CONFIGURE_VARS += KARCH=$(LINUX_KARCH)
MAKE_FLAGS += ARCH="$(LINUX_KARCH)"
-define Package/openvswitch/install
+define OvsBinUtility
+ define Package/openvswitch-$(1)
+ $(call Package/openvswitch/Default)
+ TITLE:=$(2)
+ DEPENDS:=+openvswitch-base
+ endef
+
+ define Package/openvswitch-$(1)/description
+ $(2)
+ endef
+
+ define Package/openvswitch-$(1)/install
+ $(INSTALL_DIR) $$(1)/usr/bin/ ;\
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/$(1) $$(1)/usr/bin/
+ endef
+endef
+
+define Package/openvswitch-base/install
$(INSTALL_DIR) $(1)/etc/openvswitch
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/etc/init.d/openvswitch.init $(1)/etc/init.d/openvswitch
$(INSTALL_DIR) $(1)/usr/lib/
- $(CP) $(PKG_BUILD_DIR)/lib/.libs/libsflow.so* $(1)/usr/lib/
- $(CP) $(PKG_BUILD_DIR)/lib/.libs/libopenvswitch.so* $(1)/usr/lib/
- $(CP) $(PKG_BUILD_DIR)/ofproto/.libs/libofproto.so* $(1)/usr/lib/
- $(CP) $(PKG_BUILD_DIR)/ovsdb/.libs/libovsdb.so* $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libofproto.so* $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libopenvswitch.so* $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libovsdb.so* $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libsflow.so* $(1)/usr/lib/
$(INSTALL_DIR) $(1)/usr/bin/
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/utilities/.libs/ovs-appctl $(1)/usr/bin/
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/utilities/.libs/ovs-ofctl $(1)/usr/bin/
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/ovsdb/.libs/ovsdb-client $(1)/usr/bin/
-
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/utilities/.libs/ovs-dpctl $(1)/usr/bin/
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/utilities/.libs/ovs-vsctl $(1)/usr/bin/
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/ovsdb/.libs/ovsdb-tool $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ovsdb-tool $(1)/usr/bin/
$(INSTALL_DIR) $(1)/usr/sbin/
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/vswitchd/.libs/ovs-vswitchd $(1)/usr/sbin/
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/ovsdb/.libs/ovsdb-server $(1)/usr/sbin/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ovs-vswitchd $(1)/usr/sbin/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ovsdb-server $(1)/usr/sbin/
$(INSTALL_DIR) $(1)/usr/share/openvswitch/
- $(INSTALL_CONF) $(PKG_BUILD_DIR)/vswitchd/vswitch.ovsschema $(1)/usr/share/openvswitch/
+ $(INSTALL_CONF) $(PKG_INSTALL_DIR)/usr/share/openvswitch/vswitch.ovsschema $(1)/usr/share/openvswitch/
endef
define Package/openvswitch-python/install
- $(INSTALL_DIR) $(1)/usr/lib/python$(PYTHON_VERSION)/
- $(CP) $(PKG_BUILD_DIR)/python/ovs/ $(1)/usr/lib/python$(PYTHON_VERSION)/
+ $(INSTALL_DIR) $(1)/usr/lib/python$(PYTHON_VERSION)/ovs
+ $(CP) $(PKG_INSTALL_DIR)/usr/share/openvswitch/python/ovs/* $(1)/usr/lib/python$(PYTHON_VERSION)/ovs
endef
define Package/openvswitch-ipsec/install
define Package/openvswitch-benchmark/install
$(INSTALL_DIR) $(1)/usr/bin/
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/utilities/.libs/ovs-benchmark $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ovs-benchmark $(1)/usr/bin/
endef
-define Package/openvswitch/postinst
-#!/bin/sh
-[ -n "$${IPKG_INSTROOT}" ] || /etc/init.d/openvswitch enable || true
+define Package/openvswitch/install
+ :
endef
-$(eval $(call BuildPackage,openvswitch))
+$(eval $(call OvsBinUtility,ovs-appctl,Open vSwitch app control utility))
+$(eval $(call OvsBinUtility,ovs-ofctl,Open vSwitch OpenFlow control utility))
+$(eval $(call OvsBinUtility,ovs-dpctl,Open vSwitch datapath management utility))
+$(eval $(call OvsBinUtility,ovs-vsctl,Open vSwitch ovs-vswitchd management utility))
+$(eval $(call OvsBinUtility,ovsdb-client,Open vSwitch database JSON-RPC client))
+
+$(foreach t,$(OVS_BIN_TOOLS),$(eval $(call BuildPackage,openvswitch-$(t))))
+
+$(eval $(call BuildPackage,openvswitch-base))
$(eval $(call BuildPackage,openvswitch-python))
$(eval $(call BuildPackage,openvswitch-ipsec))
$(eval $(call BuildPackage,openvswitch-benchmark))
+$(eval $(call BuildPackage,openvswitch))
$(eval $(call KernelPackage,openvswitch))
+++ /dev/null
-From 5919cb26c631b1dd77a745a3c546f9d117ed34b3 Mon Sep 17 00:00:00 2001
-From: Hauke Mehrtens <hauke@hauke-m.de>
-Date: Sat, 23 May 2015 18:12:09 +0200
-Subject: [PATCH] datapath: do not add vlan_hwaccel_push_inside() for kernel >=
- 3.18.13
-
-The vlan_hwaccel_push_inside() function was backported in this commit
-to kernel 3.18.13:
-
-commit a67e2e88342accd49587d9bad72f6dabd7673f7c
-Author: Jiri Pirko <jiri@resnulli.us>
-Date: Wed Nov 19 14:04:59 2014 +0100
-
- vlan: introduce *vlan_hwaccel_push_inside helpers
-
- [ Upstream commit 5968250c868ceee680aa77395b24e6ddcae17d36 ]
-
-Without this patch compilation breaks on kernel >= 3.18.13
-
-Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
----
- datapath/linux/compat/include/linux/if_vlan.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/datapath/linux/compat/include/linux/if_vlan.h
-+++ b/datapath/linux/compat/include/linux/if_vlan.h
-@@ -52,7 +52,7 @@ static inline struct sk_buff *rpl_vlan_i
- }
- #endif
-
--#if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,18,13)
- /*
- * __vlan_hwaccel_push_inside - pushes vlan tag to the payload
- * @skb: skbuff to tag
diff --git a/configure.ac b/configure.ac
-index 8d47eb9..69eeed8 100644
+index e6a23a6..8a7c6d6 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -117,7 +117,6 @@ OVS_CHECK_XENSERVER_VERSION
+@@ -118,7 +118,6 @@ OVS_CHECK_XENSERVER_VERSION
OVS_CHECK_GROFF
OVS_CHECK_GNU_MAKE
OVS_CHECK_TLS
OVS_CHECK_ATOMIC_ALWAYS_LOCK_FREE(1)
OVS_CHECK_ATOMIC_ALWAYS_LOCK_FREE(2)
diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
-index 9b2e74f..70126bb 100644
+index 712cb5a..e840f10 100644
--- a/lib/netdev-linux.c
+++ b/lib/netdev-linux.c
@@ -40,7 +40,9 @@
#include <netinet/in.h>
#include <poll.h>
diff --git a/lib/ovs-atomic.h b/lib/ovs-atomic.h
-index 9ead907..86d3341 100644
+index 9ead907..0a131d7 100644
--- a/lib/ovs-atomic.h
+++ b/lib/ovs-atomic.h
-@@ -325,8 +325,6 @@
- #include "ovs-atomic-clang.h"
- #elif HAVE_STDATOMIC_H
- #include "ovs-atomic-c11.h"
-- #elif __GNUC__ >= 4 && __GNUC_MINOR__ >= 7
-- #include "ovs-atomic-gcc4.7+.h"
- #elif __GNUC__ && defined(__x86_64__)
- #include "ovs-atomic-x86_64.h"
- #elif __GNUC__ && defined(__i386__)
+@@ -318,7 +318,7 @@
+ #include "util.h"
+
+ #define IN_OVS_ATOMIC_H
+- #if __CHECKER__
++ #if 1
+ /* sparse doesn't understand some GCC extensions we use. */
+ #include "ovs-atomic-pthreads.h"
+ #elif __has_extension(c_atomic)
+++ /dev/null
-From 554daf066bf4a8eb7bbc8edc1a877a3afc0de38d Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jason=20K=C3=B6lker?= <jason@koelker.net>
-Date: Wed, 2 Sep 2015 22:40:24 +0000
-Subject: [PATCH] datapath: Add net/ip6_checksum.h to stt.c
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-`csum_ipv6_magic` is an asm inline on most platforms. However if it is
-not defined (like on ppc64le) including <net/ip6_checksum.h> will fall
-back to the c implementation by wrapping it in an
-`#ifndef _HAVE_ARCH_IPV6_CSUM`.
-
-Signed-off-by: Jason Kölker <jason@koelker.net>
-Signed-off-by: Jesse Gross <jesse@nicira.com>
----
- datapath/linux/compat/stt.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/datapath/linux/compat/stt.c b/datapath/linux/compat/stt.c
-index b44f470..dd21753 100644
---- a/datapath/linux/compat/stt.c
-+++ b/datapath/linux/compat/stt.c
-@@ -30,6 +30,7 @@
- #include <net/icmp.h>
- #include <net/inet_ecn.h>
- #include <net/ip.h>
-+#include <net/ip6_checksum.h>
- #include <net/net_namespace.h>
- #include <net/netns/generic.h>
- #include <net/sock.h>
---
-2.1.4
-
+++ /dev/null
-diff --git a/acinclude.m4 b/acinclude.m4
-index 45cfaf6..42866de 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -134,10 +134,10 @@ AC_DEFUN([OVS_CHECK_LINUX], [
- AC_MSG_RESULT([$kversion])
-
- if test "$version" -ge 4; then
-- if test "$version" = 4 && test "$patchlevel" -le 0; then
-+ if test "$version" = 4 && test "$patchlevel" -le 1; then
- : # Linux 4.x
- else
-- AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.0.x is not supported (please refer to the FAQ for advice)])
-+ AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.1.x is not supported (please refer to the FAQ for advice)])
- fi
- elif test "$version" = 3; then
- : # Linux 3.x
+++ /dev/null
-diff --git a/datapath/datapath.h b/datapath/datapath.h
-index fdf35f0..02be8be 100644
---- a/datapath/datapath.h
-+++ b/datapath/datapath.h
-@@ -86,10 +86,8 @@ struct datapath {
- /* Stats. */
- struct dp_stats_percpu __percpu *stats_percpu;
-
--#ifdef CONFIG_NET_NS
- /* Network namespace ref. */
-- struct net *net;
--#endif
-+ possible_net_t net;
-
- u32 user_features;
- };
-@@ -154,12 +152,12 @@ int lockdep_ovsl_is_held(void);
-
- static inline struct net *ovs_dp_get_net(const struct datapath *dp)
- {
-- return read_pnet(&dp->net);
-+ return ovs_compat_read_pnet(&dp->net);
- }
-
- static inline void ovs_dp_set_net(struct datapath *dp, struct net *net)
- {
-- write_pnet(&dp->net, net);
-+ ovs_compat_write_pnet(&dp->net, net);
- }
-
- struct vport *ovs_lookup_vport(const struct datapath *dp, u16 port_no);
-diff --git a/datapath/linux/compat/include/net/net_namespace.h b/datapath/linux/compat/include/net/net_namespace.h
-index b7dbfe3..7763584 100644
---- a/datapath/linux/compat/include/net/net_namespace.h
-+++ b/datapath/linux/compat/include/net/net_namespace.h
-@@ -51,4 +51,57 @@ static void rpl_unregister_pernet_gen_##TYPE(struct rpl_pernet_operations *rpl_p
- #define DEFINE_COMPAT_PNET_REG_FUNC(TYPE)
- #endif /* 2.6.33 */
-
-+/* In recent kernel versions (4.1) this type is defined ; for older versions we have to define it */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)
-+#define ovs_compat_read_pnet read_pnet
-+#define ovs_compat_write_pnet write_pnet
-+
-+#if defined(CONFIG_NET_NS) && defined(NETNS_REFCNT_DEBUG)
-+static inline struct net *hold_net(struct net *net)
-+{
-+ if (net)
-+ atomic_inc(&net->use_count);
-+ return net;
-+}
-+
-+static inline void release_net(struct net *net)
-+{
-+ if (net)
-+ atomic_dec(&net->use_count);
-+}
-+#else
-+static inline struct net *hold_net(struct net *net)
-+{
-+ return net;
-+}
-+
-+static inline void release_net(struct net *net)
-+{
-+}
-+#endif
-+
-+#else /* lower than 4.1 */
-+typedef struct {
-+#ifdef CONFIG_NET_NS
-+ struct net *net;
-+#endif
-+} possible_net_t;
-+
-+static inline void ovs_compat_write_pnet(possible_net_t *pnet, struct net *net)
-+{
-+#ifdef CONFIG_NET_NS
-+ pnet->net = net;
-+#endif
-+}
-+
-+static inline struct net *ovs_compat_read_pnet(const possible_net_t *pnet)
-+{
-+#ifdef CONFIG_NET_NS
-+ return pnet->net;
-+#else
-+ return &init_net;
-+#endif
-+}
-+#endif /* 4.1.0 */
-+
- #endif /* net/net_namespace.h wrapper */
--- /dev/null
+--- a/tests/test-ovn.c
++++ b/tests/test-ovn.c
+@@ -1043,7 +1043,7 @@ wait_pid(pid_t *pids, int *n)
+ int status;
+ pid_t pid;
+
+- pid = waitpid(WAIT_ANY, &status, 0);
++ pid = waitpid(-1, &status, 0);
+ if (pid < 0) {
+ ovs_fatal(errno, "waitpid failed");
+ } else if (WIFEXITED(status)) {
+++ /dev/null
-diff --git a/datapath/linux/compat/stt.c b/datapath/linux/compat/stt.c
-index b44f470..f95416e 100644
---- a/datapath/linux/compat/stt.c
-+++ b/datapath/linux/compat/stt.c
-@@ -1326,9 +1326,14 @@ static void clean_percpu(struct work_struct *work)
-
- static unsigned int nf_ip_hook(FIRST_PARAM
- struct sk_buff *skb,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)
-+ const struct nf_hook_state *state
-+#else
- const struct net_device *in,
- const struct net_device *out,
-- int (*okfn)(struct sk_buff *))
-+ int (*okfn)(struct sk_buff *)
-+#endif
-+ )
- {
- struct stt_sock *stt_sock;
- int ip_hdr_len;
+++ /dev/null
-diff --git a/datapath/linux/compat/include/net/vxlan.h b/datapath/linux/compat/include/net/vxlan.h
-index 0d60c18..db4dfb6 100644
---- a/datapath/linux/compat/include/net/vxlan.h
-+++ b/datapath/linux/compat/include/net/vxlan.h
-@@ -99,8 +99,13 @@ static inline int rpl_vxlan_xmit_skb(struct vxlan_sock *vs,
- return -ENOSYS;
- }
-
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)
-+ return vxlan_xmit_skb(rt, vs->sock->sk, skb, src, dst, tos, ttl, df,
-+ src_port, dst_port, md, xnet, vxflags);
-+#else
- return vxlan_xmit_skb(rt, skb, src, dst, tos, ttl, df,
- src_port, dst_port, md, xnet, vxflags);
-+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) */
- }
-
- #define vxlan_xmit_skb rpl_vxlan_xmit_skb
+++ /dev/null
-diff --git a/datapath/vport-lisp.c b/datapath/vport-lisp.c
-index 0024eb4..ce1c3a8 100644
---- a/datapath/vport-lisp.c
-+++ b/datapath/vport-lisp.c
-@@ -455,7 +455,11 @@ static int lisp_send(struct vport *vport, struct sk_buff *skb)
- ovs_skb_set_inner_protocol(skb, skb->protocol);
-
- df = tun_key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)
-+ sent_len = udp_tunnel_xmit_skb(rt, lisp_port->lisp_rcv_socket->sk, skb, saddr, tun_key->ipv4_dst,
-+#else
- sent_len = udp_tunnel_xmit_skb(rt, skb, saddr, tun_key->ipv4_dst,
-+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) */
- tun_key->ipv4_tos, tun_key->ipv4_ttl,
- df, src_port, dst_port, false, true);
-
--- /dev/null
+#
+# Copyright (C) 2015 Bruno Randolf (br1@einfach.org)
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=pingcheck
+PKG_VERSION:=0.1
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_URL:=https://github.com/br101/pingcheck.git
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_VERSION:=0f099998782f550e2abebdc65bcc3e969b798769
+
+PKG_MAINTAINER:=Bruno Randolf <br1@einfach.org>
+PKG_LICENSE:=GPL-2.0+
+PKG_LICENSE_FILES:=LICENSE
+
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/pingcheck
+ SECTION:=net
+ CATEGORY:=Network
+ DEPENDS:=+libubus +libuci
+ MAINTAINER:=Bruno Randolf <br1@einfach.org>
+ TITLE:=Check Internet and interface connectivity
+endef
+
+define Package/pingcheck/description
+Checks by using "ping" (ICMP echo) wether a configured host (normally on the
+internet) can be reached via a specific interface. Then makes this information
+available via ubus and triggers "online" and "offline" scripts.
+endef
+
+define Package/pingcheck/conffiles
+/etc/config/pingcheck
+endef
+
+define Package/pingcheck/install
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/pingcheck $(1)/usr/sbin/
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./pingcheck.init $(1)/etc/init.d/pingcheck
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/pingcheck.config $(1)/etc/config/pingcheck
+endef
+
+$(eval $(call BuildPackage,pingcheck))
--- /dev/null
+#!/bin/sh /etc/rc.common
+
+START=99
+
+USE_PROCD=1
+PROG=/usr/sbin/pingcheck
+CONFFILE=/etc/config/pingcheck
+
+start_service() {
+ procd_open_instance
+ procd_set_param command $PROG
+ procd_set_param file $CONFFILE
+ procd_set_param respawn
+ procd_close_instance
+}
--- /dev/null
+if PACKAGE_privoxy
+
+ comment "Shared libraries settings"
+
+ config PRIVOXY_disable-pthread
+ bool "Don't use POSIX libpthread (-5489b)"
+ default n
+
+ config PRIVOXY_disable-dynamic-pcre
+ bool "Use the built-in, static pcre, even if libpcre is available (+25669b)"
+ default n
+
+ config PRIVOXY_disable-zlib
+ bool "Don't use zlib to decompress data before filtering. (-1336b)"
+ default n
+
+ comment "Config options. Overwrites/ignore configuration file settings"
+
+ config PRIVOXY_disable-toggle
+ bool "Don't support temporary disable (+2797b)"
+ default n
+
+ config PRIVOXY_disable-force
+ bool "Don't allow single-page disable (-434b)"
+ default n
+
+ config PRIVOXY_disable-fast-redirects
+ bool "Don't support fast redirects (-1393b)"
+ default n
+
+ config PRIVOXY_disable-stats
+ bool "Don't keep statistics (+2870b)"
+ default n
+
+ config PRIVOXY_enable-ie-images
+ bool "Enable MS IE image handling. !Read help! (+2694b)"
+ help
+ Enable a quick but not always reliable auto-detect whether
+ requests from MS Internet Explorer are for an image or not.
+ default n
+
+ config PRIVOXY_disable-image-blocking
+ bool "Don't check for image request - assume HTML (-655b)"
+ help
+ Don't try to figure out whether a request is
+ for an image or HTML - assume HTML.
+ default n
+
+ config PRIVOXY_disable-acl-support
+ bool "Disable ACL access control (-3496b)"
+ help
+ Prevents the use of ACLs to control access to Privoxy by IP address.
+ default n
+
+ config PRIVOXY_disable-trust-files
+ bool "Prevents the use of trust files. (-1302b)"
+ default n
+
+ config PRIVOXY_disable-editor
+ bool "Disable web-based editor. !Read help! (-44979b)"
+ help
+ Prevents the use of the web-based actions file
+ editor and web-based temporary disable setting.
+ default n
+
+ config PRIVOXY_enable-no-gifs
+ bool "Use politically correct PNG format. !Read help! (+112b)"
+ help
+ Use politically correct PNG format instead of GIF
+ for built-in images. May not work with all browsers.
+ default n
+
+ config PRIVOXY_enable-graceful-termination
+ bool "Allow to shutdown Privoxy through the webinterface. (+1685b)"
+ default n
+
+ config PRIVOXY_enable-extended-host-patterns
+ bool "Enable and require PCRE syntax in host patterns. !Read help! (-1329b)"
+ help
+ Enable and require PCRE syntax in host patterns. This feature hasn't
+ been announced yet and it's not clear if it's a good idea. It's expected
+ to work, but undocumented. You should only enable it if you know what
+ PCRE is and are sure that you need it for your host patterns. You can
+ use tools/url-pattern-translator.pl to convert existing action files to
+ use PCRE host patterns. Please don't enable this option when creating
+ packages for others that may not be expecting it.
+ default n
+
+ config PRIVOXY_enable-external-filters
+ bool "Allow to filter content with scripts and programs. Experimental. (+4821b)"
+ default n
+
+ config PRIVOXY_enable-accept-filter
+ bool "Try to use accf_http(9) if supported. (+-0b)"
+ default n
+
+ config PRIVOXY_enable-strptime-sanity-checks
+ bool "Only trust strptime() results if ... !Read help! (+407b)"
+ help
+ Only trust strptime() results if an additional strftime()/strptime()
+ conversion doesn't change the result. Can be useful if strptime() is
+ known or suspected to be broken.
+ default n
+
+ config PRIVOXY_enable-compression
+ bool "Allow Privoxy to compress buffered content. (+1275b)"
+ help
+ Allow Privoxy to compress buffered content
+ if the client supports it. Requires zlib support.
+ depends on !PRIVOXY_no_zlib
+ default n
+
+
+endif
+
\ No newline at end of file
#
-# Copyright (C) 2006-2015 OpenWrt.org
+# Copyright (C) 2006-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=privoxy
-PKG_VERSION:=3.0.23
-PKG_RELEASE:=3
+PKG_VERSION:=3.0.24
+PKG_RELEASE:=1
PKG_SOURCE:=privoxy-$(PKG_VERSION)-stable-src.tar.gz
PKG_SOURCE_URL:=@SF/ijbswa
-PKG_MD5SUM:=bbe47d5ff1a54d9f9fc93a160532697f
+PKG_MD5SUM:=44a47d1a5000db8cccd61ace0e25e7f7
PKG_BUILD_DIR:=$(BUILD_DIR)/privoxy-$(PKG_VERSION)-stable
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=LICENSE
-PKG_MAINTAINER:=christian.schoenebeck@gmail.com
+PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
+
+PKG_CONFIG_DEPENDS:= \
+ CONFIG_IPV6 \
+ \
+ CONFIG_PRIVOXY_disable-pthread \
+ CONFIG_PRIVOXY_disable-dynamic-pcre \
+ CONFIG_PRIVOXY_disable-zlib \
+ \
+ CONFIG_PRIVOXY_disable-toggle \
+ CONFIG_PRIVOXY_disable-force \
+ CONFIG_PRIVOXY_disable-fast-redirects \
+ CONFIG_PRIVOXY_disable-stats \
+ CONFIG_PRIVOXY_enable-ie-images \
+ CONFIG_PRIVOXY_disable-image-blocking \
+ CONFIG_PRIVOXY_disable-acl-support \
+ CONFIG_PRIVOXY_disable-trust-files \
+ CONFIG_PRIVOXY_disable-editor \
+ CONFIG_PRIVOXY_enable-no-gifs \
+ CONFIG_PRIVOXY_enable-graceful-termination \
+ CONFIG_PRIVOXY_enable-extended-host-patterns \
+ CONFIG_PRIVOXY_enable-external-filters \
+ CONFIG_PRIVOXY_enable-accept-filter \
+ CONFIG_PRIVOXY_enable-strptime-sanity-checks \
+ CONFIG_PRIVOXY_enable-compression
include $(INCLUDE_DIR)/package.mk
SECTION:=net
CATEGORY:=Network
SUBMENU:=Web Servers/Proxies
- DEPENDS:=+libpcre +libpthread +zlib
TITLE:=Privoxy WEB Proxy
URL:=http://www.privoxy.org/
USERID:=privoxy=8118:privoxy=8118
+ MENU:=1
+ DEPENDS:=+!PRIVOXY_no_pcre:libpcre +!PRIVOXY_no_pthread:libpthread +!PRIVOXY_no_zlib:zlib
endef
# shown in LuCI package description
# shown in make menuconfig <Help>
define Package/$(PKG_NAME)/config
-help
- Privoxy is a web proxy with advanced filtering capabilities for protecting
- privacy, modifying web page content, managing cookies, controlling access,
- and removing ads, banners, pop-ups and other obnoxious Internet junk.
- Privoxy has a very flexible configuration and can be customized to suit
- individual needs and tastes.
- Privoxy has application for both stand-alone systems and multi-user networks.
-
- Run as : $(USERID)
- Version: $(PKG_VERSION)-$(PKG_RELEASE)
- Home : $(URL)
-
- $(PKG_MAINTAINER)
+ help
+ Privoxy is a web proxy with advanced filtering capabilities for protecting
+ privacy, modifying web page content, managing cookies, controlling access,
+ and removing ads, banners, pop-ups and other obnoxious Internet junk.
+ Privoxy has a very flexible configuration and can be customized to suit
+ individual needs and tastes.
+ Privoxy has application for both stand-alone systems and multi-user networks.
+ Run as : $(USERID)
+ Version: $(PKG_VERSION)-$(PKG_RELEASE)
+ Home : $(URL)
+ $(PKG_MAINTAINER)
+
+ source "$(SOURCE)/Config.in"
endef
CONFIGURE_ARGS += \
- --sysconfdir=/etc/privoxy
+ --sysconfdir=/etc/privoxy \
+ $(if $(CONFIG_IPV6),,--disable-ipv6-support) \
+ \
+ $(if $(CONFIG_PRIVOXY_disable-pthread),--disable-pthread) \
+ $(if $(CONFIG_PRIVOXY_disable-dynamic-pcre),--disable-dynamic-pcre) \
+ $(if $(CONFIG_PRIVOXY_disable-zlib),--disable-zlib) \
+ \
+ $(if $(CONFIG_PRIVOXY_disable-toggle),--disable-toggle) \
+ $(if $(CONFIG_PRIVOXY_disable-force),--disable-force) \
+ $(if $(CONFIG_PRIVOXY_disable-fast-redirects),--disable-fast-redirects) \
+ $(if $(CONFIG_PRIVOXY_disable-stats),--disable-stats) \
+ $(if $(CONFIG_PRIVOXY_enable-ie-images),--enable-ie-images) \
+ $(if $(CONFIG_PRIVOXY_disable-image-blocking),--disable-image-blocking) \
+ $(if $(CONFIG_PRIVOXY_disable-acl-support),--disable-acl-support) \
+ $(if $(CONFIG_PRIVOXY_disable-trust-files),--disable-trust-files) \
+ $(if $(CONFIG_PRIVOXY_disable-editor),--disable-editor) \
+ $(if $(CONFIG_PRIVOXY_enable-no-gifs),--enable-no-gifs) \
+ $(if $(CONFIG_PRIVOXY_enable-graceful-termination),--enable-graceful-termination) \
+ $(if $(CONFIG_PRIVOXY_enable-extended-host-patterns),--enable-extended-host-patterns) \
+ $(if $(CONFIG_PRIVOXY_enable-external-filters),--enable-external-filters) \
+ $(if $(CONFIG_PRIVOXY_enable-accept-filter),--enable-accept-filter) \
+ $(if $(CONFIG_PRIVOXY_enable-strptime-sanity-checks),--enable-strptime-sanity-checks) \
+ $(if $(CONFIG_PRIVOXY_enable-compression),--enable-compression)
# needed otherwise errors during compile
MAKE_FLAGS:=
-exec install -m0664 -t $(1)/etc/privoxy {} \;
$(INSTALL_DIR) \
+ $(1)/lib/upgrade/keep.d \
$(1)/etc/init.d \
$(1)/etc/hotplug.d/iface \
$(1)/etc/config
+ $(INSTALL_DATA) ./files/privoxy.upgrade $(1)/lib/upgrade/keep.d/privoxy
$(INSTALL_BIN) ./files/privoxy.init $(1)/etc/init.d/privoxy
$(INSTALL_BIN) ./files/privoxy.hotplug $(1)/etc/hotplug.d/iface/80-privoxy
$(INSTALL_CONF) ./files/privoxy.config $(1)/etc/config/privoxy
endef
+define Package/$(PKG_NAME)/postinst
+ #!/bin/sh
+ grep -i privoxy $${IPKG_INSTROOT}/etc/services >/dev/null 2>&1 || \
+ echo -e "privoxy\t8118" >> $${IPKG_INSTROOT}/etc/services
+endef
+
$(eval $(call BuildPackage,$(PKG_NAME)))
# only (re-)start on ifup
[ "$ACTION" = "ifup" ] || exit 0
+# only start if boot_delay is done
+[ -f /tmp/privoxy.hotplug ] || exit 0
PIDFILE=/var/run/privoxy.pid
# detect list options (LENGTH) and ignore
echo $__OPT | grep -i "_LENGTH" >/dev/null 2>&1 && return
# detect list options (ITEM) and ignore
- echo $__OPT | grep -i "_ITEM" >/dev/null 2>&1 && __OPT=$(echo $__OPT | sed -e "s#_ITEM.##g")
+ echo $__OPT | grep -i "_ITEM" >/dev/null 2>&1 && __OPT=$(echo $__OPT | sed -e "s#_ITEM.*##g")
# uci only accept "_" but we need "-"
local __OPT=$(echo $__OPT | sed -e "s#_#-#g")
# write to config
echo '### SEE /etc/config/privoxy INSTEAD' >> $CFGTEMP
echo '' >> $CFGTEMP
+ # logdir and logfile
+ # privoxy needs read/write access
+ _LOGDIR=$(uci -q get privoxy.privoxy.logdir) || _LOGDIR="/var/log"
+ _LOGFILE=$(uci -q get privoxy.privoxy.logfile) || _LOGFILE="privoxy.log"
+ mkdir -m0755 -p $_LOGDIR
+ touch $_LOGDIR/$_LOGFILE
+ chmod 664 $_LOGDIR/$_LOGFILE
+ chown privoxy:privoxy $_LOGDIR/$_LOGFILE
+ echo -e "logdir\t$_LOGDIR" >> $CFGTEMP
+ echo -e "logfile\t$_LOGFILE" >> $CFGTEMP
+
# confdir
# privoxy needs read access (possibly write access)
_CONFDIR=$(uci -q get privoxy.privoxy.confdir) || _CONFDIR="/etc/privoxy"
echo -e "templdir\t$_TEMPLDIR" >> $CFGTEMP
fi
- # logdir and logfile
- # privoxy needs read/write access
- _LOGDIR=$(uci -q get privoxy.privoxy.logdir) || _LOGDIR="/var/log"
- _LOGFILE=$(uci -q get privoxy.privoxy.logfile) || _LOGFILE="privoxy.log"
- mkdir -m0755 -p $_LOGDIR
- touch $_LOGDIR/$_LOGFILE
- chmod 664 $_LOGDIR/$_LOGFILE
- chown privoxy:privoxy $_LOGDIR/$_LOGFILE
- echo -e "logdir\t$_LOGDIR" >> $CFGTEMP
- echo -e "logfile\t$_LOGFILE" >> $CFGTEMP
-
# temporary-directory
# privoxy needs read/write access
_TMP_DIR=$(uci -q get privoxy.privoxy.temporary_directory) # no default needed
}
boot() {
- return 0 # will be started by "iface" hotplug events
+ # wait a given time (default 10 seconds) before startup
+ # to wait for interfaces to come up / not using hotplug events during boot
+ _start() {
+ [ $1 -gt 0 ] && {
+ logger -p daemon.info -t "privoxy[]" "Scheduled startup in $1 seconds"
+ sleep $1
+ }
+ start
+ }
+
+ local _DELAY
+ _DELAY=$(uci_get "privoxy" "system" "boot_delay" "10")
+ _start $_DELAY &
+ return 0
+}
+
+shutdown() {
+ rm -f /tmp/privoxy.hotplug
+ stop
}
start() {
_uci2conf
/usr/sbin/privoxy --pidfile $PIDFILE --user privoxy.privoxy $CFGFILE
+ touch /tmp/privoxy.hotplug
# verify startup
_PID=$(cat $PIDFILE 2>/dev/null)
local _ERR=$?
[ $_ERR -eq 0 ] \
&& logger -p daemon.notice -t "privoxy[$_PID]" "Started successfully"\
- || logger -p daemon.warn -t "privoxy[-----]" "Failed to start"
+ || logger -p daemon.warn -t "privoxy[]" "Failed to start"
return $_ERR
}
logger -p daemon.notice -t "privoxy[$_PID]" "Shutdown successfully"
else
kill -9 $_tmp # Normally never come here
- logger -p daemon.warn -t "privoxy[-----]" "Shutdown forced by KILL"
+ logger -p daemon.warn -t "privoxy[$_tmp]" "Shutdown forced by KILL"
fi
return 0
}
--- /dev/null
+/etc/config/privoxy
+/etc/privoxy/user.action
+/etc/privoxy/user.filter
+/etc/privoxy/user.trust
include $(TOPDIR)/rules.mk
PKG_NAME:=prosody
-PKG_VERSION:=0.9.8
+PKG_VERSION:=0.9.10
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://prosody.im/downloads/source
-PKG_MD5SUM:=5144cd832a1860443e21e336dc560ee7
+PKG_MD5SUM:=ef6d4a9e6dcae577eb52f7277d7beac5
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
PKG_LICENSE:=MIT/X11
#!/bin/sh /etc/rc.common
-# Copyright (C) 2010-2011 OpenWrt.org
+# Copyright (C) 2011-2016 OpenWrt.org
START=99
-EXTRA_COMMANDS="status"
-EXTRA_HELP=" status Print the status of the service"
+USE_PROCD=1
BIN=/usr/bin/prosodyctl
LOG_D=/var/log/prosody
RUN_USER=prosody
RUN_GROUP=prosody
-start() {
+start_service() {
[ -d /var/run/prosody ] || {
mkdir -m 0755 -p /var/run/prosody
chown prosody:prosody /var/run/prosody
}
}
-
- $BIN start
+ procd_open_instance
+ procd_set_param command "$BIN" start
+ procd_set_param file /etc/prosody/prosody.cfg.lua
+ procd_close_instance
}
-stop() {
- $BIN stop
-}
-
-reload() {
- [ -f $PID_F ] && kill -HUP $(cat $PID_F)
-}
-
-status() {
- $BIN status
+stop_service() {
+ ${BIN} stop
}
+++ /dev/null
-diff -u --recursive prosody-0.9.7-vanilla/net/dns.lua prosody-0.9.7/net/dns.lua
---- prosody-0.9.7-vanilla/net/dns.lua 2015-01-02 00:26:19.981433830 -0500
-+++ prosody-0.9.7/net/dns.lua 2015-01-02 00:33:10.467077715 -0500
-@@ -225,7 +225,7 @@
-
-
- function dns.random(...) -- - - - - - - - - - - - - - - - - - - dns.random
-- math.randomseed(math.floor(10000*socket.gettime()) % 0x100000000);
-+ math.randomseed(math.floor(10000*socket.gettime()) % 0x80000000);
- dns.random = math.random;
- return dns.random(...);
- end
#
-# Copyright (C) 2008-2015 OpenWrt.org
+# Copyright (C) 2008-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=radicale
-PKG_VERSION:=0.10
-PKG_RELEASE:=2
+PKG_VERSION:=1.1.1
+PKG_RELEASE:=1
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
PKG_LICENSE:=GPL-3.0
PKG_SOURCE:=Radicale-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://pypi.python.org/packages/source/R/Radicale/
-PKG_MD5SUM:=32655d8893962956ead0ad690cca6044
+PKG_MD5SUM:=a29dd538377ea24cec83237a636122ae
# needed for "r"adicale <-> "R"adicale
PKG_BUILD_DIR:=$(BUILD_DIR)/Radicale-$(PKG_VERSION)
endef
define Package/$(PKG_NAME)-py2/install
- $(INSTALL_DIR) $(1)/etc/init.d
- $(INSTALL_BIN) ./files/radicale.init $(1)/etc/init.d/radicale
- $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/radicale.init $(1)/etc/init.d/radicale
+
+ $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
$(INSTALL_BIN) ./files/radicale.hotplug $(1)/etc/hotplug.d/iface/80-radicale
- $(INSTALL_DIR) $(1)/etc/config
- $(INSTALL_CONF) ./files/radicale.config $(1)/etc/config/radicale
- $(INSTALL_DIR) $(1)/etc/radicale/ssl
- $(INSTALL_DATA) ./files/config.template $(1)/etc/radicale/
- $(INSTALL_DATA) ./files/logging.template $(1)/etc/radicale/
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_CONF) ./files/radicale.config $(1)/etc/config/radicale
+
+ $(INSTALL_DIR) $(1)/lib/upgrade/keep.d
+ $(INSTALL_DATA) ./files/radicale.upgrade $(1)/lib/upgrade/keep.d/radicale
+
+ $(INSTALL_DIR) $(1)/etc/radicale/ssl
+ $(INSTALL_DATA) ./files/config.template $(1)/etc/radicale/config.template
+ $(INSTALL_DATA) ./files/logging.template $(1)/etc/radicale/logging.template
$(INSTALL_DATA) ./files/radicale.users $(1)/etc/radicale/users
$(INSTALL_DATA) ./files/radicale.rights $(1)/etc/radicale/rights
# Each Radicale's config [section] is setup as UCI config setting 'section'
#
+####################################################
+# OpenWrt specific settings
+# not part of radicale package
+#
+config system 'radicale'
+ # delayed startup at boot (default 10 seconds)
+ # to wait for netifd to bring up interfaces
+ # during this time iface hotplug events are ignored
+# option boot_delay '10'
+
####################################################
# Server options
#
####################################################
# Authentication options
#
-config setting 'auth'
+config setting 'auth'
# Authentication method
# Value: None | htpasswd | IMAP | LDAP | PAM | courier | http | remote_user | custom
# only (re-)start on ifup
[ "$ACTION" = "ifup" ] || exit 0
+# only start if boot_delay is done
+[ -f /tmp/radicale.hotplug ] || exit 0
_PID=$(ps | grep '[p]ython.*[r]adicale' 2>/dev/null | awk '{print $1}')
kill -1 $_PID 2>/dev/null
#!/bin/sh /etc/rc.common
-# Copyright (C) 2006-2015 OpenWrt.org
+# Copyright (C) 2006-2016 OpenWrt.org
START=80
STOP=10
}
boot() {
- return 0 # will be started by "iface" hotplug events
+ # wait a given time (default 10 seconds) before startup
+ # to wait for interfaces to come up / not using hotplug events during boot
+ _start() {
+ [ $1 -gt 0 ] && sleep $1
+ start
+ }
+
+ local _DELAY
+ _DELAY=$(uci_get "radicale" "system" "boot_delay" "10")
+ _start $_DELAY &
+ return 0
+}
+
+shutdown() {
+ rm -f /tmp/radicale.hotplug
+ stop
}
start() {
_set_permission
radicale --daemon --config=$SYSCFG
+ touch /tmp/radicale.hotplug
_running & # check if running and syslog
--- /dev/null
+/etc/config/radicale
+/etc/radicale/users
+/etc/radicale/rights
+
include $(TOPDIR)/rules.mk
PKG_NAME:=redsocks
-PKG_VERSION:=0.4
+PKG_VERSION:=0.4-20150907
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_PROTO:=git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_URL:=https://github.com/darkk/redsocks.git
-PKG_SOURCE_VERSION:=release-0.4
+PKG_SOURCE_VERSION:=2118c616b4970a0436eceaa57a6e3451ec98ad2b
PKG_MAINTAINER:=Johannes Morgenroth <jm@m-network.de>
PKG_LICENSE:=Apache-2.0
+++ /dev/null
-From 290f19972e9f7b74f818ae211cb535e32f1f314f Mon Sep 17 00:00:00 2001
-From: Leonid Evdokimov <leon@darkk.net.ru>
-Date: Tue, 10 Apr 2012 00:57:26 +0400
-Subject: [PATCH 01/12] Fix bug in DNS resolution - results were ignored (since
- 8179a1ff).
-
----
- parser.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/parser.c b/parser.c
-index 85d3533..6198828 100644
---- a/parser.c
-+++ b/parser.c
-@@ -295,22 +295,22 @@ static int vp_in_addr(parser_context *context, void *addr, const char *token)
- memcpy(addr, &ia, sizeof(ia));
- }
- else {
-- struct addrinfo *addr, hints;
-+ struct addrinfo *ainfo, hints;
- int err;
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_INET; /* IPv4-only */
- hints.ai_socktype = SOCK_STREAM; /* I want to have one address once and ONLY once, that's why I specify socktype and protocol */
- hints.ai_protocol = IPPROTO_TCP;
- hints.ai_flags = AI_ADDRCONFIG; /* I don't need IPv4 addrs without IPv4 connectivity */
-- err = getaddrinfo(token, NULL, &hints, &addr);
-+ err = getaddrinfo(token, NULL, &hints, &ainfo);
- if (err == 0) {
- int count, taken;
- struct addrinfo *iter;
- struct sockaddr_in *resolved_addr;
-- for (iter = addr, count = 0; iter; iter = iter->ai_next, ++count)
-+ for (iter = ainfo, count = 0; iter; iter = iter->ai_next, ++count)
- ;
- taken = rand() % count;
-- for (iter = addr; taken > 0; iter = iter->ai_next, --taken)
-+ for (iter = ainfo; taken > 0; iter = iter->ai_next, --taken)
- ;
- resolved_addr = (struct sockaddr_in*)iter->ai_addr;
- assert(resolved_addr->sin_family == iter->ai_family && iter->ai_family == AF_INET);
-@@ -318,7 +318,7 @@ static int vp_in_addr(parser_context *context, void *addr, const char *token)
- log_error(LOG_WARNING, "%s resolves to %d addresses, using %s",
- token, count, inet_ntoa(resolved_addr->sin_addr));
- memcpy(addr, &resolved_addr->sin_addr, sizeof(ia));
-- freeaddrinfo(addr);
-+ freeaddrinfo(ainfo);
- }
- else {
- if (err == EAI_SYSTEM)
---
-1.9.1
-
+++ /dev/null
-From 6015b3a6f26e04dd5d78cd6c1320886fc9035612 Mon Sep 17 00:00:00 2001
-From: Leonid Evdokimov <leon@darkk.net.ru>
-Date: Tue, 10 Apr 2012 01:37:34 +0400
-Subject: [PATCH 02/12] inet_ntop -> red_inet_ntop
-
----
- redsocks.c | 13 ++++---------
- redudp.c | 19 +++++++++++--------
- utils.c | 37 +++++++++++++++++++++++++++++++++----
- utils.h | 7 +++++++
- 4 files changed, 55 insertions(+), 21 deletions(-)
-
-diff --git a/redsocks.c b/redsocks.c
-index d085e10..ba5eab2 100644
---- a/redsocks.c
-+++ b/redsocks.c
-@@ -207,22 +207,17 @@ void redsocks_log_write_plain(
- int saved_errno = errno;
- struct evbuffer *fmt = evbuffer_new();
- va_list ap;
-- char clientaddr_str[INET6_ADDRSTRLEN], destaddr_str[INET6_ADDRSTRLEN];
-+ char clientaddr_str[RED_INET_ADDRSTRLEN], destaddr_str[RED_INET_ADDRSTRLEN];
-
- if (!fmt) {
- log_errno(LOG_ERR, "evbuffer_new()");
- // no return, as I have to call va_start/va_end
- }
-
-- if (!inet_ntop(clientaddr->sin_family, &clientaddr->sin_addr, clientaddr_str, sizeof(clientaddr_str)))
-- strncpy(clientaddr_str, "???", sizeof(clientaddr_str));
-- if (!inet_ntop(destaddr->sin_family, &destaddr->sin_addr, destaddr_str, sizeof(destaddr_str)))
-- strncpy(destaddr_str, "???", sizeof(destaddr_str));
--
- if (fmt) {
-- evbuffer_add_printf(fmt, "[%s:%i->%s:%i]: %s",
-- clientaddr_str, ntohs(clientaddr->sin_port),
-- destaddr_str, ntohs(destaddr->sin_port),
-+ evbuffer_add_printf(fmt, "[%s->%s]: %s",
-+ red_inet_ntop(clientaddr, clientaddr_str, sizeof(clientaddr_str)),
-+ red_inet_ntop(destaddr, destaddr_str, sizeof(destaddr_str)),
- orig_fmt);
- }
-
-diff --git a/redudp.c b/redudp.c
-index 0a97852..9516a50 100644
---- a/redudp.c
-+++ b/redudp.c
-@@ -436,10 +436,9 @@ static void redudp_pkt_from_socks(int fd, short what, void *_arg)
- return;
-
- if (memcmp(&udprelayaddr, &client->udprelayaddr, sizeof(udprelayaddr)) != 0) {
-- char buf[INET6_ADDRSTRLEN];
-- const char *addr = inet_ntop(udprelayaddr.sin_family, &udprelayaddr.sin_addr, buf, sizeof(buf));
-- redudp_log_error(client, LOG_NOTICE, "Got packet from unexpected address %s:%u.",
-- addr ? addr : "?", ntohs(udprelayaddr.sin_port));
-+ char buf[RED_INET_ADDRSTRLEN];
-+ redudp_log_error(client, LOG_NOTICE, "Got packet from unexpected address %s.",
-+ red_inet_ntop(&udprelayaddr, buf, sizeof(buf)));
- return;
- }
-
-@@ -459,10 +458,14 @@ static void redudp_pkt_from_socks(int fd, short what, void *_arg)
- if (pkt.header.ip.port != client->instance->config.destaddr.sin_port ||
- pkt.header.ip.addr != client->instance->config.destaddr.sin_addr.s_addr)
- {
-- char buf[INET6_ADDRSTRLEN];
-- const char *addr = inet_ntop(AF_INET, &pkt.header.ip.addr, buf, sizeof(buf));
-- redudp_log_error(client, LOG_NOTICE, "Socks5 server relayed packet from unexpected address %s:%u.",
-- addr ? addr : "?", ntohs(pkt.header.ip.port));
-+ char buf[RED_INET_ADDRSTRLEN];
-+ struct sockaddr_in pktaddr = {
-+ .sin_family = AF_INET,
-+ .sin_addr = { pkt.header.ip.addr },
-+ .sin_port = pkt.header.ip.port,
-+ };
-+ redudp_log_error(client, LOG_NOTICE, "Socks5 server relayed packet from unexpected address %s.",
-+ red_inet_ntop(&pktaddr, buf, sizeof(buf)));
- return;
- }
-
-diff --git a/utils.c b/utils.c
-index c6ced51..6e1f3af 100644
---- a/utils.c
-+++ b/utils.c
-@@ -18,6 +18,7 @@
- #include <errno.h>
- #include <assert.h>
- #include <fcntl.h>
-+#include <string.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
-@@ -42,10 +43,9 @@ int red_recv_udp_pkt(int fd, char *buf, size_t buflen, struct sockaddr_in *inadd
- }
-
- if (pktlen >= buflen) {
-- char buf[INET6_ADDRSTRLEN];
-- const char *addr = inet_ntop(inaddr->sin_family, &inaddr->sin_addr, buf, sizeof(buf));
-- log_error(LOG_WARNING, "wow! Truncated udp packet of size %zd from %s:%u! impossible! dropping it...",
-- pktlen, addr ? addr : "?", ntohs(inaddr->sin_port));
-+ char buf[RED_INET_ADDRSTRLEN];
-+ log_error(LOG_WARNING, "wow! Truncated udp packet of size %zd from %s! impossible! dropping it...",
-+ pktlen, red_inet_ntop(inaddr, buf, sizeof(buf)));
- return -1;
- }
-
-@@ -176,4 +176,33 @@ int red_is_socket_connected_ok(struct bufferevent *buffev)
- }
- }
-
-+char *red_inet_ntop(const struct sockaddr_in* sa, char* buffer, size_t buffer_size)
-+{
-+ const char *retval = 0;
-+ size_t len = 0;
-+ uint16_t port;
-+ const char placeholder[] = "???:???";
-+
-+ assert(buffer_size >= sizeof(placeholder));
-+
-+ memset(buffer, buffer_size, 0);
-+ if (sa->sin_family == AF_INET) {
-+ retval = inet_ntop(AF_INET, &sa->sin_addr, buffer, buffer_size);
-+ port = ((struct sockaddr_in*)sa)->sin_port;
-+ }
-+ else if (sa->sin_family == AF_INET6) {
-+ retval = inet_ntop(AF_INET6, &((const struct sockaddr_in6*)sa)->sin6_addr, buffer, buffer_size);
-+ port = ((struct sockaddr_in6*)sa)->sin6_port;
-+ }
-+ if (retval) {
-+ assert(retval == buffer);
-+ len = strlen(retval);
-+ snprintf(buffer + len, buffer_size - len, ":%d", ntohs(port));
-+ }
-+ else {
-+ strcpy(buffer, placeholder);
-+ }
-+ return buffer;
-+}
-+
- /* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
-diff --git a/utils.h b/utils.h
-index f691b77..d3af00f 100644
---- a/utils.h
-+++ b/utils.h
-@@ -57,6 +57,13 @@ int fcntl_nonblock(int fd);
- (what) & EVBUFFER_TIMEOUT ? "EVBUFFER_TIMEOUT" : "0", \
- (what) & ~(EVBUFFER_READ|EVBUFFER_WRITE|EVBUFFER_EOF|EVBUFFER_ERROR|EVBUFFER_TIMEOUT)
-
-+#if INET6_ADDRSTRLEN < INET_ADDRSTRLEN
-+# error Impossible happens: INET6_ADDRSTRLEN < INET_ADDRSTRLEN
-+#else
-+# define RED_INET_ADDRSTRLEN (INET6_ADDRSTRLEN + 1 + 5 + 1) // addr + : + port + \0
-+#endif
-+char *red_inet_ntop(const struct sockaddr_in* sa, char* buffer, size_t buffer_size);
-+
- /* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
- /* vim:set foldmethod=marker foldlevel=32 foldmarker={,}: */
- #endif /* UTILS_H_SAT_FEB__2_02_24_05_2008 */
---
-1.9.1
-
+++ /dev/null
-From 709646d59d96cb73a7e70347f37de9823e4e5f14 Mon Sep 17 00:00:00 2001
-From: Leonid Evdokimov <leon@darkk.net.ru>
-Date: Fri, 13 Apr 2012 01:57:23 +0400
-Subject: [PATCH 03/12] Initial support for UDP + TPROXY redirection. No more
- dest_ip in redudp.
-
- * TPROXY requires Linux 2.6.29+ (see man 7 ip[1]).
- * all redsocks code is running as root to bind to arbitrary port.
- * Non-Linux and old-Linux builds are broken at the moment.
-
-[1] http://www.kernel.org/doc/man-pages/online/pages/man7/ip.7.html
----
- dnstc.c | 2 +-
- redudp.c | 197 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
- redudp.h | 2 +
- utils.c | 43 +++++++++++++-
- utils.h | 2 +-
- 5 files changed, 227 insertions(+), 19 deletions(-)
-
-diff --git a/dnstc.c b/dnstc.c
-index 43881d8..5f9fedd 100644
---- a/dnstc.c
-+++ b/dnstc.c
-@@ -68,7 +68,7 @@ static void dnstc_pkt_from_client(int fd, short what, void *_arg)
- ssize_t pktlen, outgoing;
-
- assert(fd == EVENT_FD(&self->listener));
-- pktlen = red_recv_udp_pkt(fd, buf.raw, sizeof(buf), &clientaddr);
-+ pktlen = red_recv_udp_pkt(fd, buf.raw, sizeof(buf), &clientaddr, NULL);
- if (pktlen == -1)
- return;
-
-diff --git a/redudp.c b/redudp.c
-index 9516a50..262af3e 100644
---- a/redudp.c
-+++ b/redudp.c
-@@ -15,6 +15,7 @@
- */
-
- #include <stdlib.h>
-+#include <search.h>
- #include <string.h>
- #include <sys/types.h>
- #include <sys/uio.h>
-@@ -33,30 +34,157 @@
- #include "redudp.h"
-
- #define redudp_log_error(client, prio, msg...) \
-- redsocks_log_write_plain(__FILE__, __LINE__, __func__, 0, &(client)->clientaddr, &(client)->instance->config.destaddr, prio, ## msg)
-+ redsocks_log_write_plain(__FILE__, __LINE__, __func__, 0, &(client)->clientaddr, get_destaddr(client), prio, ## msg)
- #define redudp_log_errno(client, prio, msg...) \
-- redsocks_log_write_plain(__FILE__, __LINE__, __func__, 1, &(client)->clientaddr, &(client)->instance->config.destaddr, prio, ## msg)
-+ redsocks_log_write_plain(__FILE__, __LINE__, __func__, 1, &(client)->clientaddr, get_destaddr(client), prio, ## msg)
-
- static void redudp_pkt_from_socks(int fd, short what, void *_arg);
- static void redudp_drop_client(redudp_client *client);
- static void redudp_fini_instance(redudp_instance *instance);
- static int redudp_fini();
-+static int redudp_transparent(int fd);
-
- typedef struct redudp_expected_assoc_reply_t {
- socks5_reply h;
- socks5_addr_ipv4 ip;
- } PACKED redudp_expected_assoc_reply;
-
-+struct bound_udp4_key {
-+ struct in_addr sin_addr;
-+ uint16_t sin_port;
-+};
-+
-+struct bound_udp4 {
-+ struct bound_udp4_key key;
-+ int ref;
-+ int fd;
-+};
-+
- /***********************************************************************
- * Helpers
- */
-+// TODO: separate binding to privileged process (this operation requires uid-0)
-+static void* root_bound_udp4 = NULL; // to avoid two binds to same IP:port
-+
-+static int bound_udp4_cmp(const void *a, const void *b)
-+{
-+ return memcmp(a, b, sizeof(struct bound_udp4_key));
-+}
-+
-+static void bound_udp4_mkkey(struct bound_udp4_key *key, const struct sockaddr_in *addr)
-+{
-+ memset(key, 0, sizeof(*key));
-+ key->sin_addr = addr->sin_addr;
-+ key->sin_port = addr->sin_port;
-+}
-+
-+static int bound_udp4_get(const struct sockaddr_in *addr)
-+{
-+ struct bound_udp4_key key;
-+ struct bound_udp4 *node, **pnode;
-+
-+ bound_udp4_mkkey(&key, addr);
-+ // I assume, that memory allocation for lookup is awful, so I use
-+ // tfind/tsearch pair instead of tsearch/check-result.
-+ pnode = tfind(&key, &root_bound_udp4, bound_udp4_cmp);
-+ if (pnode) {
-+ assert((*pnode)->ref > 0);
-+ (*pnode)->ref++;
-+ return (*pnode)->fd;
-+ }
-+
-+ node = calloc(1, sizeof(*node));
-+ if (!node) {
-+ log_errno(LOG_ERR, "calloc");
-+ goto fail;
-+ }
-+
-+ node->key = key;
-+ node->ref = 1;
-+ node->fd = socket(AF_INET, SOCK_DGRAM, 0);
-+ if (node->fd == -1) {
-+ log_errno(LOG_ERR, "socket");
-+ goto fail;
-+ }
-+
-+ if (0 != redudp_transparent(node->fd))
-+ goto fail;
-+
-+ if (0 != bind(node->fd, (struct sockaddr*)addr, sizeof(*addr))) {
-+ log_errno(LOG_ERR, "bind");
-+ goto fail;
-+ }
-+
-+ pnode = tsearch(node, &root_bound_udp4, bound_udp4_cmp);
-+ if (!pnode) {
-+ log_errno(LOG_ERR, "tsearch(%p) == %p", node, pnode);
-+ goto fail;
-+ }
-+ assert(node == *pnode);
-+
-+ return node->fd;
-+
-+fail:
-+ if (node) {
-+ if (node->fd != -1)
-+ redsocks_close(node->fd);
-+ free(node);
-+ }
-+ return -1;
-+}
-+
-+static void bound_udp4_put(const struct sockaddr_in *addr)
-+{
-+ struct bound_udp4_key key;
-+ struct bound_udp4 **pnode, *node;
-+ void *parent;
-+
-+ bound_udp4_mkkey(&key, addr);
-+ pnode = tfind(&key, &root_bound_udp4, bound_udp4_cmp);
-+ assert(pnode && (*pnode)->ref > 0);
-+
-+ node = *pnode;
-+
-+ node->ref--;
-+ if (node->ref)
-+ return;
-+
-+ parent = tdelete(node, &root_bound_udp4, bound_udp4_cmp);
-+ assert(parent);
-+
-+ redsocks_close(node->fd); // expanding `pnode` to avoid use after free
-+ free(node);
-+}
-+
-+static int redudp_transparent(int fd)
-+{
-+ int on = 1;
-+ int error = setsockopt(fd, SOL_IP, IP_TRANSPARENT, &on, sizeof(on));
-+ if (error)
-+ log_errno(LOG_ERR, "setsockopt(..., SOL_IP, IP_TRANSPARENT)");
-+ return error;
-+}
-+
-+static int do_tproxy(redudp_instance* instance)
-+{
-+ return instance->config.destaddr.sin_addr.s_addr == 0;
-+}
-+
-+static struct sockaddr_in* get_destaddr(redudp_client *client)
-+{
-+ if (do_tproxy(client->instance))
-+ return &client->destaddr;
-+ else
-+ return &client->instance->config.destaddr;
-+}
-+
- static void redudp_fill_preamble(socks5_udp_preabmle *preamble, redudp_client *client)
- {
- preamble->reserved = 0;
- preamble->frag_no = 0; /* fragmentation is not supported */
- preamble->addrtype = socks5_addrtype_ipv4;
-- preamble->ip.addr = client->instance->config.destaddr.sin_addr.s_addr;
-- preamble->ip.port = client->instance->config.destaddr.sin_port;
-+ preamble->ip.addr = get_destaddr(client)->sin_addr.s_addr;
-+ preamble->ip.port = get_destaddr(client)->sin_port;
- }
-
- static struct evbuffer* socks5_mkmethods_plain_wrapper(void *p)
-@@ -104,6 +232,8 @@ static void redudp_drop_client(redudp_client *client)
- redudp_log_errno(client, LOG_ERR, "event_del");
- redsocks_close(fd);
- }
-+ if (client->sender_fd != -1)
-+ bound_udp4_put(&client->destaddr);
- list_for_each_entry_safe(q, tmp, &client->queue, list) {
- list_del(&q->list);
- free(q);
-@@ -344,7 +474,8 @@ static void redudp_relay_connected(struct bufferevent *buffev, void *_arg)
- redudp_client *client = _arg;
- int do_password = socks5_is_valid_cred(client->instance->config.login, client->instance->config.password);
- int error;
-- redudp_log_error(client, LOG_DEBUG, "<trace>");
-+ char relayaddr_str[RED_INET_ADDRSTRLEN];
-+ redudp_log_error(client, LOG_DEBUG, "via %s", red_inet_ntop(&client->instance->config.relayaddr, relayaddr_str, sizeof(relayaddr_str)));
-
- if (!red_is_socket_connected_ok(buffev)) {
- redudp_log_errno(client, LOG_NOTICE, "red_is_socket_connected_ok");
-@@ -382,7 +513,7 @@ static void redudp_timeout(int fd, short what, void *_arg)
- redudp_drop_client(client);
- }
-
--static void redudp_first_pkt_from_client(redudp_instance *self, struct sockaddr_in *clientaddr, char *buf, size_t pktlen)
-+static void redudp_first_pkt_from_client(redudp_instance *self, struct sockaddr_in *clientaddr, struct sockaddr_in *destaddr, char *buf, size_t pktlen)
- {
- redudp_client *client = calloc(1, sizeof(*client));
-
-@@ -395,9 +526,13 @@ static void redudp_first_pkt_from_client(redudp_instance *self, struct sockaddr_
- INIT_LIST_HEAD(&client->queue);
- client->instance = self;
- memcpy(&client->clientaddr, clientaddr, sizeof(*clientaddr));
-+ if (destaddr)
-+ memcpy(&client->destaddr, destaddr, sizeof(client->destaddr));
- evtimer_set(&client->timeout, redudp_timeout, client);
- // XXX: self->relay_ss->init(client);
-
-+ client->sender_fd = -1; // it's postponed until socks-server replies to avoid trivial DoS
-+
- client->relay = red_connect_relay(&client->instance->config.relayaddr,
- redudp_relay_connected, redudp_relay_error, client);
- if (!client->relay)
-@@ -431,7 +566,7 @@ static void redudp_pkt_from_socks(int fd, short what, void *_arg)
-
- assert(fd == EVENT_FD(&client->udprelay));
-
-- pktlen = red_recv_udp_pkt(fd, pkt.buf, sizeof(pkt.buf), &udprelayaddr);
-+ pktlen = red_recv_udp_pkt(fd, pkt.buf, sizeof(pkt.buf), &udprelayaddr, NULL);
- if (pktlen == -1)
- return;
-
-@@ -455,8 +590,8 @@ static void redudp_pkt_from_socks(int fd, short what, void *_arg)
- return;
- }
-
-- if (pkt.header.ip.port != client->instance->config.destaddr.sin_port ||
-- pkt.header.ip.addr != client->instance->config.destaddr.sin_addr.s_addr)
-+ if (pkt.header.ip.port != get_destaddr(client)->sin_port ||
-+ pkt.header.ip.addr != get_destaddr(client)->sin_addr.s_addr)
- {
- char buf[RED_INET_ADDRSTRLEN];
- struct sockaddr_in pktaddr = {
-@@ -472,8 +607,18 @@ static void redudp_pkt_from_socks(int fd, short what, void *_arg)
- redsocks_time(&client->last_relay_event);
- redudp_bump_timeout(client);
-
-+ if (do_tproxy(client->instance) && client->sender_fd == -1) {
-+ client->sender_fd = bound_udp4_get(&client->destaddr);
-+ if (client->sender_fd == -1) {
-+ redudp_log_error(client, LOG_WARNING, "bound_udp4_get failure");
-+ return;
-+ }
-+ }
-+
- fwdlen = pktlen - sizeof(pkt.header);
-- outgoing = sendto(EVENT_FD(&client->instance->listener),
-+ outgoing = sendto(do_tproxy(client->instance)
-+ ? client->sender_fd
-+ : EVENT_FD(&client->instance->listener),
- pkt.buf + sizeof(pkt.header), fwdlen, 0,
- (struct sockaddr*)&client->clientaddr, sizeof(client->clientaddr));
- if (outgoing != fwdlen) {
-@@ -486,18 +631,21 @@ static void redudp_pkt_from_socks(int fd, short what, void *_arg)
- static void redudp_pkt_from_client(int fd, short what, void *_arg)
- {
- redudp_instance *self = _arg;
-- struct sockaddr_in clientaddr;
-+ struct sockaddr_in clientaddr, destaddr, *pdestaddr;
- char buf[0xFFFF]; // UDP packet can't be larger then that
- ssize_t pktlen;
- redudp_client *tmp, *client = NULL;
-
-+ pdestaddr = do_tproxy(self) ? &destaddr : NULL;
-+
- assert(fd == EVENT_FD(&self->listener));
-- pktlen = red_recv_udp_pkt(fd, buf, sizeof(buf), &clientaddr);
-+ pktlen = red_recv_udp_pkt(fd, buf, sizeof(buf), &clientaddr, pdestaddr);
- if (pktlen == -1)
- return;
-
- // TODO: this lookup may be SLOOOOOW.
- list_for_each_entry(tmp, &self->clients, list) {
-+ // TODO: check destaddr
- if (0 == memcmp(&clientaddr, &tmp->clientaddr, sizeof(clientaddr))) {
- client = tmp;
- break;
-@@ -515,7 +663,7 @@ static void redudp_pkt_from_client(int fd, short what, void *_arg)
- }
- }
- else {
-- redudp_first_pkt_from_client(self, &clientaddr, buf, pktlen);
-+ redudp_first_pkt_from_client(self, &clientaddr, pdestaddr, buf, pktlen);
- }
- }
-
-@@ -554,7 +702,6 @@ static int redudp_onenter(parser_section *section)
- instance->config.relayaddr.sin_family = AF_INET;
- instance->config.relayaddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
- instance->config.destaddr.sin_family = AF_INET;
-- instance->config.destaddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
- instance->config.max_pktqueue = 5;
- instance->config.udp_timeout = 30;
- instance->config.udp_timeout_stream = 180;
-@@ -614,6 +761,28 @@ static int redudp_init_instance(redudp_instance *instance)
- goto fail;
- }
-
-+ if (do_tproxy(instance)) {
-+ int on = 1;
-+ char buf[RED_INET_ADDRSTRLEN];
-+ // iptables TPROXY target does not send packets to non-transparent sockets
-+ if (0 != redudp_transparent(fd))
-+ goto fail;
-+
-+ error = setsockopt(fd, SOL_IP, IP_RECVORIGDSTADDR, &on, sizeof(on));
-+ if (error) {
-+ log_errno(LOG_ERR, "setsockopt(listener, SOL_IP, IP_RECVORIGDSTADDR)");
-+ goto fail;
-+ }
-+
-+ log_error(LOG_DEBUG, "redudp @ %s: TPROXY", red_inet_ntop(&instance->config.bindaddr, buf, sizeof(buf)));
-+ }
-+ else {
-+ char buf1[RED_INET_ADDRSTRLEN], buf2[RED_INET_ADDRSTRLEN];
-+ log_error(LOG_DEBUG, "redudp @ %s: destaddr=%s",
-+ red_inet_ntop(&instance->config.bindaddr, buf1, sizeof(buf1)),
-+ red_inet_ntop(&instance->config.destaddr, buf2, sizeof(buf2)));
-+ }
-+
- error = bind(fd, (struct sockaddr*)&instance->config.bindaddr, sizeof(instance->config.bindaddr));
- if (error) {
- log_errno(LOG_ERR, "bind");
-diff --git a/redudp.h b/redudp.h
-index 308bd33..3f1d9d1 100644
---- a/redudp.h
-+++ b/redudp.h
-@@ -24,6 +24,8 @@ typedef struct redudp_client_t {
- list_head list;
- redudp_instance *instance;
- struct sockaddr_in clientaddr;
-+ struct sockaddr_in destaddr;
-+ int sender_fd; // shared between several clients socket (bound to `destaddr`)
- struct event timeout;
- struct bufferevent *relay;
- struct event udprelay;
-diff --git a/utils.c b/utils.c
-index 6e1f3af..afdeea8 100644
---- a/utils.c
-+++ b/utils.c
-@@ -26,17 +26,54 @@
- #include "utils.h"
- #include "redsocks.h" // for redsocks_close
-
--int red_recv_udp_pkt(int fd, char *buf, size_t buflen, struct sockaddr_in *inaddr)
-+int red_recv_udp_pkt(int fd, char *buf, size_t buflen, struct sockaddr_in *inaddr, struct sockaddr_in *toaddr)
- {
- socklen_t addrlen = sizeof(*inaddr);
- ssize_t pktlen;
--
-- pktlen = recvfrom(fd, buf, buflen, 0, (struct sockaddr*)inaddr, &addrlen);
-+ struct msghdr msg;
-+ struct iovec io;
-+ char control[1024];
-+
-+ memset(&msg, 0, sizeof(msg));
-+ msg.msg_name = inaddr;
-+ msg.msg_namelen = sizeof(*inaddr);
-+ msg.msg_iov = &io;
-+ msg.msg_iovlen = 1;
-+ msg.msg_control = control;
-+ msg.msg_controllen = sizeof(control);
-+ io.iov_base = buf;
-+ io.iov_len = buflen;
-+
-+ pktlen = recvmsg(fd, &msg, 0);
- if (pktlen == -1) {
- log_errno(LOG_WARNING, "recvfrom");
- return -1;
- }
-
-+ if (toaddr) {
-+ memset(toaddr, 0, sizeof(*toaddr));
-+ for (struct cmsghdr* cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
-+ if (
-+ cmsg->cmsg_level == SOL_IP &&
-+ cmsg->cmsg_type == IP_ORIGDSTADDR &&
-+ cmsg->cmsg_len >= CMSG_LEN(sizeof(*toaddr))
-+ ) {
-+ struct sockaddr_in* cmsgaddr = (struct sockaddr_in*)CMSG_DATA(cmsg);
-+ char buf[RED_INET_ADDRSTRLEN];
-+ log_error(LOG_DEBUG, "IP_ORIGDSTADDR: %s", red_inet_ntop(cmsgaddr, buf, sizeof(buf)));
-+ memcpy(toaddr, cmsgaddr, sizeof(*toaddr));
-+ }
-+ else {
-+ log_error(LOG_WARNING, "unexepcted cmsg (level,type) = (%d,%d)",
-+ cmsg->cmsg_level, cmsg->cmsg_type);
-+ }
-+ }
-+ if (toaddr->sin_family != AF_INET) {
-+ log_error(LOG_WARNING, "(SOL_IP, IP_ORIGDSTADDR) not found");
-+ return -1;
-+ }
-+ }
-+
- if (addrlen != sizeof(*inaddr)) {
- log_error(LOG_WARNING, "unexpected address length %u instead of %zu", addrlen, sizeof(*inaddr));
- return -1;
-diff --git a/utils.h b/utils.h
-index d3af00f..c2277e9 100644
---- a/utils.h
-+++ b/utils.h
-@@ -44,7 +44,7 @@ char *redsocks_evbuffer_readline(struct evbuffer *buf);
- struct bufferevent* red_connect_relay(struct sockaddr_in *addr, evbuffercb writecb, everrorcb errorcb, void *cbarg);
- int red_socket_geterrno(struct bufferevent *buffev);
- int red_is_socket_connected_ok(struct bufferevent *buffev);
--int red_recv_udp_pkt(int fd, char *buf, size_t buflen, struct sockaddr_in *inaddr);
-+int red_recv_udp_pkt(int fd, char *buf, size_t buflen, struct sockaddr_in *fromaddr, struct sockaddr_in *toaddr);
-
- int fcntl_nonblock(int fd);
-
---
-1.9.1
-
+++ /dev/null
-From b60b492602448b59aea194afd4991910d3613e5c Mon Sep 17 00:00:00 2001
-From: Cody Schafer <jmesmon@gmail.com>
-Date: Tue, 24 Apr 2012 04:33:13 -0500
-Subject: [PATCH 04/12] Fix transposition of memset parameters.
-
----
- utils.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/utils.c b/utils.c
-index afdeea8..31c6894 100644
---- a/utils.c
-+++ b/utils.c
-@@ -222,7 +222,7 @@ char *red_inet_ntop(const struct sockaddr_in* sa, char* buffer, size_t buffer_si
-
- assert(buffer_size >= sizeof(placeholder));
-
-- memset(buffer, buffer_size, 0);
-+ memset(buffer, 0, buffer_size);
- if (sa->sin_family == AF_INET) {
- retval = inet_ntop(AF_INET, &sa->sin_addr, buffer, buffer_size);
- port = ((struct sockaddr_in*)sa)->sin_port;
---
-1.9.1
-
+++ /dev/null
-From 18e2b5ed1ffb3e7c5dfec8ff41b3027163f680ed Mon Sep 17 00:00:00 2001
-From: Leonid Evdokimov <leon@darkk.net.ru>
-Date: Wed, 12 Sep 2012 02:05:39 +0400
-Subject: [PATCH 09/12] Fix compilation on Ubuntu 10.04 LTS and (hopefully)
- Debian squeeze[1]
-
-fixes #28, fixes #22, fixes #24
-[1] current "stable" release
----
- libc-compat.h | 25 +++++++++++++++++++++++++
- libevent-compat.h | 11 +++++++++++
- redsocks.c | 1 +
- redudp.c | 1 +
- utils.c | 1 +
- 5 files changed, 39 insertions(+)
- create mode 100644 libc-compat.h
- create mode 100644 libevent-compat.h
-
-diff --git a/libc-compat.h b/libc-compat.h
-new file mode 100644
-index 0000000..adcf63b
---- /dev/null
-+++ b/libc-compat.h
-@@ -0,0 +1,25 @@
-+#ifndef UUID_67C91670_FCCB_4855_BDF7_609F1EECB8B4
-+#define UUID_67C91670_FCCB_4855_BDF7_609F1EECB8B4
-+
-+/* all these definitions, are included into bits/in.h from libc6-dev 2.15-0ubuntu10
-+ * from Ubuntu 12.04 and is not included into libc6-dev 2.11.1-0ubuntu7.10 from
-+ * Ubuntu 10.04.
-+ * linux/in.h is not included directly because of lots of redefinitions,
-+ * extracting single value from linux/in.h is not done because it looks like
-+ * autotools reinvention */
-+#ifndef IP_ORIGDSTADDR
-+# warning Using hardcoded value for IP_ORIGDSTADDR as libc headers do not define it.
-+# define IP_ORIGDSTADDR 20
-+#endif
-+
-+#ifndef IP_RECVORIGDSTADDR
-+# warning Using hardcoded value for IP_RECVORIGDSTADDR as libc headers do not define it.
-+# define IP_RECVORIGDSTADDR IP_ORIGDSTADDR
-+#endif
-+
-+#ifndef IP_TRANSPARENT
-+# warning Using hardcoded value for IP_TRANSPARENT as libc headers do not define it.
-+# define IP_TRANSPARENT 19
-+#endif
-+
-+#endif // 67C91670_FCCB_4855_BDF7_609F1EECB8B4
-diff --git a/libevent-compat.h b/libevent-compat.h
-new file mode 100644
-index 0000000..a7f1ca1
---- /dev/null
-+++ b/libevent-compat.h
-@@ -0,0 +1,11 @@
-+#ifndef UUID_FC148CFA_5ECC_488E_8A62_CD39406C9F1E
-+#define UUID_FC148CFA_5ECC_488E_8A62_CD39406C9F1E
-+
-+/* evutil_socket_t is macros in libevent-2.0, not typedef, libevent-1.4 is
-+ * still supported because of Ubuntu 10.04 LTS */
-+#ifndef evutil_socket_t
-+# warning Using hardcoded value for evutil_socket_t as libevent headers do not define it.
-+# define evutil_socket_t int
-+#endif
-+
-+#endif // FC148CFA_5ECC_488E_8A62_CD39406C9F1E
-diff --git a/redsocks.c b/redsocks.c
-index ba5eab2..878576f 100644
---- a/redsocks.c
-+++ b/redsocks.c
-@@ -33,6 +33,7 @@
- #include "base.h"
- #include "redsocks.h"
- #include "utils.h"
-+#include "libevent-compat.h"
-
-
- #define REDSOCKS_RELAY_HALFBUFF 4096
-diff --git a/redudp.c b/redudp.c
-index 262af3e..05460dc 100644
---- a/redudp.c
-+++ b/redudp.c
-@@ -32,6 +32,7 @@
- #include "main.h"
- #include "redsocks.h"
- #include "redudp.h"
-+#include "libc-compat.h"
-
- #define redudp_log_error(client, prio, msg...) \
- redsocks_log_write_plain(__FILE__, __LINE__, __func__, 0, &(client)->clientaddr, get_destaddr(client), prio, ## msg)
-diff --git a/utils.c b/utils.c
-index 31c6894..7de3969 100644
---- a/utils.c
-+++ b/utils.c
-@@ -25,6 +25,7 @@
- #include "log.h"
- #include "utils.h"
- #include "redsocks.h" // for redsocks_close
-+#include "libc-compat.h"
-
- int red_recv_udp_pkt(int fd, char *buf, size_t buflen, struct sockaddr_in *inaddr, struct sockaddr_in *toaddr)
- {
---
-1.9.1
-
Last-Update: 2013-04-23
--- a/main.c
+++ b/main.c
-@@ -39,7 +39,7 @@
+@@ -39,7 +39,7 @@ app_subsys *subsystems[] = {
&dnstc_subsys,
};
include $(TOPDIR)/rules.mk
PKG_NAME:=rsync
-PKG_VERSION:=3.1.1
-PKG_RELEASE:=2
+PKG_VERSION:=3.1.2
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://rsync.samba.org/ftp/rsync/src
-PKG_MD5SUM:=43bd6676f0b404326eee2d63be3cdcfe
+PKG_MD5SUM:=0f758d7e000c0f7f7d3792610fad70cb
PKG_MAINTAINER:=Maxim Storchak <m.storchak@gmail.com>
PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILES:=COPYING
+++ /dev/null
-From: Wayne Davison <wayned@samba.org>
-Date: Wed, 31 Dec 2014 20:41:03 +0000 (-0800)
-Subject: Complain if an inc-recursive path is not right for its dir.
-X-Git-Url: https://git.samba.org/?p=rsync.git;a=commitdiff_plain;h=962f8b90045ab331fc04c9e65f80f1a53e68243b
-
-Complain if an inc-recursive path is not right for its dir.
-This ensures that a malicious sender can't use a just-sent
-symlink as a trasnfer path.
----
-
-diff --git a/flist.c b/flist.c
-index c24672e..92e4b65 100644
---- a/flist.c
-+++ b/flist.c
-@@ -2435,8 +2435,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
- return flist;
- }
-
--struct file_list *recv_file_list(int f)
-+struct file_list *recv_file_list(int f, int dir_ndx)
- {
-+ const char *good_dirname = NULL;
- struct file_list *flist;
- int dstart, flags;
- int64 start_read;
-@@ -2492,6 +2493,23 @@ struct file_list *recv_file_list(int f)
- flist_expand(flist, 1);
- file = recv_file_entry(f, flist, flags);
-
-+ if (inc_recurse) {
-+ static const char empty_dir[] = "\0";
-+ const char *cur_dir = file->dirname ? file->dirname : empty_dir;
-+ if (relative_paths && *cur_dir == '/')
-+ cur_dir++;
-+ if (cur_dir != good_dirname) {
-+ const char *d = dir_ndx >= 0 ? f_name(dir_flist->files[dir_ndx], NULL) : empty_dir;
-+ if (strcmp(cur_dir, d) != 0) {
-+ rprintf(FERROR,
-+ "ABORTING due to invalid dir prefix from sender: %s (should be: %s)\n",
-+ cur_dir, d);
-+ exit_cleanup(RERR_PROTOCOL);
-+ }
-+ good_dirname = cur_dir;
-+ }
-+ }
-+
- if (S_ISREG(file->mode)) {
- /* Already counted */
- } else if (S_ISDIR(file->mode)) {
-@@ -2615,7 +2633,7 @@ void recv_additional_file_list(int f)
- rprintf(FINFO, "[%s] receiving flist for dir %d\n",
- who_am_i(), ndx);
- }
-- flist = recv_file_list(f);
-+ flist = recv_file_list(f, ndx);
- flist->parent_ndx = ndx;
- }
- }
-diff --git a/io.c b/io.c
-index b9a9bd0..a868fa9 100644
---- a/io.c
-+++ b/io.c
-@@ -1685,7 +1685,7 @@ void wait_for_receiver(void)
- rprintf(FINFO, "[%s] receiving flist for dir %d\n",
- who_am_i(), ndx);
- }
-- flist = recv_file_list(iobuf.in_fd);
-+ flist = recv_file_list(iobuf.in_fd, ndx);
- flist->parent_ndx = ndx;
- #ifdef SUPPORT_HARD_LINKS
- if (preserve_hard_links)
-diff --git a/main.c b/main.c
-index e7a13f7..713b818 100644
---- a/main.c
-+++ b/main.c
-@@ -1009,7 +1009,7 @@ static void do_server_recv(int f_in, int f_out, int argc, char *argv[])
- filesfrom_fd = -1;
- }
-
-- flist = recv_file_list(f_in);
-+ flist = recv_file_list(f_in, -1);
- if (!flist) {
- rprintf(FERROR,"server_recv: recv_file_list error\n");
- exit_cleanup(RERR_FILESELECT);
-@@ -1183,7 +1183,7 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[])
-
- if (write_batch && !am_server)
- start_write_batch(f_in);
-- flist = recv_file_list(f_in);
-+ flist = recv_file_list(f_in, -1);
- if (inc_recurse && file_total == 1)
- recv_additional_file_list(f_in);
-
-diff --git a/rsync.c b/rsync.c
-index 68ff6b1..c3ecc51 100644
---- a/rsync.c
-+++ b/rsync.c
-@@ -364,7 +364,7 @@ int read_ndx_and_attrs(int f_in, int f_out, int *iflag_ptr, uchar *type_ptr,
- }
- /* Send all the data we read for this flist to the generator. */
- start_flist_forward(ndx);
-- flist = recv_file_list(f_in);
-+ flist = recv_file_list(f_in, ndx);
- flist->parent_ndx = ndx;
- stop_flist_forward();
- }
include $(TOPDIR)/rules.mk
PKG_NAME:=rsyslog
-PKG_VERSION:=8.14.0
+PKG_VERSION:=8.16.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.rsyslog.com/files/download/rsyslog/
-PKG_MD5SUM:=9862b08fd8d13753c13d7f9d86ec8f4e
+PKG_MD5SUM:=52916045c07ebbd3ee77c39e8465bc4d
PKG_MAINTAINER:=Dov Murik <dmurik@us.ibm.com>
PKG_LICENSE:=GPL-3.0
include $(TOPDIR)/rules.mk
PKG_NAME:=scapy
-PKG_VERSION:=2.2.0
+PKG_VERSION:=2.3.1
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=PKG-INFO
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).zip
PKG_SOURCE_URL:=https://bitbucket.org/secdev/scapy/downloads/
-PKG_MD5SUM:=d68903c5d877820026dc544caa0b5d3c
+PKG_MD5SUM:=a30d828e59801d1d092219b349f1da9e
PKG_BUILD_DEPENDS:=python python-setuptools
menu "Configuration"
depends on PACKAGE_snort
-config SNORT_MYSQL
- bool "Enable MySQL support"
- default n
- help
- This option enables support for logging to a MySQL database.
- Disabled by default.
-
-config SNORT_PGSQL
- bool "Enable PostgreSQL support"
- default n
- help
- This option enables support for logging to a PostgreSQL database.
- Disabled by default.
-
config SNORT_LZMA
bool "Enable LZMA support"
default n
PKG_NAME:=snort
PKG_VERSION:=2.9.7.2
-PKG_RELEASE:=3
+PKG_RELEASE:=4
PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=Luka Perkov <luka@openwrt.org>
SUBMENU:=Firewall
SECTION:=net
CATEGORY:=Network
- DEPENDS:=+libdaq +libdnet +libopenssl +libpcap +libpcre +libpthread +libuuid +zlib +SNORT_MYSQL:libmysqlclient +SNORT_PGSQL:libpq +SNORT_PGSQL:libuuid +SNORT_LZMA:liblzma
+ DEPENDS:=+libdaq +libdnet +libopenssl +libpcap +libpcre +libpthread +libuuid +zlib +SNORT_LZMA:liblzma
TITLE:=Lightweight Network Intrusion Detection System
URL:=http://www.snort.org/
MENU:=1
--with-daq-libraries="$(STAGING_DIR)/usr/lib" \
--disable-static-daq
-ifeq ($(CONFIG_SNORT_MYSQL),)
-CONFIGURE_ARGS += \
- --without-mysql
-endif
-
-ifeq ($(CONFIG_PGSQL),)
-CONFIGURE_ARGS += \
- --without-postgresql
-endif
-
ifeq ($(CONFIG_SNORT_LZMA),)
CONFIGURE_ARGS += \
--disable-lzma
endif
CONFIGURE_VARS += \
- CPPFLAGS="$$$$CPPFLAGS -I$(STAGING_DIR)/usr/include/mysql" \
- LDFLAGS="$$$$LDFLAGS -L$(STAGING_DIR)/usr/lib/mysql" \
PATH="$(STAGING_DIR)/usr/lib/libnet-1.0.x/bin:$$$$PATH"
MAKE_FLAGS += \
include $(TOPDIR)/rules.mk
PKG_NAME:=sqm-scripts
-PKG_SOURCE_VERSION:=b761c3d39fadd6b868e9417595ba4260c047bcd2
-PKG_VERSION:=1.0.4
+PKG_SOURCE_VERSION:=56677e61a0d410d744e0382c35980dd44aaa072b
+PKG_VERSION:=1.0.7
PKG_RELEASE:=1
PKG_LICENSE:=GPLv2
define Package/sqm-scripts
SECTION:=net
CATEGORY:=Base system
- DEPENDS:=+tc +kmod-sched +kmod-ifb iptables +ip \
+ DEPENDS:=+tc +kmod-sched +kmod-ifb +iptables \
+iptables-mod-ipopt +iptables-mod-conntrack-extra
TITLE:=SQM Scripts (QoS)
PKGARCH:=all
include $(TOPDIR)/rules.mk
PKG_NAME:=squid
-PKG_VERSION:=3.5.9
+PKG_VERSION:=3.5.12
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://www.squid-cache.org/Versions/v3/3.5/
-PKG_MD5SUM:=fe7306a90a0ba2fc906e9a8c741cc8ea
+PKG_MD5SUM:=50016bf6e2d3a3a186a6c7236d251f63
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1
+# uses libcom_err.la
+PKG_BUILD_DEP:=libext2fs
+
include $(INCLUDE_DIR)/package.mk
define Package/squid/Default
#
-# Copyright (C) 2010-2014 OpenWrt.org
+# Copyright (C) 2010-2015 OpenWrt.org
# Copyright (C) 2010 segal.di.ubi.pt
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
-#
include $(TOPDIR)/rules.mk
PKG_NAME:=sshtunnel
-PKG_VERSION:=3
-PKG_RELEASE:=3
+PKG_VERSION:=4
+PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0+
PKG_MAINTAINER:=Nuno Goncalves <nunojpg@gmail.com>
define Package/sshtunnel/install
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/sshtunnel.init $(1)/etc/init.d/sshtunnel
- $(INSTALL_DIR) $(1)/usr/bin
- $(INSTALL_BIN) ./files/sshtunnel.sh $(1)/usr/bin/
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DATA) ./files/uci_sshtunnel $(1)/etc/config/sshtunnel
endef
#!/bin/sh /etc/rc.common
+#
+# Copyright (C) 2010-2015 OpenWrt.org
+# Copyright (C) 2010 segal.di.ubi.pt
+#
START=99
STOP=01
+USE_PROCD=1
-PIDFILE="/tmp/run/sshtunnel"
+PROG=/usr/bin/ssh
+_log() {
+ logger -p daemon.info -t sshtunnel "$@"
+}
+
+_err() {
+ logger -p daemon.err -t sshtunnel "$@"
+}
append_params() {
- local p; local v; local args;
+ local p v args
for p in $*; do
eval "v=\$$p"
[ -n "$v" ] && args="$args -o $p=$v"
done
-
+
ARGS_options="${args# *}"
}
eval "$varname=\$new"
}
+validate_server_section() {
+ uci_validate_section sshtunnel server "$1" \
+ 'user:string(1)' \
+ 'hostname:host' \
+ 'port:port' \
+ 'retrydelay:min(1):60' \
+ 'PKCS11Provider:file' \
+ 'CheckHostIP:or("yes", "no")' \
+ 'Compression:or("yes", "no")' \
+ 'CompressionLevel:range(1,9)' \
+ 'IdentityFile:file' \
+ 'LogLevel:or("QUIET", "FATAL", "ERROR", "INFO", "VERBOSE", "DEBUG", "DEBUG1", "DEBUG2", "DEBUG3"):INFO' \
+ 'ServerAliveCountMax:min(1)' \
+ 'ServerAliveInterval:min(1)' \
+ 'StrictHostKeyChecking:or("yes", "no")' \
+ 'TCPKeepAlive:or("yes", "no")' \
+ 'VerifyHostKeyDNS:or("yes", "no")'
+}
+
+validate_tunnelR_section() {
+ uci_validate_section sshtunnel tunnelR "$1" \
+ 'remoteaddress:or(host, "*"):*' \
+ 'remoteport:port' \
+ 'localaddress:host' \
+ 'localport:port'
+}
+
+validate_tunnelL_section() {
+ uci_validate_section sshtunnel tunnelL "$1" \
+ 'remoteaddress:host' \
+ 'remoteport:port' \
+ 'localaddress:or(host, "*"):*' \
+ 'localport:port'
+}
+
+validate_tunnelD_section() {
+ uci_validate_section sshtunnel tunnelD "$1" \
+ 'localaddress:or(host, "*"):*' \
+ 'localport:port'
+}
+
+validate_tunnelW_section() {
+ uci_validate_section sshtunnel tunnelW "$1" \
+ 'vpntype:or("ethernet", "point-to-point"):point-to-point' \
+ 'localdev:or("any", min(1))' \
+ 'remotedev:or("any", min(1))'
+}
+
load_tunnelR() {
- config_get section_server $1 server
- [ "$server" = "$section_server" ] || return 0 # continue to read next section if this is not for the current server
- let count++ # count nr of valid sections to make sure there are at least one
-
- config_get remoteaddress $1 remoteaddress "*"
- config_get remoteport $1 remoteport
- config_get localaddress $1 localaddress
- config_get localport $1 localport
-
- [ "$remoteport" -gt 0 ] || append_string "error" "[tunnelR: $1]remoteport must be a positive integer" "; "
- [ "$localport" -gt 0 ] || append_string "error" "[tunnelR: $1]localport must be a positive integer" "; "
- [ -n "$error" ] && return 1
+ config_get section_server "$1" "server"
+
+ # continue to read next section if this is not for the current server
+ [ "$server" = "$section_server" ] || return 0
+
+ # validate and load this remote tunnel config
+ local remoteaddress remoteport localaddress localport
+ validate_tunnelR_section "$1" || { _err "tunnelR ${1}: validation failed"; return 1; }
+
+ [ -n "$remoteport" -a -n "$localport" -a -n "$remoteaddress" ] || { _err "tunnelR ${1}: missing required options"; return 1; }
+ # count nr of valid sections to make sure there are at least one
+ let count++
+
+ _log "tunnelR at ${server}: -R $remoteaddress:$remoteport:$localaddress:$localport"
append_string "ARGS_tunnels" "-R $remoteaddress:$remoteport:$localaddress:$localport"
}
load_tunnelL() {
- config_get section_server $1 server
- [ "$server" = "$section_server" ] || return 0 # continue to read next section if this is not for the current server
- let count++ # count nr of valid sections to make sure there are at least one
+ config_get section_server "$1" "server"
+
+ # continue to read next section if this is not for the current server
+ [ "$server" = "$section_server" ] || return 0
- config_get localaddress $1 localaddress "*"
- config_get localport $1 localport
- config_get remoteaddress $1 remoteaddress
- config_get remoteport $1 remoteport
+ # validate and load this remote tunnel config
+ local remoteaddress remoteport localaddress localport
+ validate_tunnelL_section "$1" || { _err "tunnelL ${1}: validation failed"; return 1; }
- [ "$remoteport" -gt 0 ] || append_string "error" "[tunnelL: $1]remoteport must be a positive integer" "; "
- [ "$localport" -gt 0 ] || append_string "error" "[tunnelL: $1]localport must be a positive integer" "; "
- [ -n "$error" ] && return 1
+ [ -n "$remoteport" -a -n "$localport" -a -n "$remoteaddress" ] || { _err "tunnelL ${1}: missing required options"; return 1; }
+ # count nr of valid sections to make sure there are at least one
+ let count++
+
+ _log "tunnelL at ${server}: -L $localaddress:$localport:$remoteaddress:$remoteport"
append_string "ARGS_tunnels" "-L $localaddress:$localport:$remoteaddress:$remoteport"
}
load_tunnelD() {
- config_get section_server $1 server
- [ "$server" = "$section_server" ] || return 0 # continue to read next section if this is not for the current server
- let count++ # count nr of valid sections to make sure there are at least one
+ config_get section_server "$1" "server"
+
+ # continue to read next section if this is not for the current server
+ [ "$server" = "$section_server" ] || return 0
- config_get localaddress $1 localaddress "*"
- config_get localport $1 localport
+ # validate and load this remote tunnel config
+ local localaddress localport
+ validate_tunnelD_section "$1" || { _err "tunnelD ${1}: validation failed"; return 1; }
- [ "$localport" -gt 0 ] || append_string "error" "[tunnelD: $1]localport must be a positive integer" "; "
- [ -n "$error" ] && return 1
+ [ -n "$localport" ] || { _err "tunnelD ${1}: missing localport"; return 1; }
+ # count nr of valid sections to make sure there are at least one
+ let count++
+
+ _log "proxy via ${server}: -D $localaddress:$localport"
append_string "ARGS_tunnels" "-D $localaddress:$localport"
}
load_tunnelW() {
- config_get section_server $1 server
- [ "$server" = "$section_server" ] || return 0 # continue to read next section if this is not for the current server
- let count++ # count nr of valid sections to make sure there are at least one
+ config_get section_server "$1" "server"
+
+ # continue to read next section if this is not for the current server
+ [ "$server" = "$section_server" ] || return 0
+
+ # validate and load this remote tunnel config
+ local localdev remotedev vpntype
+ validate_tunnelW_section "$1" || { _err "tunnelW ${1}: validation failed"; return 1; }
+
+ [ -n "$vpntype" -a -n "$localdev" -a -n "$remotedev" ] || { _err "tunnelW $1: missing or bad options"; return 1; }
- config_get localdev $1 localdev "*"
- config_get remotedev $1 remotedev "*"
- config_get vpntype $1 vpntype "*"
+ [ "$user" == "root" ] || { _err "tunnelW ${1}: root is required for tun"; return 1; }
- [ "$vpntype" == "ethernet" ] || [ "$vpntype" == "point-to-point" ] || append_string "error" "[tunnelW: $1] vpntype must be \"ethernet\" (tap) or \"pointopoint\" (tun)" "; "
- [ "$localdev" == "any" ] || [ "$localdev" -ge 0 ] || append_string "error" "[tunnelW: $1] localdev must be an integer or \"any\"" "; "
- [ "$remotedev" == "any" ] || [ "$remotedev" -ge 0 ] || append_string "error" "[tunnelW: $1] remotedev must be an integer or \"any\"" "; "
- [ "$user" == "root" ] || logger -p user.warn -t "sshtunnel" "warning: root is required unless the tunnel device has been created manually"
- [ -n "$error" ] && return 1
+ # count nr of valid sections to make sure there are at least one
+ let count++
- append_string "ARGS_tunnels" "-w $localdev:$remotedev -o Tunnel=$vpntype"
+ _log "tunnelW to ${server}: -w $localdev:$remotedev -o Tunnel=$vpntype"
+ append_string "ARGS_tunnels" "-w $localdev:$remotedev -o Tunnel=$vpntype"
}
load_server() {
server="$1"
+ local user hostname port retrydelay PKCS11Provider CheckHostIP Compression \
+ CompressionLevel IdentityFile LogLevel ServerAliveCountMax \
+ ServerAliveInterval StrictHostKeyChecking TCPKeepAlive VerifyHostKeyDNS
- config_get user $1 user
- config_get hostname $1 hostname
- config_get port $1 port "22"
- config_get retrydelay $1 retrydelay "60"
- config_get PKCS11Provider $1 PKCS11Provider
- config_get CheckHostIP $1 CheckHostIP
- config_get Compression $1 Compression
- config_get CompressionLevel $1 CompressionLevel
- config_get IdentityFile $1 IdentityFile
- config_get LogLevel $1 LogLevel
- config_get ServerAliveCountMax $1 ServerAliveCountMax
- config_get ServerAliveInterval $1 ServerAliveInterval
- config_get StrictHostKeyChecking $1 StrictHostKeyChecking
- config_get TCPKeepAlive $1 TCPKeepAlive
- config_get VerifyHostKeyDNS $1 VerifyHostKeyDNS
-
- error=""
- [ -n "$user" ] \
- || append_string "error" "user is not set" "; "
- [ -n "$hostname" ] \
- || append_string "error" "hostname is not set" "; "
- [ "$retrydelay" -ge 1 ] \
- || append_string "error" "retrydelay must be a positive integer" "; "
- [ -z "$PKCS11Provider" -o -f "$PKCS11Provider" ] \
- || append_string "error" "PKCS11Provider must be a pkcs11 shared library accessible" "; "
- [ -z "$CheckHostIP" -o "$CheckHostIP"="yes" -o "$CheckHostIP"="no" ] \
- || append_string "error" "CheckHostIP must be 'yes' or 'no'" "; "
- [ -z "$Compression" -o "$Compression"="yes" -o "$Compression"="no" ] \
- || append_string "error" "Compression must be 'yes' or 'no'" "; "
- [ -z "$CompressionLevel" ] || [ "$CompressionLevel" -ge 1 -a "$CompressionLevel" -le 9 ] \
- || append_string "error" "CompressionLevel must be between 1 and 9" "; "
- [ -z "$IdentityFile" -o -f "$IdentityFile" ] \
- || append_string "error" "IdentityFile $IdentityFile not accessible" "; "
- [ -z "$LogLevel" -o "$LogLevel" = "QUIET" -o "$LogLevel" = "FATAL" -o "$LogLevel" = "ERROR" -o \
- "$LogLevel" = "INFO" -o "$LogLevel" = "VERBOSE" -o "$LogLevel" = "DEBUG" -o \
- "$LogLevel" = "DEBUG1" -o "$LogLevel" = "DEBUG2" -o "$LogLevel" = "DEBUG3" ] \
- || append_string "error" "LogLevel is invalid" "; "
- [ -z "$ServerAliveCountMax" ] || [ "$ServerAliveCountMax" -ge 1 ] \
- || append_string "error" "ServerAliveCountMax must be greater or equal than 1" "; "
- [ -z "$ServerAliveInterval" ] || [ "$ServerAliveInterval" -ge 0 ] \
- || append_string "error" "ServerAliveInterval must be greater or equal than 0" "; "
- [ -z "$StrictHostKeyChecking" -o "$StrictHostKeyChecking" = "yes" -o "$StrictHostKeyChecking" = "ask" -o "$StrictHostKeyChecking" = "no" ] \
- || append_string "error" "StrictHostKeyChecking must be 'yes', 'ask' or 'no'" "; "
- [ -z "$TCPKeepAlive" -o "$TCPKeepAlive" = "yes" -o "$TCPKeepAlive" = "no" ] \
- || append_string "error" "TCPKeepAlive must be 'yes' or 'no'" "; "
- [ -z "$VerifyHostKeyDNS" -o "$VerifyHostKeyDNS" = "yes" -o "$VerifyHostKeyDNS" = "no" ] \
- || append_string "error" "VerifyHostKeyDNS must be 'yes' or 'no'" "; "
-
- [ -n "$error" ] && { logger -p user.err -t "sshtunnel" "tunnels to $server not started - $error"; return; }
-
+ validate_server_section "$server" || { _err "server ${server}: validation failed"; return 1; }
ARGS=""
ARGS_options=""
- ARGS_tunnels=""
-
+ ARGS_tunnels=""
count=0
- config_foreach load_tunnelR tunnelR && config_foreach load_tunnelL tunnelL && config_foreach load_tunnelD tunnelD
- [ -n "$error" ] && { logger -p user.err -t "sshtunnel" "tunnels to $server not started - $error"; return; }
- [ "$count" -eq 0 ] && { logger -p user.err -t "sshtunnel" "tunnels to $server not started - no tunnels defined"; return; }
- append_params CheckHostIP Compression CompressionLevel IdentityFile LogLevel PKCS11Provider ServerAliveCountMax ServerAliveInterval StrictHostKeyChecking TCPKeepAlive VerifyHostKeyDNS
+ config_foreach load_tunnelR "tunnelR"
+ config_foreach load_tunnelL "tunnelL"
+ config_foreach load_tunnelD "tunnelD"
+ config_foreach load_tunnelW "tunnelW"
+ [ "$count" -eq 0 ] && { _err "tunnels to ${server} not started - no tunnels defined"; return 1; }
+
+ append_params CheckHostIP Compression CompressionLevel IdentityFile \
+ LogLevel PKCS11Provider ServerAliveCountMax ServerAliveInterval \
+ StrictHostKeyChecking TCPKeepAlive VerifyHostKeyDNS
+
ARGS="$ARGS_options -o ExitOnForwardFailure=yes -o BatchMode=yes -nN $ARGS_tunnels -p $port $user@$hostname"
- /usr/bin/sshtunnel.sh "$ARGS" "$retrydelay" "$server" &
- echo $! >> "${PIDFILE}.pids"
- logger -p user.info -t "sshtunnel" "started tunnels to $server (pid=$!;retrydelay=$retrydelay)"
-}
-
-stop() {
- if [ -f "$PIDFILE".pids ]
- then
- logger -p user.info -t "sshtunnel" "stopping all tunnels"
-
- while read pid
- do
- kill "$pid" # kill mother process first
-
- [ -f "${PIDFILE}_${pid}.pid" ] && { # if ssh was running, kill it also (mother process could be in retry wait)
- start-stop-daemon -K -p "${PIDFILE}_${pid}.pid"
- rm "${PIDFILE}_${pid}.pid"
- }
-
- logger -p daemon.info -t "sshtunnel[$pid]" "tunnel stopped"
-
- done < "${PIDFILE}.pids"
-
- rm "${PIDFILE}.pids"
-
- logger -p user.info -t "sshtunnel" "all tunnels stopped"
- else
- logger -p user.info -t "sshtunnel" "no tunnels running"
- fi
-}
-
-start() {
- [ -f "${PIDFILE}.pids" ] && stop
-
- config_load sshtunnel
- if [ -n "$(uci show sshtunnel.@server[0])" ] # at least one server section exists
- then
- logger -p user.info -t "sshtunnel" "starting all tunnels"
- config_foreach load_server server
- logger -p user.info -t "sshtunnel" "all tunnels started"
- else
- logger -p user.info -t "sshtunnel" "no servers defined"
- fi
+ procd_open_instance "$server"
+ procd_set_param command "$PROG" $ARGS
+ procd_set_param stdout 1
+ procd_set_param stderr 1
+ procd_set_param respawn 0 "$retrydelay" 1
+ procd_close_instance
+}
+
+start_service() {
+ config_load "sshtunnel"
+ config_foreach load_server "server"
+}
+
+service_triggers() {
+ procd_add_reload_trigger "sshtunnel"
+
+ procd_open_validate
+ validate_server_section
+ validate_tunnelR_section
+ validate_tunnelL_section
+ validate_tunnelD_section
+ validate_tunnelW_section
+ procd_close_validate
}
+++ /dev/null
-#!/bin/sh
-
-PIDFILE="/tmp/run/sshtunnel"
-
-args="$1"
-retrydelay="$2"
-server="$3"
-
-while true
-do
- logger -p daemon.info -t "sshtunnel[$$][$server]" "connection started"
-
- start-stop-daemon -S -p "${PIDFILE}_${$}.pid" -mx ssh -- $args &>/tmp/log/sshtunnel_$$
-
- logger -p daemon.err -t "sshtunnel[$$][$server]" < /tmp/log/sshtunnel_$$
- rm /tmp/log/sshtunnel_$$
- logger -p daemon.info -t "sshtunnel[$$][$server]" "ssh exited with code $?, retrying in $retrydelay seconds"
- rm "${PIDFILE}_${$}.pid"
-
- sleep "$retrydelay" & wait
-done
$(MAKE) -C $(PKG_BUILD_DIR) \
CC="$(TARGET_CC)" \
CFLAGS="$(TARGET_CFLAGS)" \
+ LDFLAGS="$(TARGET_LDFLAGS)" \
USELIBCONFIG= \
USELIBWRAP= \
USELIBPCRE= \
include $(TOPDIR)/rules.mk
PKG_NAME:=strongswan
-PKG_VERSION:=5.3.3
+PKG_VERSION:=5.3.5
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://download.strongswan.org/ http://download2.strongswan.org/
-PKG_MD5SUM:=5a25f3d1c31a77ef44d14a2e7b3eaad0
+PKG_MD5SUM:=a2f9ea185f27e7f8413d4cd2ee61efe4
PKG_LICENSE:=GPL-2.0+
PKG_MAINTAINER:=Steven Barth <cyrus@openwrt.org>
ccm \
cmac \
constraints \
+ connmark \
coupling \
ctr \
curl \
gcm \
gcrypt \
gmp \
+ gmpdh \
ha \
hmac \
kernel-libipsec \
+strongswan-mod-ccm \
+strongswan-mod-cmac \
+strongswan-mod-constraints \
+ +strongswan-mod-connmark \
+strongswan-mod-coupling \
+strongswan-mod-ctr \
+strongswan-mod-curl \
+strongswan-charon \
+strongswan-mod-aes \
+strongswan-mod-attr \
+ +strongswan-mod-connmark \
+strongswan-mod-constraints \
+strongswan-mod-des \
+strongswan-mod-dnskey \
This meta-package contains only dependencies to match upstream defaults.
endef
+
+define Package/strongswan-isakmp
+$(call Package/strongswan/Default)
+ TITLE+= (isakmp)
+ DEPENDS:= +strongswan \
+ +strongswan-charon \
+ +strongswan-mod-aes \
+ +strongswan-mod-des \
+ +strongswan-mod-gmpdh \
+ +strongswan-mod-hmac \
+ +strongswan-mod-kernel-netlink \
+ +strongswan-mod-md5 \
+ +strongswan-mod-nonce \
+ +strongswan-mod-pubkey \
+ +strongswan-mod-random \
+ +strongswan-mod-sha1 \
+ +strongswan-mod-socket-default \
+ +strongswan-mod-stroke \
+ +strongswan-mod-uci \
+ +strongswan-mod-updown \
+ +strongswan-utils
+endef
+
+define Package/strongswan-isakmp/description
+$(call Package/strongswan/description/Default)
+ This meta-package contains only dependencies to establish ISAKMP /
+ IKE PSK connections, dropping other capabilities in favor of small size
+ Can fit most routers even with 4Mb flash (after removing IPv6 support).
+endef
+
+
define Package/strongswan-minimal
$(call Package/strongswan/Default)
TITLE+= (minimal)
EXTRA_LDFLAGS+= -Wl,-rpath-link,$(STAGING_DIR)/usr/lib
define Package/strongswan/conffiles
+/etc/ipsec.d/
/etc/ipsec.conf
/etc/ipsec.secrets
/etc/ipsec.user
true
endef
+define Package/strongswan-isakmp/install
+ true
+endef
+
define Package/strongswan-minimal/install
true
endef
$(eval $(call BuildPackage,strongswan-default))
$(eval $(call BuildPackage,strongswan-full))
$(eval $(call BuildPackage,strongswan-minimal))
+$(eval $(call BuildPackage,strongswan-isakmp))
$(eval $(call BuildPackage,strongswan-charon))
$(eval $(call BuildPackage,strongswan-utils))
$(eval $(call BuildPackage,strongswan-libtls))
$(eval $(call BuildPlugin,blowfish,Blowfish crypto,))
$(eval $(call BuildPlugin,ccm,CCM AEAD wrapper crypto,))
$(eval $(call BuildPlugin,cmac,CMAC crypto,))
+$(eval $(call BuildPlugin,connmark,netfilter connection marking,))
$(eval $(call BuildPlugin,constraints,advanced X509 constraint checking,))
$(eval $(call BuildPlugin,coupling,IKEv2 plugin to couple peer certificates permanently to authentication,))
$(eval $(call BuildPlugin,ctr,Counter Mode wrapper crypto,))
$(eval $(call BuildPlugin,gcm,GCM AEAD wrapper crypto,))
$(eval $(call BuildPlugin,gcrypt,libgcrypt,+PACKAGE_strongswan-mod-gcrypt:libgcrypt))
$(eval $(call BuildPlugin,gmp,libgmp,+PACKAGE_strongswan-mod-gmp:libgmp))
+$(eval $(call BuildPlugin,gmpdh,DH-Groups; no libgmp dep,))
$(eval $(call BuildPlugin,ha,high availability cluster,))
$(eval $(call BuildPlugin,hmac,HMAC crypto,))
$(eval $(call BuildPlugin,kernel-libipsec,libipsec kernel interface,))
--- /dev/null
+--- a/configure.ac
++++ b/configure.ac
+@@ -135,6 +135,7 @@ ARG_DISBL_SET([fips-prf], [disable
+ ARG_ENABL_SET([gcm], [enables the GCM AEAD wrapper crypto plugin.])
+ ARG_ENABL_SET([gcrypt], [enables the libgcrypt plugin.])
+ ARG_DISBL_SET([gmp], [disable GNU MP (libgmp) based crypto implementation plugin.])
++ARG_DISBL_SET([gmpdh], [disable GNU MP (libgmp) based static-linked crypto DH minimal implementation plugin.])
+ ARG_DISBL_SET([hmac], [disable HMAC crypto implementation plugin.])
+ ARG_ENABL_SET([md4], [enable MD4 software implementation plugin.])
+ ARG_DISBL_SET([md5], [disable MD5 software implementation plugin.])
+@@ -1312,6 +1313,7 @@ ADD_PLUGIN([gcrypt], [s ch
+ ADD_PLUGIN([af-alg], [s charon scepclient pki scripts medsrv attest nm cmd aikgen])
+ ADD_PLUGIN([fips-prf], [s charon nm cmd])
+ ADD_PLUGIN([gmp], [s charon scepclient pki scripts manager medsrv attest nm cmd aikgen])
++ADD_PLUGIN([gmpdh], [s charon scepclient pki scripts manager medsrv attest nm cmd aikgen])
+ ADD_PLUGIN([agent], [s charon nm cmd])
+ ADD_PLUGIN([keychain], [s charon cmd])
+ ADD_PLUGIN([chapoly], [s charon scripts nm cmd])
+@@ -1444,6 +1446,7 @@ AM_CONDITIONAL(USE_SHA2, test x$sha2 = x
+ AM_CONDITIONAL(USE_SHA3, test x$sha3 = xtrue)
+ AM_CONDITIONAL(USE_FIPS_PRF, test x$fips_prf = xtrue)
+ AM_CONDITIONAL(USE_GMP, test x$gmp = xtrue)
++AM_CONDITIONAL(USE_GMPDH, test x$gmpdh = xtrue)
+ AM_CONDITIONAL(USE_RDRAND, test x$rdrand = xtrue)
+ AM_CONDITIONAL(USE_AESNI, test x$aesni = xtrue)
+ AM_CONDITIONAL(USE_RANDOM, test x$random = xtrue)
+@@ -1692,6 +1695,7 @@ AC_CONFIG_FILES([
+ src/libstrongswan/plugins/sha3/Makefile
+ src/libstrongswan/plugins/fips_prf/Makefile
+ src/libstrongswan/plugins/gmp/Makefile
++ src/libstrongswan/plugins/gmpdh/Makefile
+ src/libstrongswan/plugins/rdrand/Makefile
+ src/libstrongswan/plugins/aesni/Makefile
+ src/libstrongswan/plugins/random/Makefile
+--- a/src/libstrongswan/Makefile.am
++++ b/src/libstrongswan/Makefile.am
+@@ -303,6 +303,13 @@ if MONOLITHIC
+ endif
+ endif
+
++if USE_GMPDH
++ SUBDIRS += plugins/gmpdh
++if MONOLITHIC
++ libstrongswan_la_LIBADD += plugins/gmpdh/libstrongswan-gmpdh.la
++endif
++endif
++
+ if USE_RDRAND
+ SUBDIRS += plugins/rdrand
+ if MONOLITHIC
+--- /dev/null
++++ b/src/libstrongswan/plugins/gmpdh/Makefile.am
+@@ -0,0 +1,19 @@
++AM_CPPFLAGS = \
++ -I$(top_srcdir)/src/libstrongswan
++
++AM_CFLAGS = \
++ $(PLUGIN_CFLAGS)
++
++if MONOLITHIC
++noinst_LTLIBRARIES = libstrongswan-gmpdh.la
++else
++plugin_LTLIBRARIES = libstrongswan-gmpdh.la
++endif
++
++libstrongswan_gmpdh_la_SOURCES = \
++ gmpdh_plugin.h gmpdh_plugin.c \
++ ../gmp/gmp_diffie_hellman.c ../gmp/gmp_diffie_hellman.h
++
++
++libstrongswan_gmpdh_la_LDFLAGS = -module -avoid-version -Wl,-Bstatic -Wl,-lgmp -Wl,-Bdynamic -Wl,--as-needed
++libstrongswan_gmpdh_la_LIBADD =
+--- /dev/null
++++ b/src/libstrongswan/plugins/gmpdh/gmpdh_plugin.c
+@@ -0,0 +1,101 @@
++/*
++ * Copyright (C) 2008-2009 Martin Willi
++ * Hochschule fuer Technik Rapperswil
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * for more details.
++ */
++
++#include "gmpdh_plugin.h"
++
++#include <library.h>
++#include "../gmp/gmp_diffie_hellman.h"
++
++typedef struct private_gmpdh_plugin_t private_gmpdh_plugin_t;
++
++/**
++ * private data of gmp_plugin
++ */
++struct private_gmpdh_plugin_t {
++
++ /**
++ * public functions
++ */
++ gmpdh_plugin_t public;
++};
++
++METHOD(plugin_t, get_name, char*,
++ private_gmpdh_plugin_t *this)
++{
++ return "gmpdh";
++}
++
++METHOD(plugin_t, get_features, int,
++ private_gmpdh_plugin_t *this, plugin_feature_t *features[])
++{
++ static plugin_feature_t f[] = {
++ /* DH groups */
++ PLUGIN_REGISTER(DH, gmp_diffie_hellman_create),
++ PLUGIN_PROVIDE(DH, MODP_2048_BIT),
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
++ PLUGIN_PROVIDE(DH, MODP_2048_224),
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
++ PLUGIN_PROVIDE(DH, MODP_2048_256),
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
++ PLUGIN_PROVIDE(DH, MODP_1536_BIT),
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
++ PLUGIN_PROVIDE(DH, MODP_3072_BIT),
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
++ PLUGIN_PROVIDE(DH, MODP_4096_BIT),
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
++ PLUGIN_PROVIDE(DH, MODP_6144_BIT),
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
++ PLUGIN_PROVIDE(DH, MODP_8192_BIT),
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
++ PLUGIN_PROVIDE(DH, MODP_1024_BIT),
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
++ PLUGIN_PROVIDE(DH, MODP_1024_160),
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
++ PLUGIN_PROVIDE(DH, MODP_768_BIT),
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
++ PLUGIN_REGISTER(DH, gmp_diffie_hellman_create_custom),
++ PLUGIN_PROVIDE(DH, MODP_CUSTOM),
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
++ };
++ *features = f;
++ return countof(f);
++}
++
++METHOD(plugin_t, destroy, void,
++ private_gmpdh_plugin_t *this)
++{
++ free(this);
++}
++
++/*
++ * see header file
++ */
++plugin_t *gmpdh_plugin_create()
++{
++ private_gmpdh_plugin_t *this;
++
++ INIT(this,
++ .public = {
++ .plugin = {
++ .get_name = _get_name,
++ .get_features = _get_features,
++ .destroy = _destroy,
++ },
++ },
++ );
++
++ return &this->public.plugin;
++}
++
+--- /dev/null
++++ b/src/libstrongswan/plugins/gmpdh/gmpdh_plugin.h
+@@ -0,0 +1,42 @@
++/*
++ * Copyright (C) 2008 Martin Willi
++ * Hochschule fuer Technik Rapperswil
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * for more details.
++ */
++
++/**
++ * @defgroup gmpdh_p gmpdh
++ * @ingroup plugins
++ *
++ * @defgroup gmpdh_plugin gmpdh_plugin
++ * @{ @ingroup gmpdh_p
++ */
++
++#ifndef GMPDH_PLUGIN_H_
++#define GMPDH_PLUGIN_H_
++
++#include <plugins/plugin.h>
++
++typedef struct gmpdh_plugin_t gmpdh_plugin_t;
++
++/**
++ * Plugin implementing asymmetric crypto algorithms using the GNU MP library.
++ */
++struct gmpdh_plugin_t {
++
++ /**
++ * implements plugin interface
++ */
++ plugin_t plugin;
++};
++
++#endif /** GMPDH_PLUGIN_H_ @}*/
CATEGORY:=Network
URL:=http://stgt.sourceforge.net/
TITLE:=userspace iSCSI target
- DEPENDS:=+libpthread +libaio +@KERNEL_AIO +@KERNEL_DIRECT_IO
+ DEPENDS:=+libpthread +libaio @KERNEL_AIO @KERNEL_DIRECT_IO
endef
define Package/tgt/description
include $(TOPDIR)/rules.mk
PKG_NAME:=tor
-PKG_VERSION:=0.2.6.10
+PKG_VERSION:=0.2.7.6
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://www.torproject.org/dist \
https://archive.torproject.org/tor-package-archive
-PKG_MD5SUM:=04f919e7882d1ca80f835545af562bad
+PKG_MD5SUM:=cc19107b57136a68e8c563bf2d35b072
PKG_MAINTAINER:=Hauke Mehrtens <hauke@hauke-m.de>
PKG_LICENSE_FILES:=LICENSE
#
-# Copyright (C) 2015 OpenWrt.org
+# Copyright (C) 2015-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=u2pnpd
-PKG_VERSION:=0.1
+PKG_VERSION:=0.3
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://github.com/mhei/u2pnpd/releases/download/v$(PKG_VERSION)
-PKG_MD5SUM:=a98089923d93803fa90d03a504c98b8e
+PKG_MD5SUM:=ac6f378590d3e4e38b40e4b13f03b369
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=unbound
-PKG_VERSION:=1.5.6
+PKG_VERSION:=1.5.7
PKG_RELEASE:=1
PKG_LICENSE:=BSD-3-Clause
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.unbound.net/downloads
-PKG_MD5SUM:=691a34abd8e9257dd65b70f28326c1f0
+PKG_MD5SUM:=a1253cbbb339dbca03404dcc58365d71
PKG_BUILD_DEPENDS:=libexpat
PKG_BUILD_PARALLEL:=1
diff --git a/doc/example.conf.in b/doc/example.conf.in
-index 60ed5c8..abd85f9 100644
+index ff90e3b..5c20fdf 100644
--- a/doc/example.conf.in
+++ b/doc/example.conf.in
@@ -38,6 +38,8 @@ server:
+ interface: ::0
# enable this feature to copy the source address of queries to reply.
- # Socket options are not supported on all platforms. experimental.
+ # Socket options are not supported on all platforms. experimental.
@@ -57,6 +59,7 @@ server:
# port range that can be open simultaneously. About double the
# num-queries-per-thread, or, use as many as the OS will allow you.
# buffer size for UDP port 53 incoming (SO_RCVBUF socket option).
# 0 is system default. Use 4m to catch query spikes for busy servers.
-@@ -99,18 +104,22 @@ server:
+@@ -103,18 +108,22 @@ server:
# buffer size for handling DNS data. No messages larger than this
# size can be sent or received, by UDP or TCP. In bytes.
# msg-buffer-size: 65552
+ msg-buffer-size: 8192
# the amount of memory to use for the message cache.
- # plain value in bytes or you can append k, m or G. default is "4Mb".
+ # plain value in bytes or you can append k, m or G. default is "4Mb".
# msg-cache-size: 4m
+ msg-cache-size: 100k
# if very busy, 50% queries run to completion, 50% get timeout in msec
# jostle-timeout: 200
-@@ -121,11 +130,13 @@ server:
+@@ -125,11 +134,13 @@ server:
# the amount of memory to use for the RRset cache.
- # plain value in bytes or you can append k, m or G. default is "4Mb".
+ # plain value in bytes or you can append k, m or G. default is "4Mb".
# rrset-cache-size: 4m
+ rrset-cache-size: 100k
# the time to live (TTL) value lower bound, in seconds. Default 0.
# If more than an hour could easily give trouble due to stale data.
-@@ -146,9 +157,11 @@ server:
+@@ -153,9 +164,11 @@ server:
# the number of slabs must be a power of 2.
# more slabs reduce lock contention, but fragment memory usage.
# infra-cache-slabs: 4
# Enable IPv4, "yes" or "no".
# do-ip4: yes
-@@ -181,6 +194,8 @@ server:
+@@ -188,6 +201,8 @@ server:
# access-control: ::0/0 refuse
# access-control: ::1 allow
# access-control: ::ffff:127.0.0.1 allow
# if given, a chroot(2) is done to the given directory.
# i.e. you can chroot to the working directory, for example,
-@@ -211,6 +226,7 @@ server:
+@@ -218,6 +233,7 @@ server:
# and the given username is assumed. Default is user "unbound".
# If you give "" no privileges are dropped.
# username: "@UNBOUND_USERNAME@"
+ username: ""
- # the working directory. The relative files in this config are
+ # the working directory. The relative files in this config are
# relative to this directory. If you give "" the working directory
-@@ -233,10 +249,12 @@ server:
+@@ -240,10 +256,12 @@ server:
# the pid file. Can be an absolute path outside of chroot/work dir.
# pidfile: "@UNBOUND_PIDFILE@"
+ pidfile: "/var/run/unbound.pid"
# file to read root hints from.
- # get one from ftp://FTP.INTERNIC.NET/domain/named.cache
+ # get one from https://www.internic.net/domain/named.cache
# root-hints: ""
+ root-hints: "/etc/unbound/named.cache"
# enable to not answer id.server and hostname.bind queries.
# hide-identity: no
-@@ -259,12 +277,15 @@ server:
+@@ -266,12 +284,15 @@ server:
# positive value: fetch that many targets opportunistically.
# Enclose the list of numbers between quotes ("").
# target-fetch-policy: "3 2 1 0 0"
+ target-fetch-policy: "2 1 0 0 0 0"
- # Harden against very small EDNS buffer sizes.
+ # Harden against very small EDNS buffer sizes.
# harden-short-bufsize: no
+ harden-short-bufsize: yes
# harden-large-queries: no
+ harden-large-queries: yes
- # Harden against out of zone rrsets, to avoid spoofing attempts.
+ # Harden against out of zone rrsets, to avoid spoofing attempts.
# harden-glue: yes
-@@ -345,7 +366,7 @@ server:
+@@ -367,7 +388,7 @@ server:
# you start unbound (i.e. in the system boot scripts). And enable:
# Please note usage of unbound-anchor root anchor is at your own risk
# and under the terms of our LICENSE (see that file in the source).
# File with DLV trusted keys. Same format as trust-anchor-file.
# There can be only one DLV configured, it is trusted from root down.
-@@ -431,15 +452,18 @@ server:
+@@ -456,15 +477,18 @@ server:
# the amount of memory to use for the key cache.
- # plain value in bytes or you can append k, m or G. default is "4Mb".
+ # plain value in bytes or you can append k, m or G. default is "4Mb".
# key-cache-size: 4m
+ key-cache-size: 100k
+ key-cache-slabs: 1
# the amount of memory to use for the negative cache (used for DLV).
- # plain value in bytes or you can append k, m or G. default is "1Mb".
+ # plain value in bytes or you can append k, m or G. default is "1Mb".
# neg-cache-size: 1m
+ neg-cache-size: 10k
endef
Hooks/Prepare/Pre += prepare_source_directory
-PKG_BUILD_DEPENDS:=udev
+PKG_BUILD_DEPENDS:=eudev
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
define Package/usbip
$(call Package/usbip/Default)
TITLE+= (common)
- DEPENDS+= +libwrap +kmod-usbip +udev
+ DEPENDS+= +libwrap +kmod-usbip +eudev
endef
define Package/usbip-client
define Build/Compile/vnstat
+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
$(TARGET_CONFIGURE_OPTS) \
- CFLAGS="$(TARGET_CFLAGS)"
+ CFLAGS="$(TARGET_CFLAGS)" \
+ LDFLAGS="$(TARGET_LDFLAGS)"
endef
define Build/Compile/vnstati
include $(TOPDIR)/rules.mk
PKG_NAME:=vpnc-scripts
-PKG_VERSION:=20150116
-PKG_RELEASE:=2
+PKG_VERSION:=20151220
+PKG_RELEASE:=1
include $(INCLUDE_DIR)/package.mk
[[ "$addr" != "$mask" ]] && proto_add_ipv6_address "$addr" "$mask"
fi
+ DNSMASQ_FILE="/tmp/dnsmasq.d/openconnect.$TUNDEV"
+ LOCAL_DOMAIN=$(uci get dhcp.@dnsmasq[0].domain)
+ rm -f $DNSMASQ_FILE
if [ -n "$CISCO_SPLIT_DNS" ] && [ -d "/tmp/dnsmasq.d/" ];then
SDNS=`echo $CISCO_SPLIT_DNS|sed 's/,/\n/g'`
- DNSMASQ_FILE="/tmp/dnsmasq.d/openconnect.$TUNDEV"
- rm -f $DNSMASQ_FILE
echo "$SDNS" | while read i; do
+ if [ "$i" = "$LOCAL_DOMAIN" ];then
+ continue
+ fi
if [ -n "$INTERNAL_IP4_DNS" ];then
- for dns in "$INTERNAL_IP4_DNS";do
+ for dns in $INTERNAL_IP4_DNS;do
echo "server=/$i/$dns" >> $DNSMASQ_FILE
done
fi
if [ -n "$INTERNAL_IP6_DNS" ];then
- for dns in "$INTERNAL_IP6_DNS";do
+ for dns in $INTERNAL_IP6_DNS;do
echo "server=/$i/$dns" >> $DNSMASQ_FILE
done
fi
/etc/init.d/dnsmasq restart
else
if [ -n "$INTERNAL_IP4_DNS" ];then
- for dns in "$INTERNAL_IP4_DNS";do
+ for dns in $INTERNAL_IP4_DNS;do
proto_add_dns_server "$dns"
done
fi
if [ -n "$INTERNAL_IP6_DNS" ];then
- for dns in "$INTERNAL_IP6_DNS";do
+ for dns in $INTERNAL_IP6_DNS;do
proto_add_dns_server "$dns"
done
fi
- [ -n "$CISCO_DEF_DOMAIN" ] && proto_add_dns_search "$CISCO_DEF_DOMAIN"
+ if [ -n "$CISCO_DEF_DOMAIN" ] && [ "$CISCO_DEF_DOMAIN" != "$LOCAL_DOMAIN" ];then
+ if [ -n "$INTERNAL_IP4_DNS" ];then
+ for dns in $INTERNAL_IP4_DNS;do
+ echo "server=/$CISCO_DEF_DOMAIN/$dns" >> $DNSMASQ_FILE
+ done
+ fi
+ if [ -n "$INTERNAL_IP6_DNS" ];then
+ for dns in $INTERNAL_IP6_DNS;do
+ echo "server=/$CISCO_DEF_DOMAIN/$dns" >> $DNSMASQ_FILE
+ done
+ fi
+ proto_add_dns_search "$CISCO_DEF_DOMAIN"
+ fi
fi
if [ -n "$CISCO_SPLIT_INC" ]; then
include $(TOPDIR)/rules.mk
PKG_NAME:=wget
-PKG_VERSION:=1.16.3
+PKG_VERSION:=1.17.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@GNU/$(PKG_NAME)
-PKG_MD5SUM:=d2e4455781a70140ae83b54ca594ce21
+PKG_MD5SUM:=b0d58ef4963690e71effba24c105ed52
PKG_MAINTAINER:=Maxim Storchak <m.storchak@gmail.com>
PKG_LICENSE:=GPL-3.0+
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=xl2tpd
-PKG_VERSION:=devel-20150930
+PKG_VERSION:=devel-20151125
PKG_RELEASE:=1
PKG_MAINTAINER:=Yousong Zhou <yszhou4tech@gmail.com>
PKG_LICENSE:=GPL-2.0
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/xelerance/xl2tpd.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=5faece38704ae32063abe1d25e199c03e6f44669
+PKG_SOURCE_VERSION:=e2065bf0fc22ba33001ad503c01bba01648024a8
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_INSTALL:=1
proto_l2tp_setup() {
local interface="$1"
local optfile="/tmp/l2tp/options.${interface}"
+ local ip serv_addr server host
- local ip serv_addr server
- json_get_var server server && {
- for ip in $(resolveip -t 5 "$server"); do
- ( proto_add_host_dependency "$interface" "$ip" )
- serv_addr=1
- done
- }
+ json_get_var server server
+ host="${server%:*}"
+ for ip in $(resolveip -t 5 "$host"); do
+ ( proto_add_host_dependency "$interface" "$ip" )
+ serv_addr=1
+ done
[ -n "$serv_addr" ] || {
echo "Could not resolve server address" >&2
sleep 5
IPFLAGS?= -DIP_ALLOCATION
--CFLAGS+= $(DFLAGS) -O2 -fno-builtin -Wall -DSANITY $(OSFLAGS) $(IPFLAGS)
-+OFLAGS=-O2
+-CFLAGS+= $(DFLAGS) -Os -fno-builtin -Wall -DSANITY $(OSFLAGS) $(IPFLAGS)
++OFLAGS=-Os
+CFLAGS+= $(DFLAGS) $(OFLAGS) -fno-builtin -Wall -DSANITY $(OSFLAGS) $(IPFLAGS)
HDRS=l2tp.h avp.h misc.h control.h call.h scheduler.h file.h aaa.h md5.h
OBJS=xl2tpd.o pty.o misc.o control.o avp.o call.o network.o avpsend.o scheduler.o file.o aaa.o md5.o
include $(TOPDIR)/rules.mk
PKG_NAME:=znc
-PKG_VERSION:=1.6.1
+PKG_VERSION:=1.6.2
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://znc.in/releases \
http://znc.in/releases/archive
-PKG_MD5SUM:=8e29289e6229b6d2473de202170745ab
+PKG_MD5SUM:=89f6696ed366661f7432ece343fd19d0
PKG_MAINTAINER:=Jonas Gorski <jogo@openwrt.org>
PKG_LICENSE:=Apache-2.0
define Package/znc
$(Package/znc/default)
- DEPENDS:=+libopenssl +libpthread +libstdcpp @GCC_VERSION_4_8||GCC_VERSION_4_9
+ DEPENDS:=+libopenssl +libpthread +libstdcpp
MENU:=1
endef
LIBS="-lstdc++ -lm -lssl -lcrypto $(LIBGCC_S) -lc"
CONFIGURE_ARGS += \
- --disable-c-ares \
- --disable-perl
+ --disable-charset \
+ --disable-cyrus \
+ --disable-debug \
+ --enable-largefile \
+ --disable-perl \
+ --enable-poll \
+ --disable-python \
+ --enable-ssl \
+ --disable-swig \
+ --disable-tcl \
+ --enable-tdns \
+ --enable-zlib
define Build/Configure
$(call Build/Configure/Default,)
include $(TOPDIR)/rules.mk
PKG_NAME:=forked-daapd
-PKG_VERSION:=23.2
-PKG_RELEASE:=20150622
-PKG_REV:=227017ef5ba8df921b2f1db681a46494ec296b8b
+PKG_VERSION:=23.4
+PKG_RELEASE:=20160101
+PKG_REV:=90514de7c8d9bf06b54596bc66e0668181eee25a
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_LICENSE_FILES:=COPYING
include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/nls.mk
define Package/forked-daapd
SECTION:=sound
URL:=https://github.com/ejurgensen/forked-daapd
DEPENDS:=+libgpg-error +libgcrypt +libgdbm +zlib +libexpat +libunistring \
+libevent2 +libdaemon +libantlr3c +confuse +alsa-lib +libffmpeg-full \
- +mxml +libavahi-client +sqlite3-cli +libplist +libcurl
+ +mxml +libavahi-client +sqlite3-cli +libplist +libcurl $(ICONV_DEPENDS)
endef
define Package/forked-daapd/description
\ No newline at end of file
diff --git a/src/pregen/DAAP2SQL.c b/src/pregen/DAAP2SQL.c
new file mode 100644
-index 0000000..f13209c
+index 0000000..04d6153
--- /dev/null
+++ b/src/pregen/DAAP2SQL.c
@@ -0,0 +1,975 @@
+ * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : DAAP2SQL.g
-+ * - On : 2015-06-27 19:05:20
++ * - On : 2016-01-01 12:23:43
+ * - for the tree parser : DAAP2SQLTreeParser *
+ * Editing it, at least manually, is not wise.
+ *
+ */
diff --git a/src/pregen/DAAP2SQL.h b/src/pregen/DAAP2SQL.h
new file mode 100644
-index 0000000..2b1e806
+index 0000000..e829049
--- /dev/null
+++ b/src/pregen/DAAP2SQL.h
@@ -0,0 +1,195 @@
+ * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : DAAP2SQL.g
-+ * - On : 2015-06-27 19:05:20
++ * - On : 2016-01-01 12:23:43
+ * - for the tree parser : DAAP2SQLTreeParser *
+ * Editing it, at least manually, is not wise.
+ *
\ No newline at end of file
diff --git a/src/pregen/DAAPLexer.c b/src/pregen/DAAPLexer.c
new file mode 100644
-index 0000000..b72f28a
+index 0000000..eab3ff4
--- /dev/null
+++ b/src/pregen/DAAPLexer.c
@@ -0,0 +1,1101 @@
+ * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : DAAP.g
-+ * - On : 2015-06-27 19:05:17
++ * - On : 2016-01-01 12:23:41
+ * - for the lexer : DAAPLexerLexer *
+ * Editing it, at least manually, is not wise.
+ *
+ */
diff --git a/src/pregen/DAAPLexer.h b/src/pregen/DAAPLexer.h
new file mode 100644
-index 0000000..401b214
+index 0000000..685a0bc
--- /dev/null
+++ b/src/pregen/DAAPLexer.h
@@ -0,0 +1,188 @@
+ * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : DAAP.g
-+ * - On : 2015-06-27 19:05:17
++ * - On : 2016-01-01 12:23:41
+ * - for the lexer : DAAPLexerLexer *
+ * Editing it, at least manually, is not wise.
+ *
+/* END - Note:Keep extra line feed to satisfy UNIX systems */
diff --git a/src/pregen/DAAPParser.c b/src/pregen/DAAPParser.c
new file mode 100644
-index 0000000..7a9aae9
+index 0000000..1091f05
--- /dev/null
+++ b/src/pregen/DAAPParser.c
@@ -0,0 +1,1014 @@
+ * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : DAAP.g
-+ * - On : 2015-06-27 19:05:16
++ * - On : 2016-01-01 12:23:41
+ * - for the parser : DAAPParserParser *
+ * Editing it, at least manually, is not wise.
+ *
+ */
diff --git a/src/pregen/DAAPParser.h b/src/pregen/DAAPParser.h
new file mode 100644
-index 0000000..82ce85e
+index 0000000..e206694
--- /dev/null
+++ b/src/pregen/DAAPParser.h
@@ -0,0 +1,226 @@
+ * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : DAAP.g
-+ * - On : 2015-06-27 19:05:16
++ * - On : 2016-01-01 12:23:41
+ * - for the parser : DAAPParserParser *
+ * Editing it, at least manually, is not wise.
+ *
\ No newline at end of file
diff --git a/src/pregen/RSP2SQL.c b/src/pregen/RSP2SQL.c
new file mode 100644
-index 0000000..05b54d3
+index 0000000..40958f9
--- /dev/null
+++ b/src/pregen/RSP2SQL.c
@@ -0,0 +1,2546 @@
+ * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : RSP2SQL.g
-+ * - On : 2015-06-27 19:05:19
++ * - On : 2016-01-01 12:23:43
+ * - for the tree parser : RSP2SQLTreeParser *
+ * Editing it, at least manually, is not wise.
+ *
+ */
diff --git a/src/pregen/RSP2SQL.h b/src/pregen/RSP2SQL.h
new file mode 100644
-index 0000000..a94e317
+index 0000000..08ac7bb
--- /dev/null
+++ b/src/pregen/RSP2SQL.h
@@ -0,0 +1,291 @@
+ * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : RSP2SQL.g
-+ * - On : 2015-06-27 19:05:19
++ * - On : 2016-01-01 12:23:43
+ * - for the tree parser : RSP2SQLTreeParser *
+ * Editing it, at least manually, is not wise.
+ *
\ No newline at end of file
diff --git a/src/pregen/RSPLexer.c b/src/pregen/RSPLexer.c
new file mode 100644
-index 0000000..bc4245a
+index 0000000..2e3faae
--- /dev/null
+++ b/src/pregen/RSPLexer.c
@@ -0,0 +1,4867 @@
+ * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : RSP.g
-+ * - On : 2015-06-27 19:05:18
++ * - On : 2016-01-01 12:23:42
+ * - for the lexer : RSPLexerLexer *
+ * Editing it, at least manually, is not wise.
+ *
+ */
diff --git a/src/pregen/RSPLexer.h b/src/pregen/RSPLexer.h
new file mode 100644
-index 0000000..d93f93e
+index 0000000..27bc791
--- /dev/null
+++ b/src/pregen/RSPLexer.h
@@ -0,0 +1,254 @@
+ * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : RSP.g
-+ * - On : 2015-06-27 19:05:18
++ * - On : 2016-01-01 12:23:42
+ * - for the lexer : RSPLexerLexer *
+ * Editing it, at least manually, is not wise.
+ *
+/* END - Note:Keep extra line feed to satisfy UNIX systems */
diff --git a/src/pregen/RSPParser.c b/src/pregen/RSPParser.c
new file mode 100644
-index 0000000..c0f3e2a
+index 0000000..ba8a9d2
--- /dev/null
+++ b/src/pregen/RSPParser.c
-@@ -0,0 +1,2684 @@
+@@ -0,0 +1,3152 @@
+/** \file
+ * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : RSP.g
-+ * - On : 2015-06-27 19:05:18
++ * - On : 2016-01-01 12:23:42
+ * - for the parser : RSPParserParser *
+ * Editing it, at least manually, is not wise.
+ *
+/** Bitset defining follow set for error recovery in rule state: FOLLOW_STR_in_strcrit161 */
+static ANTLR3_BITWORD FOLLOW_STR_in_strcrit161_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
+static ANTLR3_BITSET_LIST FOLLOW_STR_in_strcrit161 = { FOLLOW_STR_in_strcrit161_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_set_in_strop0 */
-+static ANTLR3_BITWORD FOLLOW_set_in_strop0_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
-+static ANTLR3_BITSET_LIST FOLLOW_set_in_strop0 = { FOLLOW_set_in_strop0_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_FIELD_in_intcrit211 */
-+static ANTLR3_BITWORD FOLLOW_FIELD_in_intcrit211_bits[] = { ANTLR3_UINT64_LIT(0x00000000001E1000) };
-+static ANTLR3_BITSET_LIST FOLLOW_FIELD_in_intcrit211 = { FOLLOW_FIELD_in_intcrit211_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_intop_in_intcrit213 */
-+static ANTLR3_BITWORD FOLLOW_intop_in_intcrit213_bits[] = { ANTLR3_UINT64_LIT(0x0000000000010000) };
-+static ANTLR3_BITSET_LIST FOLLOW_intop_in_intcrit213 = { FOLLOW_intop_in_intcrit213_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_INT_in_intcrit215 */
-+static ANTLR3_BITWORD FOLLOW_INT_in_intcrit215_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
-+static ANTLR3_BITSET_LIST FOLLOW_INT_in_intcrit215 = { FOLLOW_INT_in_intcrit215_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_FIELD_in_intcrit232 */
-+static ANTLR3_BITWORD FOLLOW_FIELD_in_intcrit232_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000800) };
-+static ANTLR3_BITSET_LIST FOLLOW_FIELD_in_intcrit232 = { FOLLOW_FIELD_in_intcrit232_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_NOT_in_intcrit234 */
-+static ANTLR3_BITWORD FOLLOW_NOT_in_intcrit234_bits[] = { ANTLR3_UINT64_LIT(0x00000000001E1000) };
-+static ANTLR3_BITSET_LIST FOLLOW_NOT_in_intcrit234 = { FOLLOW_NOT_in_intcrit234_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_intop_in_intcrit236 */
-+static ANTLR3_BITWORD FOLLOW_intop_in_intcrit236_bits[] = { ANTLR3_UINT64_LIT(0x0000000000010000) };
-+static ANTLR3_BITSET_LIST FOLLOW_intop_in_intcrit236 = { FOLLOW_intop_in_intcrit236_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_INT_in_intcrit238 */
-+static ANTLR3_BITWORD FOLLOW_INT_in_intcrit238_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
-+static ANTLR3_BITSET_LIST FOLLOW_INT_in_intcrit238 = { FOLLOW_INT_in_intcrit238_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_set_in_intop0 */
-+static ANTLR3_BITWORD FOLLOW_set_in_intop0_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
-+static ANTLR3_BITSET_LIST FOLLOW_set_in_intop0 = { FOLLOW_set_in_intop0_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_FIELD_in_datecrit292 */
-+static ANTLR3_BITWORD FOLLOW_FIELD_in_datecrit292_bits[] = { ANTLR3_UINT64_LIT(0x0000000000600000) };
-+static ANTLR3_BITSET_LIST FOLLOW_FIELD_in_datecrit292 = { FOLLOW_FIELD_in_datecrit292_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateop_in_datecrit294 */
-+static ANTLR3_BITWORD FOLLOW_dateop_in_datecrit294_bits[] = { ANTLR3_UINT64_LIT(0x0000000001810000) };
-+static ANTLR3_BITSET_LIST FOLLOW_dateop_in_datecrit294 = { FOLLOW_dateop_in_datecrit294_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_datespec_in_datecrit296 */
-+static ANTLR3_BITWORD FOLLOW_datespec_in_datecrit296_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
-+static ANTLR3_BITSET_LIST FOLLOW_datespec_in_datecrit296 = { FOLLOW_datespec_in_datecrit296_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_set_in_dateop0 */
-+static ANTLR3_BITWORD FOLLOW_set_in_dateop0_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
-+static ANTLR3_BITSET_LIST FOLLOW_set_in_dateop0 = { FOLLOW_set_in_dateop0_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateref_in_datespec331 */
-+static ANTLR3_BITWORD FOLLOW_dateref_in_datespec331_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
-+static ANTLR3_BITSET_LIST FOLLOW_dateref_in_datespec331 = { FOLLOW_dateref_in_datespec331_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_INT_in_datespec336 */
-+static ANTLR3_BITWORD FOLLOW_INT_in_datespec336_bits[] = { ANTLR3_UINT64_LIT(0x000000001E000000) };
-+static ANTLR3_BITSET_LIST FOLLOW_INT_in_datespec336 = { FOLLOW_INT_in_datespec336_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateintval_in_datespec338 */
-+static ANTLR3_BITWORD FOLLOW_dateintval_in_datespec338_bits[] = { ANTLR3_UINT64_LIT(0x0000000000600000) };
-+static ANTLR3_BITSET_LIST FOLLOW_dateintval_in_datespec338 = { FOLLOW_dateintval_in_datespec338_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateop_in_datespec340 */
-+static ANTLR3_BITWORD FOLLOW_dateop_in_datespec340_bits[] = { ANTLR3_UINT64_LIT(0x0000000001800000) };
-+static ANTLR3_BITSET_LIST FOLLOW_dateop_in_datespec340 = { FOLLOW_dateop_in_datespec340_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateref_in_datespec342 */
-+static ANTLR3_BITWORD FOLLOW_dateref_in_datespec342_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
-+static ANTLR3_BITSET_LIST FOLLOW_dateref_in_datespec342 = { FOLLOW_dateref_in_datespec342_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_set_in_dateref0 */
-+static ANTLR3_BITWORD FOLLOW_set_in_dateref0_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
-+static ANTLR3_BITSET_LIST FOLLOW_set_in_dateref0 = { FOLLOW_set_in_dateref0_bits, 1 };
-+/** Bitset defining follow set for error recovery in rule state: FOLLOW_set_in_dateintval0 */
-+static ANTLR3_BITWORD FOLLOW_set_in_dateintval0_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
-+static ANTLR3_BITSET_LIST FOLLOW_set_in_dateintval0 = { FOLLOW_set_in_dateintval0_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_EQUAL_in_strop188 */
++static ANTLR3_BITWORD FOLLOW_EQUAL_in_strop188_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_EQUAL_in_strop188 = { FOLLOW_EQUAL_in_strop188_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_INCLUDES_in_strop195 */
++static ANTLR3_BITWORD FOLLOW_INCLUDES_in_strop195_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_INCLUDES_in_strop195 = { FOLLOW_INCLUDES_in_strop195_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_STARTSW_in_strop202 */
++static ANTLR3_BITWORD FOLLOW_STARTSW_in_strop202_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_STARTSW_in_strop202 = { FOLLOW_STARTSW_in_strop202_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_ENDSW_in_strop209 */
++static ANTLR3_BITWORD FOLLOW_ENDSW_in_strop209_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_ENDSW_in_strop209 = { FOLLOW_ENDSW_in_strop209_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_FIELD_in_intcrit219 */
++static ANTLR3_BITWORD FOLLOW_FIELD_in_intcrit219_bits[] = { ANTLR3_UINT64_LIT(0x00000000001E1000) };
++static ANTLR3_BITSET_LIST FOLLOW_FIELD_in_intcrit219 = { FOLLOW_FIELD_in_intcrit219_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_intop_in_intcrit221 */
++static ANTLR3_BITWORD FOLLOW_intop_in_intcrit221_bits[] = { ANTLR3_UINT64_LIT(0x0000000000010000) };
++static ANTLR3_BITSET_LIST FOLLOW_intop_in_intcrit221 = { FOLLOW_intop_in_intcrit221_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_INT_in_intcrit223 */
++static ANTLR3_BITWORD FOLLOW_INT_in_intcrit223_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_INT_in_intcrit223 = { FOLLOW_INT_in_intcrit223_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_FIELD_in_intcrit240 */
++static ANTLR3_BITWORD FOLLOW_FIELD_in_intcrit240_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000800) };
++static ANTLR3_BITSET_LIST FOLLOW_FIELD_in_intcrit240 = { FOLLOW_FIELD_in_intcrit240_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_NOT_in_intcrit242 */
++static ANTLR3_BITWORD FOLLOW_NOT_in_intcrit242_bits[] = { ANTLR3_UINT64_LIT(0x00000000001E1000) };
++static ANTLR3_BITSET_LIST FOLLOW_NOT_in_intcrit242 = { FOLLOW_NOT_in_intcrit242_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_intop_in_intcrit244 */
++static ANTLR3_BITWORD FOLLOW_intop_in_intcrit244_bits[] = { ANTLR3_UINT64_LIT(0x0000000000010000) };
++static ANTLR3_BITSET_LIST FOLLOW_intop_in_intcrit244 = { FOLLOW_intop_in_intcrit244_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_INT_in_intcrit246 */
++static ANTLR3_BITWORD FOLLOW_INT_in_intcrit246_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_INT_in_intcrit246 = { FOLLOW_INT_in_intcrit246_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_EQUAL_in_intop273 */
++static ANTLR3_BITWORD FOLLOW_EQUAL_in_intop273_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_EQUAL_in_intop273 = { FOLLOW_EQUAL_in_intop273_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_LESS_in_intop280 */
++static ANTLR3_BITWORD FOLLOW_LESS_in_intop280_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_LESS_in_intop280 = { FOLLOW_LESS_in_intop280_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_GREATER_in_intop287 */
++static ANTLR3_BITWORD FOLLOW_GREATER_in_intop287_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_GREATER_in_intop287 = { FOLLOW_GREATER_in_intop287_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_LTE_in_intop294 */
++static ANTLR3_BITWORD FOLLOW_LTE_in_intop294_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_LTE_in_intop294 = { FOLLOW_LTE_in_intop294_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_GTE_in_intop301 */
++static ANTLR3_BITWORD FOLLOW_GTE_in_intop301_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_GTE_in_intop301 = { FOLLOW_GTE_in_intop301_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_FIELD_in_datecrit310 */
++static ANTLR3_BITWORD FOLLOW_FIELD_in_datecrit310_bits[] = { ANTLR3_UINT64_LIT(0x0000000000600000) };
++static ANTLR3_BITSET_LIST FOLLOW_FIELD_in_datecrit310 = { FOLLOW_FIELD_in_datecrit310_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateop_in_datecrit312 */
++static ANTLR3_BITWORD FOLLOW_dateop_in_datecrit312_bits[] = { ANTLR3_UINT64_LIT(0x0000000001810000) };
++static ANTLR3_BITSET_LIST FOLLOW_dateop_in_datecrit312 = { FOLLOW_dateop_in_datecrit312_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_datespec_in_datecrit314 */
++static ANTLR3_BITWORD FOLLOW_datespec_in_datecrit314_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_datespec_in_datecrit314 = { FOLLOW_datespec_in_datecrit314_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_BEFORE_in_dateop337 */
++static ANTLR3_BITWORD FOLLOW_BEFORE_in_dateop337_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_BEFORE_in_dateop337 = { FOLLOW_BEFORE_in_dateop337_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_AFTER_in_dateop344 */
++static ANTLR3_BITWORD FOLLOW_AFTER_in_dateop344_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_AFTER_in_dateop344 = { FOLLOW_AFTER_in_dateop344_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateref_in_datespec353 */
++static ANTLR3_BITWORD FOLLOW_dateref_in_datespec353_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_dateref_in_datespec353 = { FOLLOW_dateref_in_datespec353_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_INT_in_datespec358 */
++static ANTLR3_BITWORD FOLLOW_INT_in_datespec358_bits[] = { ANTLR3_UINT64_LIT(0x000000001E000000) };
++static ANTLR3_BITSET_LIST FOLLOW_INT_in_datespec358 = { FOLLOW_INT_in_datespec358_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateintval_in_datespec360 */
++static ANTLR3_BITWORD FOLLOW_dateintval_in_datespec360_bits[] = { ANTLR3_UINT64_LIT(0x0000000000600000) };
++static ANTLR3_BITSET_LIST FOLLOW_dateintval_in_datespec360 = { FOLLOW_dateintval_in_datespec360_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateop_in_datespec362 */
++static ANTLR3_BITWORD FOLLOW_dateop_in_datespec362_bits[] = { ANTLR3_UINT64_LIT(0x0000000001800000) };
++static ANTLR3_BITSET_LIST FOLLOW_dateop_in_datespec362 = { FOLLOW_dateop_in_datespec362_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateref_in_datespec364 */
++static ANTLR3_BITWORD FOLLOW_dateref_in_datespec364_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_dateref_in_datespec364 = { FOLLOW_dateref_in_datespec364_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_DATE_in_dateref388 */
++static ANTLR3_BITWORD FOLLOW_DATE_in_dateref388_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_DATE_in_dateref388 = { FOLLOW_DATE_in_dateref388_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_TODAY_in_dateref395 */
++static ANTLR3_BITWORD FOLLOW_TODAY_in_dateref395_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_TODAY_in_dateref395 = { FOLLOW_TODAY_in_dateref395_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_DAY_in_dateintval408 */
++static ANTLR3_BITWORD FOLLOW_DAY_in_dateintval408_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_DAY_in_dateintval408 = { FOLLOW_DAY_in_dateintval408_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_WEEK_in_dateintval415 */
++static ANTLR3_BITWORD FOLLOW_WEEK_in_dateintval415_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_WEEK_in_dateintval415 = { FOLLOW_WEEK_in_dateintval415_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_MONTH_in_dateintval422 */
++static ANTLR3_BITWORD FOLLOW_MONTH_in_dateintval422_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_MONTH_in_dateintval422 = { FOLLOW_MONTH_in_dateintval422_bits, 1 };
++/** Bitset defining follow set for error recovery in rule state: FOLLOW_YEAR_in_dateintval429 */
++static ANTLR3_BITWORD FOLLOW_YEAR_in_dateintval429_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
++static ANTLR3_BITSET_LIST FOLLOW_YEAR_in_dateintval429 = { FOLLOW_YEAR_in_dateintval429_bits, 1 };
+
+
+
+
+ }
+ break;
-+ case INCLUDES:
-+ case STARTSW:
-+ case ENDSW:
-+ {
-+ alt4=2;
-+ }
-+ break;
+ case LESS:
+ case GREATER:
+ case LTE:
+ alt4=3;
+ }
+ break;
++ case INCLUDES:
++ case STARTSW:
++ case ENDSW:
++ {
++ alt4=2;
++ }
++ break;
+
+ default:
+ CONSTRUCTEX();
+
+ }
+ break;
++ case BEFORE:
++ case AFTER:
++ {
++ alt4=4;
++ }
++ break;
+ case EQUAL:
+ {
+ switch ( LA(3) )
+ EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
+ EXCEPTION->message = (void *)"";
+ EXCEPTION->decisionNum = 4;
-+ EXCEPTION->state = 4;
++ EXCEPTION->state = 5;
+
+
+ goto rulecritEx;
+
+ }
+ break;
-+ case BEFORE:
-+ case AFTER:
-+ {
-+ alt4=4;
-+ }
-+ break;
+ case LESS:
+ case GREATER:
+ case LTE:
+
+
+ /* AST REWRITE
-+ * elements : strop, STR, FIELD
++ * elements : FIELD, STR, strop
+ * token labels :
+ * rule labels : retval
+ * token list labels :
+
+
+ /* AST REWRITE
-+ * elements : NOT, strop, STR, FIELD
++ * elements : STR, FIELD, strop, NOT
+ * token labels :
+ * rule labels : retval
+ * token list labels :
+
+/**
+ * $ANTLR start strop
-+ * RSP.g:46:1: strop : ( EQUAL | INCLUDES | STARTSW | ENDSW );
++ * RSP.g:46:1: strop : (equal= EQUAL | includes= INCLUDES | startsw= STARTSW | endsw= ENDSW );
+ */
+static RSPParser_strop_return
+strop(pRSPParser ctx)
+
+ pANTLR3_BASE_TREE root_0;
+
-+ pANTLR3_COMMON_TOKEN set23;
++ pANTLR3_COMMON_TOKEN equal;
++ pANTLR3_COMMON_TOKEN includes;
++ pANTLR3_COMMON_TOKEN startsw;
++ pANTLR3_COMMON_TOKEN endsw;
+
-+ pANTLR3_BASE_TREE set23_tree;
++ pANTLR3_BASE_TREE equal_tree;
++ pANTLR3_BASE_TREE includes_tree;
++ pANTLR3_BASE_TREE startsw_tree;
++ pANTLR3_BASE_TREE endsw_tree;
+
+ /* Initialize rule variables
+ */
+
+ root_0 = NULL;
+
-+ set23 = NULL;
++ equal = NULL;
++ includes = NULL;
++ startsw = NULL;
++ endsw = NULL;
+ retval.start = LT(1); retval.stop = retval.start;
+
-+ set23_tree = NULL;
++ equal_tree = NULL;
++ includes_tree = NULL;
++ startsw_tree = NULL;
++ endsw_tree = NULL;
+
+
+ retval.tree = NULL;
+ {
-+ // RSP.g:46:7: ( EQUAL | INCLUDES | STARTSW | ENDSW )
-+ // RSP.g:
+ {
-+ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++ // RSP.g:46:7: (equal= EQUAL | includes= INCLUDES | startsw= STARTSW | endsw= ENDSW )
++
++ ANTLR3_UINT32 alt6;
+
-+ set23=(pANTLR3_COMMON_TOKEN)LT(1);
-+ if ( ((LA(1) >= EQUAL) && (LA(1) <= ENDSW)) )
-+ {
-+ CONSUME();
-+ ADAPTOR->addChild(ADAPTOR, root_0, (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, set23)));
-+ PERRORRECOVERY=ANTLR3_FALSE;
-+ }
-+ else
++ alt6=4;
++
++ switch ( LA(1) )
+ {
++ case EQUAL:
++ {
++ alt6=1;
++ }
++ break;
++ case INCLUDES:
++ {
++ alt6=2;
++ }
++ break;
++ case STARTSW:
++ {
++ alt6=3;
++ }
++ break;
++ case ENDSW:
++ {
++ alt6=4;
++ }
++ break;
++
++ default:
+ CONSTRUCTEX();
-+ EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION;
-+ EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME;
-+ EXCEPTION->expectingSet = &FOLLOW_set_in_strop0;
-+ RECOVERFROMMISMATCHEDSET(&FOLLOW_set_in_strop0); goto rulestropEx;
++ EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
++ EXCEPTION->message = (void *)"";
++ EXCEPTION->decisionNum = 6;
++ EXCEPTION->state = 0;
++
++
++ goto rulestropEx;
+ }
+
++ switch (alt6)
++ {
++ case 1:
++ // RSP.g:46:9: equal= EQUAL
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
+
-+ }
++ equal = (pANTLR3_COMMON_TOKEN) MATCHT(EQUAL, &FOLLOW_EQUAL_in_strop188);
++ if (HASEXCEPTION())
++ {
++ goto rulestropEx;
++ }
++
++ equal_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, equal));
++ ADAPTOR->addChild(ADAPTOR, root_0, equal_tree);
++
++
++ }
++ break;
++ case 2:
++ // RSP.g:47:4: includes= INCLUDES
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++
++ includes = (pANTLR3_COMMON_TOKEN) MATCHT(INCLUDES, &FOLLOW_INCLUDES_in_strop195);
++ if (HASEXCEPTION())
++ {
++ goto rulestropEx;
++ }
++
++ includes_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, includes));
++ ADAPTOR->addChild(ADAPTOR, root_0, includes_tree);
++
++
++ }
++ break;
++ case 3:
++ // RSP.g:48:4: startsw= STARTSW
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++
++ startsw = (pANTLR3_COMMON_TOKEN) MATCHT(STARTSW, &FOLLOW_STARTSW_in_strop202);
++ if (HASEXCEPTION())
++ {
++ goto rulestropEx;
++ }
++
++ startsw_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, startsw));
++ ADAPTOR->addChild(ADAPTOR, root_0, startsw_tree);
++
++
++ }
++ break;
++ case 4:
++ // RSP.g:49:4: endsw= ENDSW
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++
++ endsw = (pANTLR3_COMMON_TOKEN) MATCHT(ENDSW, &FOLLOW_ENDSW_in_strop209);
++ if (HASEXCEPTION())
++ {
++ goto rulestropEx;
++ }
++
++ endsw_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, endsw));
++ ADAPTOR->addChild(ADAPTOR, root_0, endsw_tree);
+
++
++ }
++ break;
++
++ }
++ }
+ }
+
+
+
+ pANTLR3_BASE_TREE root_0;
+
-+ pANTLR3_COMMON_TOKEN FIELD24;
-+ pANTLR3_COMMON_TOKEN INT26;
-+ pANTLR3_COMMON_TOKEN FIELD27;
-+ pANTLR3_COMMON_TOKEN NOT28;
-+ pANTLR3_COMMON_TOKEN INT30;
-+ RSPParser_intop_return intop25;
-+ #undef RETURN_TYPE_intop25
-+ #define RETURN_TYPE_intop25 RSPParser_intop_return
-+
-+ RSPParser_intop_return intop29;
-+ #undef RETURN_TYPE_intop29
-+ #define RETURN_TYPE_intop29 RSPParser_intop_return
-+
-+ pANTLR3_BASE_TREE FIELD24_tree;
-+ pANTLR3_BASE_TREE INT26_tree;
-+ pANTLR3_BASE_TREE FIELD27_tree;
-+ pANTLR3_BASE_TREE NOT28_tree;
-+ pANTLR3_BASE_TREE INT30_tree;
++ pANTLR3_COMMON_TOKEN FIELD23;
++ pANTLR3_COMMON_TOKEN INT25;
++ pANTLR3_COMMON_TOKEN FIELD26;
++ pANTLR3_COMMON_TOKEN NOT27;
++ pANTLR3_COMMON_TOKEN INT29;
++ RSPParser_intop_return intop24;
++ #undef RETURN_TYPE_intop24
++ #define RETURN_TYPE_intop24 RSPParser_intop_return
++
++ RSPParser_intop_return intop28;
++ #undef RETURN_TYPE_intop28
++ #define RETURN_TYPE_intop28 RSPParser_intop_return
++
++ pANTLR3_BASE_TREE FIELD23_tree;
++ pANTLR3_BASE_TREE INT25_tree;
++ pANTLR3_BASE_TREE FIELD26_tree;
++ pANTLR3_BASE_TREE NOT27_tree;
++ pANTLR3_BASE_TREE INT29_tree;
+ pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_FIELD;
+ pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_INT;
+ pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_NOT;
+
+ root_0 = NULL;
+
-+ FIELD24 = NULL;
-+ INT26 = NULL;
-+ FIELD27 = NULL;
-+ NOT28 = NULL;
-+ INT30 = NULL;
-+ intop25.tree = NULL;
++ FIELD23 = NULL;
++ INT25 = NULL;
++ FIELD26 = NULL;
++ NOT27 = NULL;
++ INT29 = NULL;
++ intop24.tree = NULL;
+
-+ intop29.tree = NULL;
++ intop28.tree = NULL;
+
+ retval.start = LT(1); retval.stop = retval.start;
+
-+ FIELD24_tree = NULL;
-+ INT26_tree = NULL;
-+ FIELD27_tree = NULL;
-+ NOT28_tree = NULL;
-+ INT30_tree = NULL;
++ FIELD23_tree = NULL;
++ INT25_tree = NULL;
++ FIELD26_tree = NULL;
++ NOT27_tree = NULL;
++ INT29_tree = NULL;
+
+ stream_FIELD = NULL;
+ #define CREATE_stream_FIELD if (stream_FIELD == NULL) {stream_FIELD = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token FIELD"); }
+ {
+ // RSP.g:52:9: ( FIELD intop INT -> ^( intop FIELD INT ) | FIELD NOT intop INT -> ^( NOT ^( intop FIELD INT ) ) )
+
-+ ANTLR3_UINT32 alt6;
++ ANTLR3_UINT32 alt7;
+
-+ alt6=2;
++ alt7=2;
+
+ switch ( LA(1) )
+ {
+ {
+ case NOT:
+ {
-+ alt6=2;
++ alt7=2;
+ }
+ break;
+ case EQUAL:
+ case LTE:
+ case GTE:
+ {
-+ alt6=1;
++ alt7=1;
+ }
+ break;
+
+ CONSTRUCTEX();
+ EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
+ EXCEPTION->message = (void *)"";
-+ EXCEPTION->decisionNum = 6;
++ EXCEPTION->decisionNum = 7;
+ EXCEPTION->state = 1;
+
+
+ CONSTRUCTEX();
+ EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
+ EXCEPTION->message = (void *)"";
-+ EXCEPTION->decisionNum = 6;
++ EXCEPTION->decisionNum = 7;
+ EXCEPTION->state = 0;
+
+
+ goto ruleintcritEx;
+ }
+
-+ switch (alt6)
++ switch (alt7)
+ {
+ case 1:
+ // RSP.g:52:11: FIELD intop INT
+ {
-+ FIELD24 = (pANTLR3_COMMON_TOKEN) MATCHT(FIELD, &FOLLOW_FIELD_in_intcrit211);
++ FIELD23 = (pANTLR3_COMMON_TOKEN) MATCHT(FIELD, &FOLLOW_FIELD_in_intcrit219);
+ if (HASEXCEPTION())
+ {
+ goto ruleintcritEx;
+ }
+
-+ CREATE_stream_FIELD; stream_FIELD->add(stream_FIELD, FIELD24, NULL);
++ CREATE_stream_FIELD; stream_FIELD->add(stream_FIELD, FIELD23, NULL);
+
-+ FOLLOWPUSH(FOLLOW_intop_in_intcrit213);
-+ intop25=intop(ctx);
++ FOLLOWPUSH(FOLLOW_intop_in_intcrit221);
++ intop24=intop(ctx);
+
+ FOLLOWPOP();
+ if (HASEXCEPTION())
+ goto ruleintcritEx;
+ }
+
-+ CREATE_stream_intop; stream_intop->add(stream_intop, intop25.tree, NULL);
-+ INT26 = (pANTLR3_COMMON_TOKEN) MATCHT(INT, &FOLLOW_INT_in_intcrit215);
++ CREATE_stream_intop; stream_intop->add(stream_intop, intop24.tree, NULL);
++ INT25 = (pANTLR3_COMMON_TOKEN) MATCHT(INT, &FOLLOW_INT_in_intcrit223);
+ if (HASEXCEPTION())
+ {
+ goto ruleintcritEx;
+ }
+
-+ CREATE_stream_INT; stream_INT->add(stream_INT, INT26, NULL);
++ CREATE_stream_INT; stream_INT->add(stream_INT, INT25, NULL);
+
+
+
+ /* AST REWRITE
-+ * elements : intop, INT, FIELD
++ * elements : FIELD, INT, intop
+ * token labels :
+ * rule labels : retval
+ * token list labels :
+ case 2:
+ // RSP.g:53:4: FIELD NOT intop INT
+ {
-+ FIELD27 = (pANTLR3_COMMON_TOKEN) MATCHT(FIELD, &FOLLOW_FIELD_in_intcrit232);
++ FIELD26 = (pANTLR3_COMMON_TOKEN) MATCHT(FIELD, &FOLLOW_FIELD_in_intcrit240);
+ if (HASEXCEPTION())
+ {
+ goto ruleintcritEx;
+ }
+
-+ CREATE_stream_FIELD; stream_FIELD->add(stream_FIELD, FIELD27, NULL);
++ CREATE_stream_FIELD; stream_FIELD->add(stream_FIELD, FIELD26, NULL);
+
-+ NOT28 = (pANTLR3_COMMON_TOKEN) MATCHT(NOT, &FOLLOW_NOT_in_intcrit234);
++ NOT27 = (pANTLR3_COMMON_TOKEN) MATCHT(NOT, &FOLLOW_NOT_in_intcrit242);
+ if (HASEXCEPTION())
+ {
+ goto ruleintcritEx;
+ }
+
-+ CREATE_stream_NOT; stream_NOT->add(stream_NOT, NOT28, NULL);
++ CREATE_stream_NOT; stream_NOT->add(stream_NOT, NOT27, NULL);
+
-+ FOLLOWPUSH(FOLLOW_intop_in_intcrit236);
-+ intop29=intop(ctx);
++ FOLLOWPUSH(FOLLOW_intop_in_intcrit244);
++ intop28=intop(ctx);
+
+ FOLLOWPOP();
+ if (HASEXCEPTION())
+ goto ruleintcritEx;
+ }
+
-+ CREATE_stream_intop; stream_intop->add(stream_intop, intop29.tree, NULL);
-+ INT30 = (pANTLR3_COMMON_TOKEN) MATCHT(INT, &FOLLOW_INT_in_intcrit238);
++ CREATE_stream_intop; stream_intop->add(stream_intop, intop28.tree, NULL);
++ INT29 = (pANTLR3_COMMON_TOKEN) MATCHT(INT, &FOLLOW_INT_in_intcrit246);
+ if (HASEXCEPTION())
+ {
+ goto ruleintcritEx;
+ }
+
-+ CREATE_stream_INT; stream_INT->add(stream_INT, INT30, NULL);
++ CREATE_stream_INT; stream_INT->add(stream_INT, INT29, NULL);
+
+
+
+ /* AST REWRITE
-+ * elements : INT, FIELD, intop, NOT
++ * elements : intop, NOT, INT, FIELD
+ * token labels :
+ * rule labels : retval
+ * token list labels :
+
+/**
+ * $ANTLR start intop
-+ * RSP.g:56:1: intop : ( EQUAL | LESS | GREATER | LTE | GTE );
++ * RSP.g:56:1: intop : (equal= EQUAL | less= LESS | greater= GREATER | lte= LTE | gte= GTE );
+ */
+static RSPParser_intop_return
+intop(pRSPParser ctx)
+
+ pANTLR3_BASE_TREE root_0;
+
-+ pANTLR3_COMMON_TOKEN set31;
++ pANTLR3_COMMON_TOKEN equal;
++ pANTLR3_COMMON_TOKEN less;
++ pANTLR3_COMMON_TOKEN greater;
++ pANTLR3_COMMON_TOKEN lte;
++ pANTLR3_COMMON_TOKEN gte;
+
-+ pANTLR3_BASE_TREE set31_tree;
++ pANTLR3_BASE_TREE equal_tree;
++ pANTLR3_BASE_TREE less_tree;
++ pANTLR3_BASE_TREE greater_tree;
++ pANTLR3_BASE_TREE lte_tree;
++ pANTLR3_BASE_TREE gte_tree;
+
+ /* Initialize rule variables
+ */
+
+ root_0 = NULL;
+
-+ set31 = NULL;
++ equal = NULL;
++ less = NULL;
++ greater = NULL;
++ lte = NULL;
++ gte = NULL;
+ retval.start = LT(1); retval.stop = retval.start;
+
-+ set31_tree = NULL;
++ equal_tree = NULL;
++ less_tree = NULL;
++ greater_tree = NULL;
++ lte_tree = NULL;
++ gte_tree = NULL;
+
+
+ retval.tree = NULL;
+ {
-+ // RSP.g:56:7: ( EQUAL | LESS | GREATER | LTE | GTE )
-+ // RSP.g:
+ {
-+ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++ // RSP.g:56:7: (equal= EQUAL | less= LESS | greater= GREATER | lte= LTE | gte= GTE )
++
++ ANTLR3_UINT32 alt8;
+
-+ set31=(pANTLR3_COMMON_TOKEN)LT(1);
-+ if ( LA(1) == EQUAL || ((LA(1) >= LESS) && (LA(1) <= GTE)) )
-+ {
-+ CONSUME();
-+ ADAPTOR->addChild(ADAPTOR, root_0, (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, set31)));
-+ PERRORRECOVERY=ANTLR3_FALSE;
-+ }
-+ else
++ alt8=5;
++
++ switch ( LA(1) )
+ {
++ case EQUAL:
++ {
++ alt8=1;
++ }
++ break;
++ case LESS:
++ {
++ alt8=2;
++ }
++ break;
++ case GREATER:
++ {
++ alt8=3;
++ }
++ break;
++ case LTE:
++ {
++ alt8=4;
++ }
++ break;
++ case GTE:
++ {
++ alt8=5;
++ }
++ break;
++
++ default:
+ CONSTRUCTEX();
-+ EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION;
-+ EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME;
-+ EXCEPTION->expectingSet = &FOLLOW_set_in_intop0;
-+ RECOVERFROMMISMATCHEDSET(&FOLLOW_set_in_intop0); goto ruleintopEx;
++ EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
++ EXCEPTION->message = (void *)"";
++ EXCEPTION->decisionNum = 8;
++ EXCEPTION->state = 0;
++
++
++ goto ruleintopEx;
+ }
+
++ switch (alt8)
++ {
++ case 1:
++ // RSP.g:56:9: equal= EQUAL
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
+
-+ }
++ equal = (pANTLR3_COMMON_TOKEN) MATCHT(EQUAL, &FOLLOW_EQUAL_in_intop273);
++ if (HASEXCEPTION())
++ {
++ goto ruleintopEx;
++ }
++
++ equal_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, equal));
++ ADAPTOR->addChild(ADAPTOR, root_0, equal_tree);
++
++
++ }
++ break;
++ case 2:
++ // RSP.g:57:4: less= LESS
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++
++ less = (pANTLR3_COMMON_TOKEN) MATCHT(LESS, &FOLLOW_LESS_in_intop280);
++ if (HASEXCEPTION())
++ {
++ goto ruleintopEx;
++ }
++
++ less_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, less));
++ ADAPTOR->addChild(ADAPTOR, root_0, less_tree);
++
++
++ }
++ break;
++ case 3:
++ // RSP.g:58:4: greater= GREATER
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++
++ greater = (pANTLR3_COMMON_TOKEN) MATCHT(GREATER, &FOLLOW_GREATER_in_intop287);
++ if (HASEXCEPTION())
++ {
++ goto ruleintopEx;
++ }
++
++ greater_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, greater));
++ ADAPTOR->addChild(ADAPTOR, root_0, greater_tree);
++
++
++ }
++ break;
++ case 4:
++ // RSP.g:59:4: lte= LTE
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++
++ lte = (pANTLR3_COMMON_TOKEN) MATCHT(LTE, &FOLLOW_LTE_in_intop294);
++ if (HASEXCEPTION())
++ {
++ goto ruleintopEx;
++ }
++
++ lte_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, lte));
++ ADAPTOR->addChild(ADAPTOR, root_0, lte_tree);
++
++
++ }
++ break;
++ case 5:
++ // RSP.g:60:4: gte= GTE
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++
++ gte = (pANTLR3_COMMON_TOKEN) MATCHT(GTE, &FOLLOW_GTE_in_intop301);
++ if (HASEXCEPTION())
++ {
++ goto ruleintopEx;
++ }
++
++ gte_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, gte));
++ ADAPTOR->addChild(ADAPTOR, root_0, gte_tree);
+
++
++ }
++ break;
++
++ }
++ }
+ }
+
+
+
+ pANTLR3_BASE_TREE root_0;
+
-+ pANTLR3_COMMON_TOKEN FIELD32;
-+ RSPParser_dateop_return dateop33;
-+ #undef RETURN_TYPE_dateop33
-+ #define RETURN_TYPE_dateop33 RSPParser_dateop_return
++ pANTLR3_COMMON_TOKEN FIELD30;
++ RSPParser_dateop_return dateop31;
++ #undef RETURN_TYPE_dateop31
++ #define RETURN_TYPE_dateop31 RSPParser_dateop_return
+
-+ RSPParser_datespec_return datespec34;
-+ #undef RETURN_TYPE_datespec34
-+ #define RETURN_TYPE_datespec34 RSPParser_datespec_return
++ RSPParser_datespec_return datespec32;
++ #undef RETURN_TYPE_datespec32
++ #define RETURN_TYPE_datespec32 RSPParser_datespec_return
+
-+ pANTLR3_BASE_TREE FIELD32_tree;
++ pANTLR3_BASE_TREE FIELD30_tree;
+ pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_FIELD;
+ pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_datespec;
+ pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_dateop;
+
+ root_0 = NULL;
+
-+ FIELD32 = NULL;
-+ dateop33.tree = NULL;
++ FIELD30 = NULL;
++ dateop31.tree = NULL;
+
-+ datespec34.tree = NULL;
++ datespec32.tree = NULL;
+
+ retval.start = LT(1); retval.stop = retval.start;
+
-+ FIELD32_tree = NULL;
++ FIELD30_tree = NULL;
+
+ stream_FIELD = NULL;
+ #define CREATE_stream_FIELD if (stream_FIELD == NULL) {stream_FIELD = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token FIELD"); }
+ // RSP.g:63:9: ( FIELD dateop datespec -> ^( dateop FIELD datespec ) )
+ // RSP.g:63:11: FIELD dateop datespec
+ {
-+ FIELD32 = (pANTLR3_COMMON_TOKEN) MATCHT(FIELD, &FOLLOW_FIELD_in_datecrit292);
++ FIELD30 = (pANTLR3_COMMON_TOKEN) MATCHT(FIELD, &FOLLOW_FIELD_in_datecrit310);
+ if (HASEXCEPTION())
+ {
+ goto ruledatecritEx;
+ }
+
-+ CREATE_stream_FIELD; stream_FIELD->add(stream_FIELD, FIELD32, NULL);
++ CREATE_stream_FIELD; stream_FIELD->add(stream_FIELD, FIELD30, NULL);
+
-+ FOLLOWPUSH(FOLLOW_dateop_in_datecrit294);
-+ dateop33=dateop(ctx);
++ FOLLOWPUSH(FOLLOW_dateop_in_datecrit312);
++ dateop31=dateop(ctx);
+
+ FOLLOWPOP();
+ if (HASEXCEPTION())
+ goto ruledatecritEx;
+ }
+
-+ CREATE_stream_dateop; stream_dateop->add(stream_dateop, dateop33.tree, NULL);
-+ FOLLOWPUSH(FOLLOW_datespec_in_datecrit296);
-+ datespec34=datespec(ctx);
++ CREATE_stream_dateop; stream_dateop->add(stream_dateop, dateop31.tree, NULL);
++ FOLLOWPUSH(FOLLOW_datespec_in_datecrit314);
++ datespec32=datespec(ctx);
+
+ FOLLOWPOP();
+ if (HASEXCEPTION())
+ goto ruledatecritEx;
+ }
+
-+ CREATE_stream_datespec; stream_datespec->add(stream_datespec, datespec34.tree, NULL);
++ CREATE_stream_datespec; stream_datespec->add(stream_datespec, datespec32.tree, NULL);
+
+
+ /* AST REWRITE
-+ * elements : datespec, FIELD, dateop
++ * elements : FIELD, dateop, datespec
+ * token labels :
+ * rule labels : retval
+ * token list labels :
+
+/**
+ * $ANTLR start dateop
-+ * RSP.g:66:1: dateop : ( BEFORE | AFTER );
++ * RSP.g:66:1: dateop : (before= BEFORE | after= AFTER );
+ */
+static RSPParser_dateop_return
+dateop(pRSPParser ctx)
+
+ pANTLR3_BASE_TREE root_0;
+
-+ pANTLR3_COMMON_TOKEN set35;
++ pANTLR3_COMMON_TOKEN before;
++ pANTLR3_COMMON_TOKEN after;
+
-+ pANTLR3_BASE_TREE set35_tree;
++ pANTLR3_BASE_TREE before_tree;
++ pANTLR3_BASE_TREE after_tree;
+
+ /* Initialize rule variables
+ */
+
+ root_0 = NULL;
+
-+ set35 = NULL;
++ before = NULL;
++ after = NULL;
+ retval.start = LT(1); retval.stop = retval.start;
+
-+ set35_tree = NULL;
++ before_tree = NULL;
++ after_tree = NULL;
+
+
+ retval.tree = NULL;
+ {
-+ // RSP.g:66:8: ( BEFORE | AFTER )
-+ // RSP.g:
+ {
-+ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++ // RSP.g:66:8: (before= BEFORE | after= AFTER )
++
++ ANTLR3_UINT32 alt9;
+
-+ set35=(pANTLR3_COMMON_TOKEN)LT(1);
-+ if ( ((LA(1) >= BEFORE) && (LA(1) <= AFTER)) )
-+ {
-+ CONSUME();
-+ ADAPTOR->addChild(ADAPTOR, root_0, (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, set35)));
-+ PERRORRECOVERY=ANTLR3_FALSE;
-+ }
-+ else
++ alt9=2;
++
++ switch ( LA(1) )
+ {
++ case BEFORE:
++ {
++ alt9=1;
++ }
++ break;
++ case AFTER:
++ {
++ alt9=2;
++ }
++ break;
++
++ default:
+ CONSTRUCTEX();
-+ EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION;
-+ EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME;
-+ EXCEPTION->expectingSet = &FOLLOW_set_in_dateop0;
-+ RECOVERFROMMISMATCHEDSET(&FOLLOW_set_in_dateop0); goto ruledateopEx;
++ EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
++ EXCEPTION->message = (void *)"";
++ EXCEPTION->decisionNum = 9;
++ EXCEPTION->state = 0;
++
++
++ goto ruledateopEx;
+ }
+
++ switch (alt9)
++ {
++ case 1:
++ // RSP.g:66:10: before= BEFORE
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
+
-+ }
++ before = (pANTLR3_COMMON_TOKEN) MATCHT(BEFORE, &FOLLOW_BEFORE_in_dateop337);
++ if (HASEXCEPTION())
++ {
++ goto ruledateopEx;
++ }
++
++ before_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, before));
++ ADAPTOR->addChild(ADAPTOR, root_0, before_tree);
++
++
++ }
++ break;
++ case 2:
++ // RSP.g:67:4: after= AFTER
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++
++ after = (pANTLR3_COMMON_TOKEN) MATCHT(AFTER, &FOLLOW_AFTER_in_dateop344);
++ if (HASEXCEPTION())
++ {
++ goto ruledateopEx;
++ }
++
++ after_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, after));
++ ADAPTOR->addChild(ADAPTOR, root_0, after_tree);
++
++
++ }
++ break;
+
++ }
++ }
+ }
+
+
+
+ pANTLR3_BASE_TREE root_0;
+
-+ pANTLR3_COMMON_TOKEN INT37;
-+ RSPParser_dateref_return dateref36;
-+ #undef RETURN_TYPE_dateref36
-+ #define RETURN_TYPE_dateref36 RSPParser_dateref_return
++ pANTLR3_COMMON_TOKEN INT34;
++ RSPParser_dateref_return dateref33;
++ #undef RETURN_TYPE_dateref33
++ #define RETURN_TYPE_dateref33 RSPParser_dateref_return
+
-+ RSPParser_dateintval_return dateintval38;
-+ #undef RETURN_TYPE_dateintval38
-+ #define RETURN_TYPE_dateintval38 RSPParser_dateintval_return
++ RSPParser_dateintval_return dateintval35;
++ #undef RETURN_TYPE_dateintval35
++ #define RETURN_TYPE_dateintval35 RSPParser_dateintval_return
+
-+ RSPParser_dateop_return dateop39;
-+ #undef RETURN_TYPE_dateop39
-+ #define RETURN_TYPE_dateop39 RSPParser_dateop_return
++ RSPParser_dateop_return dateop36;
++ #undef RETURN_TYPE_dateop36
++ #define RETURN_TYPE_dateop36 RSPParser_dateop_return
+
-+ RSPParser_dateref_return dateref40;
-+ #undef RETURN_TYPE_dateref40
-+ #define RETURN_TYPE_dateref40 RSPParser_dateref_return
++ RSPParser_dateref_return dateref37;
++ #undef RETURN_TYPE_dateref37
++ #define RETURN_TYPE_dateref37 RSPParser_dateref_return
+
-+ pANTLR3_BASE_TREE INT37_tree;
++ pANTLR3_BASE_TREE INT34_tree;
+ pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_INT;
+ pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_dateintval;
+ pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_dateref;
+
+ root_0 = NULL;
+
-+ INT37 = NULL;
-+ dateref36.tree = NULL;
++ INT34 = NULL;
++ dateref33.tree = NULL;
+
-+ dateintval38.tree = NULL;
++ dateintval35.tree = NULL;
+
-+ dateop39.tree = NULL;
++ dateop36.tree = NULL;
+
-+ dateref40.tree = NULL;
++ dateref37.tree = NULL;
+
+ retval.start = LT(1); retval.stop = retval.start;
+
-+ INT37_tree = NULL;
++ INT34_tree = NULL;
+
+ stream_INT = NULL;
+ #define CREATE_stream_INT if (stream_INT == NULL) {stream_INT = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token INT"); }
+ {
+ // RSP.g:70:9: ( dateref | INT dateintval dateop dateref -> ^( dateop dateref INT dateintval ) )
+
-+ ANTLR3_UINT32 alt7;
++ ANTLR3_UINT32 alt10;
+
-+ alt7=2;
++ alt10=2;
+
+ switch ( LA(1) )
+ {
+ case DATE:
+ case TODAY:
+ {
-+ alt7=1;
++ alt10=1;
+ }
+ break;
+ case INT:
+ {
-+ alt7=2;
++ alt10=2;
+ }
+ break;
+
+ CONSTRUCTEX();
+ EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
+ EXCEPTION->message = (void *)"";
-+ EXCEPTION->decisionNum = 7;
++ EXCEPTION->decisionNum = 10;
+ EXCEPTION->state = 0;
+
+
+ goto ruledatespecEx;
+ }
+
-+ switch (alt7)
++ switch (alt10)
+ {
+ case 1:
+ // RSP.g:70:11: dateref
+ {
+ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
+
-+ FOLLOWPUSH(FOLLOW_dateref_in_datespec331);
-+ dateref36=dateref(ctx);
++ FOLLOWPUSH(FOLLOW_dateref_in_datespec353);
++ dateref33=dateref(ctx);
+
+ FOLLOWPOP();
+ if (HASEXCEPTION())
+ goto ruledatespecEx;
+ }
+
-+ ADAPTOR->addChild(ADAPTOR, root_0, dateref36.tree);
++ ADAPTOR->addChild(ADAPTOR, root_0, dateref33.tree);
+
+ }
+ break;
+ case 2:
+ // RSP.g:71:4: INT dateintval dateop dateref
+ {
-+ INT37 = (pANTLR3_COMMON_TOKEN) MATCHT(INT, &FOLLOW_INT_in_datespec336);
++ INT34 = (pANTLR3_COMMON_TOKEN) MATCHT(INT, &FOLLOW_INT_in_datespec358);
+ if (HASEXCEPTION())
+ {
+ goto ruledatespecEx;
+ }
+
-+ CREATE_stream_INT; stream_INT->add(stream_INT, INT37, NULL);
++ CREATE_stream_INT; stream_INT->add(stream_INT, INT34, NULL);
+
-+ FOLLOWPUSH(FOLLOW_dateintval_in_datespec338);
-+ dateintval38=dateintval(ctx);
++ FOLLOWPUSH(FOLLOW_dateintval_in_datespec360);
++ dateintval35=dateintval(ctx);
+
+ FOLLOWPOP();
+ if (HASEXCEPTION())
+ goto ruledatespecEx;
+ }
+
-+ CREATE_stream_dateintval; stream_dateintval->add(stream_dateintval, dateintval38.tree, NULL);
-+ FOLLOWPUSH(FOLLOW_dateop_in_datespec340);
-+ dateop39=dateop(ctx);
++ CREATE_stream_dateintval; stream_dateintval->add(stream_dateintval, dateintval35.tree, NULL);
++ FOLLOWPUSH(FOLLOW_dateop_in_datespec362);
++ dateop36=dateop(ctx);
+
+ FOLLOWPOP();
+ if (HASEXCEPTION())
+ goto ruledatespecEx;
+ }
+
-+ CREATE_stream_dateop; stream_dateop->add(stream_dateop, dateop39.tree, NULL);
-+ FOLLOWPUSH(FOLLOW_dateref_in_datespec342);
-+ dateref40=dateref(ctx);
++ CREATE_stream_dateop; stream_dateop->add(stream_dateop, dateop36.tree, NULL);
++ FOLLOWPUSH(FOLLOW_dateref_in_datespec364);
++ dateref37=dateref(ctx);
+
+ FOLLOWPOP();
+ if (HASEXCEPTION())
+ goto ruledatespecEx;
+ }
+
-+ CREATE_stream_dateref; stream_dateref->add(stream_dateref, dateref40.tree, NULL);
++ CREATE_stream_dateref; stream_dateref->add(stream_dateref, dateref37.tree, NULL);
+
+
+ /* AST REWRITE
-+ * elements : INT, dateintval, dateop, dateref
++ * elements : dateop, INT, dateintval, dateref
+ * token labels :
+ * rule labels : retval
+ * token list labels :
+
+/**
+ * $ANTLR start dateref
-+ * RSP.g:74:1: dateref : ( DATE | TODAY );
++ * RSP.g:74:1: dateref : (date= DATE | today= TODAY );
+ */
+static RSPParser_dateref_return
+dateref(pRSPParser ctx)
+
+ pANTLR3_BASE_TREE root_0;
+
-+ pANTLR3_COMMON_TOKEN set41;
++ pANTLR3_COMMON_TOKEN date;
++ pANTLR3_COMMON_TOKEN today;
+
-+ pANTLR3_BASE_TREE set41_tree;
++ pANTLR3_BASE_TREE date_tree;
++ pANTLR3_BASE_TREE today_tree;
+
+ /* Initialize rule variables
+ */
+
+ root_0 = NULL;
+
-+ set41 = NULL;
++ date = NULL;
++ today = NULL;
+ retval.start = LT(1); retval.stop = retval.start;
+
-+ set41_tree = NULL;
++ date_tree = NULL;
++ today_tree = NULL;
+
+
+ retval.tree = NULL;
+ {
-+ // RSP.g:74:9: ( DATE | TODAY )
-+ // RSP.g:
+ {
-+ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++ // RSP.g:74:9: (date= DATE | today= TODAY )
++
++ ANTLR3_UINT32 alt11;
+
-+ set41=(pANTLR3_COMMON_TOKEN)LT(1);
-+ if ( ((LA(1) >= DATE) && (LA(1) <= TODAY)) )
-+ {
-+ CONSUME();
-+ ADAPTOR->addChild(ADAPTOR, root_0, (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, set41)));
-+ PERRORRECOVERY=ANTLR3_FALSE;
-+ }
-+ else
++ alt11=2;
++
++ switch ( LA(1) )
+ {
++ case DATE:
++ {
++ alt11=1;
++ }
++ break;
++ case TODAY:
++ {
++ alt11=2;
++ }
++ break;
++
++ default:
+ CONSTRUCTEX();
-+ EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION;
-+ EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME;
-+ EXCEPTION->expectingSet = &FOLLOW_set_in_dateref0;
-+ RECOVERFROMMISMATCHEDSET(&FOLLOW_set_in_dateref0); goto ruledaterefEx;
++ EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
++ EXCEPTION->message = (void *)"";
++ EXCEPTION->decisionNum = 11;
++ EXCEPTION->state = 0;
++
++
++ goto ruledaterefEx;
+ }
+
++ switch (alt11)
++ {
++ case 1:
++ // RSP.g:74:11: date= DATE
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
+
-+ }
++ date = (pANTLR3_COMMON_TOKEN) MATCHT(DATE, &FOLLOW_DATE_in_dateref388);
++ if (HASEXCEPTION())
++ {
++ goto ruledaterefEx;
++ }
++
++ date_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, date));
++ ADAPTOR->addChild(ADAPTOR, root_0, date_tree);
++
++
++ }
++ break;
++ case 2:
++ // RSP.g:75:4: today= TODAY
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
+
++ today = (pANTLR3_COMMON_TOKEN) MATCHT(TODAY, &FOLLOW_TODAY_in_dateref395);
++ if (HASEXCEPTION())
++ {
++ goto ruledaterefEx;
++ }
++
++ today_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, today));
++ ADAPTOR->addChild(ADAPTOR, root_0, today_tree);
++
++
++ }
++ break;
++
++ }
++ }
+ }
+
+
+
+/**
+ * $ANTLR start dateintval
-+ * RSP.g:78:1: dateintval : ( DAY | WEEK | MONTH | YEAR );
++ * RSP.g:78:1: dateintval : (day= DAY | week= WEEK | month= MONTH | year= YEAR );
+ */
+static RSPParser_dateintval_return
+dateintval(pRSPParser ctx)
+
+ pANTLR3_BASE_TREE root_0;
+
-+ pANTLR3_COMMON_TOKEN set42;
++ pANTLR3_COMMON_TOKEN day;
++ pANTLR3_COMMON_TOKEN week;
++ pANTLR3_COMMON_TOKEN month;
++ pANTLR3_COMMON_TOKEN year;
+
-+ pANTLR3_BASE_TREE set42_tree;
++ pANTLR3_BASE_TREE day_tree;
++ pANTLR3_BASE_TREE week_tree;
++ pANTLR3_BASE_TREE month_tree;
++ pANTLR3_BASE_TREE year_tree;
+
+ /* Initialize rule variables
+ */
+
+ root_0 = NULL;
+
-+ set42 = NULL;
++ day = NULL;
++ week = NULL;
++ month = NULL;
++ year = NULL;
+ retval.start = LT(1); retval.stop = retval.start;
+
-+ set42_tree = NULL;
++ day_tree = NULL;
++ week_tree = NULL;
++ month_tree = NULL;
++ year_tree = NULL;
+
+
+ retval.tree = NULL;
+ {
-+ // RSP.g:79:2: ( DAY | WEEK | MONTH | YEAR )
-+ // RSP.g:
+ {
-+ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++ // RSP.g:79:2: (day= DAY | week= WEEK | month= MONTH | year= YEAR )
++
++ ANTLR3_UINT32 alt12;
+
-+ set42=(pANTLR3_COMMON_TOKEN)LT(1);
-+ if ( ((LA(1) >= DAY) && (LA(1) <= YEAR)) )
-+ {
-+ CONSUME();
-+ ADAPTOR->addChild(ADAPTOR, root_0, (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, set42)));
-+ PERRORRECOVERY=ANTLR3_FALSE;
-+ }
-+ else
++ alt12=4;
++
++ switch ( LA(1) )
+ {
++ case DAY:
++ {
++ alt12=1;
++ }
++ break;
++ case WEEK:
++ {
++ alt12=2;
++ }
++ break;
++ case MONTH:
++ {
++ alt12=3;
++ }
++ break;
++ case YEAR:
++ {
++ alt12=4;
++ }
++ break;
++
++ default:
+ CONSTRUCTEX();
-+ EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION;
-+ EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME;
-+ EXCEPTION->expectingSet = &FOLLOW_set_in_dateintval0;
-+ RECOVERFROMMISMATCHEDSET(&FOLLOW_set_in_dateintval0); goto ruledateintvalEx;
++ EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
++ EXCEPTION->message = (void *)"";
++ EXCEPTION->decisionNum = 12;
++ EXCEPTION->state = 0;
++
++
++ goto ruledateintvalEx;
+ }
+
++ switch (alt12)
++ {
++ case 1:
++ // RSP.g:79:4: day= DAY
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++
++ day = (pANTLR3_COMMON_TOKEN) MATCHT(DAY, &FOLLOW_DAY_in_dateintval408);
++ if (HASEXCEPTION())
++ {
++ goto ruledateintvalEx;
++ }
++
++ day_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, day));
++ ADAPTOR->addChild(ADAPTOR, root_0, day_tree);
+
-+ }
+
++ }
++ break;
++ case 2:
++ // RSP.g:80:4: week= WEEK
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++
++ week = (pANTLR3_COMMON_TOKEN) MATCHT(WEEK, &FOLLOW_WEEK_in_dateintval415);
++ if (HASEXCEPTION())
++ {
++ goto ruledateintvalEx;
++ }
++
++ week_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, week));
++ ADAPTOR->addChild(ADAPTOR, root_0, week_tree);
++
++
++ }
++ break;
++ case 3:
++ // RSP.g:81:4: month= MONTH
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++
++ month = (pANTLR3_COMMON_TOKEN) MATCHT(MONTH, &FOLLOW_MONTH_in_dateintval422);
++ if (HASEXCEPTION())
++ {
++ goto ruledateintvalEx;
++ }
++
++ month_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, month));
++ ADAPTOR->addChild(ADAPTOR, root_0, month_tree);
++
++
++ }
++ break;
++ case 4:
++ // RSP.g:82:4: year= YEAR
++ {
++ root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
++
++ year = (pANTLR3_COMMON_TOKEN) MATCHT(YEAR, &FOLLOW_YEAR_in_dateintval429);
++ if (HASEXCEPTION())
++ {
++ goto ruledateintvalEx;
++ }
++
++ year_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, year));
++ ADAPTOR->addChild(ADAPTOR, root_0, year_tree);
++
++
++ }
++ break;
++
++ }
++ }
+ }
+
+
+ */
diff --git a/src/pregen/RSPParser.h b/src/pregen/RSPParser.h
new file mode 100644
-index 0000000..4b3bbfe
+index 0000000..1796c0a
--- /dev/null
+++ b/src/pregen/RSPParser.h
@@ -0,0 +1,365 @@
+ * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : RSP.g
-+ * - On : 2015-06-27 19:05:18
++ * - On : 2016-01-01 12:23:42
+ * - for the parser : RSPParserParser *
+ * Editing it, at least manually, is not wise.
+ *
\ No newline at end of file
diff --git a/src/pregen/SMARTPL2SQL.c b/src/pregen/SMARTPL2SQL.c
new file mode 100644
-index 0000000..c435f37
+index 0000000..bd93752
--- /dev/null
+++ b/src/pregen/SMARTPL2SQL.c
@@ -0,0 +1,1649 @@
+ * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : SMARTPL2SQL.g
-+ * - On : 2015-06-27 19:05:21
++ * - On : 2016-01-01 12:23:44
+ * - for the tree parser : SMARTPL2SQLTreeParser *
+ * Editing it, at least manually, is not wise.
+ *
+ }
+ else if (strcmp((char *)val, "url") == 0)
+ {
-+ sprintf(str, "f.data_kind = %d", DATA_KIND_URL);
++ sprintf(str, "f.data_kind = %d", DATA_KIND_HTTP);
+ }
+ else if (strcmp((char *)val, "spotify") == 0)
+ {
+ */
diff --git a/src/pregen/SMARTPL2SQL.h b/src/pregen/SMARTPL2SQL.h
new file mode 100644
-index 0000000..322e8fd
+index 0000000..8e06de7
--- /dev/null
+++ b/src/pregen/SMARTPL2SQL.h
@@ -0,0 +1,220 @@
+ * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : SMARTPL2SQL.g
-+ * - On : 2015-06-27 19:05:21
++ * - On : 2016-01-01 12:23:44
+ * - for the tree parser : SMARTPL2SQLTreeParser *
+ * Editing it, at least manually, is not wise.
+ *
\ No newline at end of file
diff --git a/src/pregen/SMARTPLLexer.c b/src/pregen/SMARTPLLexer.c
new file mode 100644
-index 0000000..9ea1a83
+index 0000000..91d6e99
--- /dev/null
+++ b/src/pregen/SMARTPLLexer.c
@@ -0,0 +1,4168 @@
+ * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : SMARTPL.g
-+ * - On : 2015-06-27 19:05:15
++ * - On : 2016-01-01 12:23:40
+ * - for the lexer : SMARTPLLexerLexer *
+ * Editing it, at least manually, is not wise.
+ *
+ */
diff --git a/src/pregen/SMARTPLLexer.h b/src/pregen/SMARTPLLexer.h
new file mode 100644
-index 0000000..9d73721
+index 0000000..87e8c7e
--- /dev/null
+++ b/src/pregen/SMARTPLLexer.h
@@ -0,0 +1,248 @@
+ * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : SMARTPL.g
-+ * - On : 2015-06-27 19:05:15
++ * - On : 2016-01-01 12:23:40
+ * - for the lexer : SMARTPLLexerLexer *
+ * Editing it, at least manually, is not wise.
+ *
+/* END - Note:Keep extra line feed to satisfy UNIX systems */
diff --git a/src/pregen/SMARTPLParser.c b/src/pregen/SMARTPLParser.c
new file mode 100644
-index 0000000..afe9f99
+index 0000000..f39e5ae
--- /dev/null
+++ b/src/pregen/SMARTPLParser.c
@@ -0,0 +1,1812 @@
+ * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : SMARTPL.g
-+ * - On : 2015-06-27 19:05:15
++ * - On : 2016-01-01 12:23:40
+ * - for the parser : SMARTPLParserParser *
+ * Editing it, at least manually, is not wise.
+ *
+ */
diff --git a/src/pregen/SMARTPLParser.h b/src/pregen/SMARTPLParser.h
new file mode 100644
-index 0000000..5360136
+index 0000000..38ef500
--- /dev/null
+++ b/src/pregen/SMARTPLParser.h
@@ -0,0 +1,285 @@
+ * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
+ *
+ * - From the grammar source file : SMARTPL.g
-+ * - On : 2015-06-27 19:05:15
++ * - On : 2016-01-01 12:23:40
+ * - for the parser : SMARTPLParserParser *
+ * Editing it, at least manually, is not wise.
+ *
PKG_NAME:=madplay
PKG_VERSION:=0.15.2b
-PKG_RELEASE:=5
+PKG_RELEASE:=6
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/mad \
define Package/madplay/install
$(INSTALL_DIR) $(1)/usr/bin
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/madplay $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/madplay $(1)/usr/bin/
endef
define Package/madplay-alsa/install
include $(TOPDIR)/rules.mk
PKG_NAME:=mpd
-PKG_VERSION:=0.19.10
-PKG_RELEASE:=2
+PKG_VERSION:=0.19.11
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://www.musicpd.org/download/mpd/0.19/
-PKG_MD5SUM:=da4bc3e47afd0faf9e7a67168e012102
+PKG_MD5SUM:=78935f6c464b67e19b4dc65bdb80319e
PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
PKG_LICENSE:=GPL-2.0
--- /dev/null
+Add a patch from the Alpine Linux project to fix a musl build issue with gcc 5:
+
+Problem has been reported upstream and closed with WONTFIX:
+http://bugs.musicpd.org/view.php?id=4387
+http://bugs.musicpd.org/view.php?id=4110
+
+however...
+
+POSIX does not permit using PTHREAD_COND_INITIALIZER except for static
+initialization, and certainly does not permit using it as a value
+
+POSIX does not specify the type of the object (it's opaque) so if
+there are any types for which their code would be invalid C++, then their
+code is invalid
+
+Volatile in the type is necessary. without that, LTO can break the code.
+
+--- a/src/notify.hxx
++++ b/src/notify.hxx
+@@ -28,7 +28,7 @@ struct notify {
+ Cond cond;
+ bool pending;
+
+-#if !defined(WIN32) && !defined(__NetBSD__) && !defined(__BIONIC__)
++#if defined(__GLIBC__)
+ constexpr
+ #endif
+ notify():pending(false) {}
+--- a/src/thread/PosixCond.hxx
++++ b/src/thread/PosixCond.hxx
+@@ -41,7 +41,7 @@ class PosixCond {
+ pthread_cond_t cond;
+
+ public:
+-#if defined(__NetBSD__) || defined(__BIONIC__)
++#if !defined(__GLIBC__)
+ /* NetBSD's PTHREAD_COND_INITIALIZER is not compatible with
+ "constexpr" */
+ PosixCond() {
+--- a/src/thread/PosixMutex.hxx
++++ b/src/thread/PosixMutex.hxx
+@@ -41,7 +41,7 @@ class PosixMutex {
+ pthread_mutex_t mutex;
+
+ public:
+-#if defined(__NetBSD__) || defined(__BIONIC__)
++#if !defined(__GLIBC__)
+ /* NetBSD's PTHREAD_MUTEX_INITIALIZER is not compatible with
+ "constexpr" */
+ PosixMutex() {
--- a/src/decoder/plugins/FfmpegDecoderPlugin.cxx
+++ b/src/decoder/plugins/FfmpegDecoderPlugin.cxx
-@@ -765,6 +765,7 @@ static const char *const ffmpeg_mime_typ
+@@ -774,6 +774,7 @@ static const char *const ffmpeg_mime_typ
"audio/qcelp",
"audio/vorbis",
"audio/vorbis+ogg",
--- a/src/decoder/plugins/FfmpegDecoderPlugin.cxx
+++ b/src/decoder/plugins/FfmpegDecoderPlugin.cxx
-@@ -458,6 +458,13 @@ ffmpeg_probe(Decoder *decoder, InputStre
+@@ -467,6 +467,13 @@ ffmpeg_probe(Decoder *decoder, InputStre
unsigned char buffer[BUFFER_SIZE];
size_t nbytes = decoder_read(decoder, is, buffer, BUFFER_SIZE);
PKG_NAME:=mpg123
PKG_VERSION:=1.22.3
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://www.mpg123.de/download/
--enable-shared \
--enable-static \
--with-cpu=generic_nofpu \
+ --with-audio=alsa \
--with-default-audio=alsa \
)
endef
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) \
$(PKG_INSTALL_DIR)/usr/bin/mpg123{,-id3dump,-strip} \
- $(PKG_INSTALL_DIR)/usr/bin/out123
+ $(PKG_INSTALL_DIR)/usr/bin/out123 \
$(1)/usr/bin
$(INSTALL_DIR) $(1)/usr/lib/mpg123
include $(TOPDIR)/rules.mk
PKG_NAME:=pulseaudio
-PKG_VERSION:=7.0
+PKG_VERSION:=7.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://freedesktop.org/software/pulseaudio/releases/
-PKG_MD5SUM:=09668b660ffb32f2639cfd6fdc9d3b37
+PKG_MD5SUM:=9d0a9817b632cac8e3f3834d7eb1c99d
PKG_LICENSE:=LGPL-2.1+
PKG_LICENSE_FILES:=GPL LICENSE
#!/bin/sh /etc/rc.common
# Copyright (C) 2011 OpenWrt.org
-START=65
+START=99
STOP=65
USE_PROCD=1
--- /dev/null
+#
+# Copyright (C) 2008-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=at
+PKG_VERSION:=3.1.16
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).orig.tar.gz
+PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/a/at
+PKG_MD5SUM:=d05da75d9b75d93917ffb16ab48b1e19
+
+PKG_LICENSE:=GPL-2.0+ GPL-3.0+ ISC
+PKG_LICENSE_FILES:=COPYING Copyright
+PKG_MAINTAINER:=Phil Eichinger <phil@zankapfel.net>
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/at
+ SECTION:=utils
+ CATEGORY:=Utilities
+ DEPENDS:=+libelf1
+ TITLE:=Delayed job execution and batch processing
+ URL:=http://packages.debian.org/stable/at
+endef
+
+define Package/at/description
+ At and batch read shell commands from standard input storing them as a job to
+ be scheduled for execution in the future.
+endef
+
+export SENDMAIL=/bin/true
+EXTRA_CFLAGS:=-DNEED_YYWRAP -I$(PKG_BUILD_DIR) \
+ $(TARGET_LDFLAGS)
+
+CONFIGURE_ARGS+=--prefix=/usr \
+ --with-daemon_username=nobody \
+ --with-daemon_groupname=nogroup \
+ --with-jobdir=/var/spool/cron/atjobs \
+ --with-atspool=/var/spool/cron/atspool
+
+CONFIGURE_VARS += \
+ ac_cv_header_security_pam_appl_h=no
+
+define Package/at/install
+ $(INSTALL_DIR) $(1)/usr/bin $(1)/usr/sbin $(1)/etc/init.d/
+ $(INSTALL_BIN) ./files/atd.init $(1)/etc/init.d/atd
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/at $(1)/usr/bin
+ ln -sf at $(1)/usr/bin/atq
+ ln -sf at $(1)/usr/bin/atrm
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/atd $(1)/usr/sbin
+endef
+
+$(eval $(call BuildPackage,at))
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2015 OpenWrt.org
+
+START=50
+
+USE_PROCD=1
+
+start_service() {
+ [ -d /var/spool/cron/atjobs ] || {
+ mkdir -m 0755 -p /var/spool/cron/atjobs
+ touch /var/spool/cron/atjobs/.SEQ
+ chown -R nobody:nogroup /var/spool/cron/atjobs
+ }
+ [ -d /var/spool/cron/atspool ] || {
+ mkdir -m 0755 -p /var/spool/cron/atspool
+ chown -R nobody:nogroup /var/spool/cron/atspool
+ }
+ procd_open_instance
+
+ procd_set_param command /usr/sbin/atd -f
+ procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
+ procd_set_param stdout 1 # forward stdout of the command to logd
+ procd_set_param stderr 1 # same for stderr
+
+ procd_close_instance
+}
--- /dev/null
+From 7f811d9c4ebc9444e613e251c31d6bf537a24dc1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 13 Apr 2015 16:35:30 -0700
+Subject: [PATCH] remove glibc assumption
+
+glibc time.h header has an undocumented __isleap macro
+that we are using anf musl is missing it.
+Since it is undocumented & does not appear
+on any other libc, stop using it and just define the macro in
+locally instead.
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+[patch from: http://patchwork.openembedded.org/patch/91893/ ]
+Signed-off-by: Phil Eichinger <phil@zankapfel.net>
+---
+ parsetime.y | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/parsetime.y b/parsetime.y
+index 7005e88..324e6d3 100644
+--- a/parsetime.y
++++ b/parsetime.y
+@@ -8,6 +8,9 @@
+
+ #define YYDEBUG 1
+
++#define is_leap_year(y) \
++ ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0))
++
+ struct tm exectm;
+ static int isgmt;
+ static int yearspec;
+@@ -217,8 +220,8 @@ date : month_name day_number
+ mnum == 12) && dnum > 31)
+ || ((mnum == 4 || mnum == 6 || mnum == 9 ||
+ mnum == 11) && dnum > 30)
+- || (mnum == 2 && dnum > 29 && __isleap(ynum+1900))
+- || (mnum == 2 && dnum > 28 && !__isleap(ynum+1900))
++ || (mnum == 2 && dnum > 29 && is_leap_year(ynum+1900))
++ || (mnum == 2 && dnum > 28 && !is_leap_year(ynum+1900))
+ )
+ {
+ yyerror("Error in day of month");
+@@ -261,8 +264,8 @@ date : month_name day_number
+ mnum == 12) && dnum > 31)
+ || ((mnum == 4 || mnum == 6 || mnum == 9 ||
+ mnum == 11) && dnum > 30)
+- || (mnum == 2 && dnum > 29 && __isleap(ynum+1900))
+- || (mnum == 2 && dnum > 28 && !__isleap(ynum+1900))
++ || (mnum == 2 && dnum > 29 && is_leap_year(ynum+1900))
++ || (mnum == 2 && dnum > 28 && !is_leap_year(ynum+1900))
+ )
+ {
+ yyerror("Error in day of month");
+--
+2.1.4
+
--- /dev/null
+--- a/getloadavg.c
++++ b/getloadavg.c
+@@ -69,8 +69,9 @@ Boston, MA 02110-1301 USA */
+ #include <config.h>
+ #endif
+
+-#include "lisp.h"
+-#include "sysfile.h" /* for encapsulated open, close, read, write */
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
+
+ #ifndef HAVE_GETLOADAVG
+
PKG_NAME:=avrdude
PKG_VERSION:=6.1
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://download.savannah.gnu.org/releases/avrdude
PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/nls.mk
define Package/avrdude
SECTION:=utils
ac_cv_file__usr_local_pgsql_include=no
endif
-EXTRA_CFLAGS+= $(TARGET_CPPFLAGS)
+EXTRA_CFLAGS+= $(TARGET_CPPFLAGS) -std=gnu89
EXTRA_LDFLAGS+= $(TARGET_LDFLAGS) -Wl,-rpath-link,$(STAGING_DIR)/usr/lib
define Package/bandwidthd/install
#!/bin/sh /etc/rc.common
-# Copyright (C) 2008-2011 OpenWrt.org
+# Copyright (C) 2008-2015 OpenWrt.org
START=99
--- /dev/null
+#
+# Copyright (C) 2009-2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=bonnie++
+PKG_VERSION:=1.97
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz
+PKG_SOURCE_URL:=http://www.coker.com.au/bonnie++/experimental/
+PKG_MD5SUM:=d6cf9703242998b2ddc2d875b028b3c6
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=copyright.txt
+PKG_MAINTAINER:=Florian Fainelli <florian@openwrt.org>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION).1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/bonniexx
+ SECTION:=utils
+ CATEGORY:=Utilities
+ DEPENDS:=+libstdcpp +libpthread
+ TITLE:=Bonnie++ - hard drive bottleneck testing program.
+ URL:=http://www.coker.com.au/bonnie++/
+endef
+
+define Package/bonniexx/description
+ Bonnie++ is a benchmark suite that is aimed at performing a number of simple
+ tests of hard drive and file system performance.
+endef
+
+define Build/Compile
+ $(MAKE) -C $(PKG_BUILD_DIR) \
+ TARGET_CXX="$(TARGET_CXX)" \
+ TARGET_LINK="$(TARGET_CXX)" \
+ MORECFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CXXFLAGS)" \
+ DESTDIR="$(PKG_INSTALL_DIR)" \
+ all
+endef
+
+define Package/bonniexx/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(CP) $(PKG_BUILD_DIR)/bonnie++ $(1)/usr/bin/
+ $(CP) $(PKG_BUILD_DIR)/bon_csv2html $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,bonniexx))
--- /dev/null
+Index: bonnie++-1.97.1/configure
+===================================================================
+--- bonnie++-1.97.1.orig/configure
++++ bonnie++-1.97.1/configure
+@@ -3955,9 +3955,7 @@ rm -f core conftest.err conftest.$ac_obj
+
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error $? "cannot run test program while cross compiling
+-See \`config.log' for more details" "$LINENO" 5 ; }
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} }
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+Index: bonnie++-1.97.1/Makefile
+===================================================================
+--- bonnie++-1.97.1.orig/Makefile
++++ bonnie++-1.97.1/Makefile
+@@ -1,5 +1,7 @@
+ EXES=bonnie++ zcav getc_putc getc_putc_helper
+ EXE=bon_csv2html generate_randfile
++TARGET_CXX=g++
++TARGET_LINK=g++
+
+ all: $(EXE) $(EXES)
+
+@@ -10,8 +12,8 @@ eprefix=${prefix}
+ #MORE_WARNINGS=-Weffc++
+ WFLAGS=-Wall -W -Wshadow -Wpointer-arith -Wwrite-strings -pedantic -ffor-scope -Wcast-align -Wsign-compare -Wpointer-arith -Wwrite-strings -Wformat-security -Wswitch-enum -Winit-self $(MORE_WARNINGS)
+ CFLAGS=-O2 -DNDEBUG $(WFLAGS) $(MORECFLAGS)
+-CXX=g++ $(CFLAGS)
+-LINK=g++
++CXX=$(TARGET_CXX) $(CFLAGS)
++LINK=$(TARGET_LINK)
+ THREAD_LFLAGS=-lpthread
+
+ INSTALL=/usr/bin/install -c
--- /dev/null
+--- a/bon_file.cpp
++++ b/bon_file.cpp
+@@ -464,25 +464,37 @@ int COpenTest::delete_sequential(BonTime
+ }
+ if(m_number_directories != 1)
+ {
+- if(chdir("..") || rmdir(buf))
++ if(chdir(".."))
+ {
++ io_error("chdir");
++ return -1;
++ }
++ if(rmdir(buf))
++ {
++ fprintf(stderr, "Unable to delete directory '%s'\n", buf);
+ io_error("rmdir");
+ return -1;
+ }
+ }
+ }
+- if(chdir("..") || rmdir(m_dirname))
++ if(count != m_number)
+ {
+- io_error("rmdir");
++ fprintf(stderr, "Expected %d files but only got %d\n", m_number, count);
+ return -1;
+ }
+- delete m_dirname;
+- m_dirname = NULL;
+- if(count != m_number)
++ if(chdir(".."))
+ {
+- fprintf(stderr, "Expected %d files but only got %d\n", m_number, count);
++ io_error("chdir");
++ return -1;
++ }
++ if(rmdir(m_dirname))
++ {
++ fprintf(stderr, "Unable to delete directory '%s'\n", m_dirname);
++ io_error("rmdir");
+ return -1;
+ }
++ delete m_dirname;
++ m_dirname = NULL;
+ sync();
+ timer.stop_and_record(DelSeq);
+ timer.add_latency(DelSeq, dur.getMax());
PKG_NAME:=btrfs-progs
PKG_VERSION:=3.19.1
-PKG_RELEASE:=3
+PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)-v$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/linux/kernel/people/kdave/btrfs-progs/
+++ /dev/null
-Index: btrfs-progs-v3.19.1/mkfs.c
-===================================================================
---- btrfs-progs-v3.19.1.orig/mkfs.c
-+++ btrfs-progs-v3.19.1/mkfs.c
-@@ -31,7 +31,7 @@
- #include <getopt.h>
- #include <uuid/uuid.h>
- #include <ctype.h>
--#include <sys/xattr.h>
-+#include <attr/xattr.h>
- #include <limits.h>
- #include <linux/limits.h>
- #include <blkid/blkid.h>
-Index: btrfs-progs-v3.19.1/props.c
-===================================================================
---- btrfs-progs-v3.19.1.orig/props.c
-+++ btrfs-progs-v3.19.1/props.c
-@@ -17,7 +17,7 @@
- #include <sys/stat.h>
- #include <sys/ioctl.h>
- #include <sys/types.h>
--#include <sys/xattr.h>
-+#include <attr/xattr.h>
- #include <fcntl.h>
- #include <unistd.h>
-
-Index: btrfs-progs-v3.19.1/cmds-receive.c
-===================================================================
---- btrfs-progs-v3.19.1.orig/cmds-receive.c
-+++ btrfs-progs-v3.19.1/cmds-receive.c
-@@ -34,7 +34,7 @@
- #include <sys/ioctl.h>
- #include <sys/time.h>
- #include <sys/types.h>
--#include <sys/xattr.h>
-+#include <attr/xattr.h>
- #include <uuid/uuid.h>
-
- #include "ctree.h"
-Index: btrfs-progs-v3.19.1/cmds-restore.c
-===================================================================
---- btrfs-progs-v3.19.1.orig/cmds-restore.c
-+++ btrfs-progs-v3.19.1/cmds-restore.c
-@@ -32,7 +32,7 @@
- #include <regex.h>
- #include <getopt.h>
- #include <sys/types.h>
--#include <sys/xattr.h>
-+#include <attr/xattr.h>
-
- #include "ctree.h"
- #include "disk-io.h"
-Index: btrfs-progs-v3.19.1/Makefile.in
-===================================================================
---- btrfs-progs-v3.19.1.orig/Makefile.in
-+++ btrfs-progs-v3.19.1/Makefile.in
-@@ -21,7 +21,7 @@ CFLAGS = @CFLAGS@ \
- LDFLAGS = @LDFLAGS@ \
- -rdynamic
-
--LIBS = @UUID_LIBS@ @BLKID_LIBS@ @ZLIB_LIBS@ @LZO2_LIBS@ -L. -pthread
-+LIBS = @ATTR_LIBS@ @UUID_LIBS@ @BLKID_LIBS@ @ZLIB_LIBS@ @LZO2_LIBS@ -L. -pthread
- LIBBTRFS_LIBS = $(LIBS)
-
- # Static compilation flags
-Index: btrfs-progs-v3.19.1/configure.ac
-===================================================================
---- btrfs-progs-v3.19.1.orig/configure.ac
-+++ btrfs-progs-v3.19.1/configure.ac
-@@ -115,6 +115,9 @@ dnl
- dnl The default PKG_CHECK_MODULES() action-if-not-found is end the
- dnl execution with error. The static libs are optional.
-
-+PKG_CHECK_MODULES(ATTR, [libattr])
-+PKG_STATIC(BLKID_LIBS_STATIC, [libattr])
-+
- PKG_CHECK_MODULES(BLKID, [blkid])
- PKG_STATIC(BLKID_LIBS_STATIC, [blkid])
-
include $(TOPDIR)/rules.mk
PKG_NAME:=ccid
-PKG_VERSION:=1.4.20
+PKG_VERSION:=1.4.22
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=https://alioth.debian.org/frs/download.php/file/4140
-PKG_MD5SUM:=a73c203cfe27e684850df73630065738
+PKG_SOURCE_URL:=https://alioth.debian.org/frs/download.php/file/4162
+PKG_MD5SUM:=150e1edc449ad394572dd72490b7b6f4
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_LICENSE:=LGPL-2.1+
PKG_LICENSE_FILES:=COPYING
#
-# Copyright (C) 2006-2015 OpenWrt.org
+# Copyright (C) 2006-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=collectd
-PKG_VERSION:=5.5.0
-PKG_RELEASE:=5
+PKG_VERSION:=5.5.1
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://collectd.org/files/
-PKG_MD5SUM:=c39305ef5514b44238b0d31f77e29e6a
+PKG_MD5SUM:=fd24b947cef9351ce3e2d6d2a0762e18
PKG_FIXUP:=autoreconf
PKG_REMOVE_FILES:=aclocal.m4 libltdl/aclocal.m4
notify_desktop \
notify_email \
numa \
- nut \
openldap \
openvz \
oracle \
network \
nginx \
ntpd \
+ nut \
olsrd \
onewire \
openvpn \
--disable-debug \
--enable-daemon \
--with-nan-emulation \
- --with-perl-bindings= \
+ --without-perl-bindings \
--without-libgcrypt
CONFIGURE_VARS+= \
$(eval $(call BuildPlugin,network,network input/output,network))
$(eval $(call BuildPlugin,nginx,nginx status input,nginx,+PACKAGE_collectd-mod-nginx:libcurl))
$(eval $(call BuildPlugin,ntpd,NTP daemon status input,ntpd,))
-#$(eval $(call BuildPlugin,nut,UPS monitoring input,nut,+PACKAGE_collectd-mod-nut:nut))
+$(eval $(call BuildPlugin,nut,UPS monitoring input,nut,+PACKAGE_collectd-mod-nut:nut))
$(eval $(call BuildPlugin,olsrd,OLSRd status input,olsrd,))
$(eval $(call BuildPlugin,onewire,onewire sensor input,onewire,+PACKAGE_collectd-mod-onewire:libow-capi @BROKEN))
$(eval $(call BuildPlugin,openvpn,OpenVPN traffic/compression input,openvpn,))
#!/bin/sh /etc/rc.common
-# Copyright (C) 2006-2011 OpenWrt.org
+# Copyright (C) 2006-2016 OpenWrt.org
START=80
-SERVICE_USE_PID=1
+USE_PROCD=1
-start() {
- mkdir -m 0755 -p /var/lib/collectd
- service_start /usr/sbin/collectd
+start_service() {
+ procd_open_instance
+ procd_set_param command /usr/sbin/collectd -f
+ procd_close_instance
}
-stop() {
- service_stop /usr/sbin/collectd
-}
/* consolidation_functions = */ NULL,
/* consolidation_functions_num = */ 0,
-@@ -1093,6 +1096,14 @@ static int rrd_config (const char *key,
+@@ -1110,6 +1113,14 @@ static int rrd_config (const char *key,
free (value_copy);
}
double tmp = atof (value);
--- a/src/utils_rrdcreate.c
+++ b/src/utils_rrdcreate.c
-@@ -217,6 +217,9 @@ static int rra_get (char ***ret, const v
+@@ -213,6 +213,9 @@ static int rra_get (char ***ret, const v
rts_num = rra_timespans_num;
}
+ rra_types_num = 1;
+
rra_max = rts_num * rra_types_num;
+ assert (rra_max > 0);
- if ((rra_def = (char **) malloc ((rra_max + 1) * sizeof (char *))) == NULL)
--- a/src/utils_rrdcreate.h
+++ b/src/utils_rrdcreate.h
@@ -41,6 +41,8 @@ struct rrdcreate_config_s
--- a/src/daemon/configfile.c
+++ b/src/daemon/configfile.c
-@@ -109,7 +109,7 @@ static cf_global_option_t cf_global_opti
+@@ -111,7 +111,7 @@ static cf_global_option_t cf_global_opti
{"BaseDir", NULL, PKGLOCALSTATEDIR},
{"PIDFile", NULL, PIDFILE},
{"Hostname", NULL, NULL},
+++ b/version-gen.sh
@@ -2,7 +2,7 @@
- DEFAULT_VERSION="5.5.0.git"
+ DEFAULT_VERSION="5.5.1.git"
-VERSION="`git describe 2> /dev/null | grep collectd | sed -e 's/^collectd-//'`"
+#VERSION="`git describe 2> /dev/null | grep collectd | sed -e 's/^collectd-//'`"
rf->rf_effective_interval = rf->rf_interval;
pthread_mutex_lock (&read_lock);
-
+++ /dev/null
-Backport of 780e6a76021a240e95007a04b723d827120afa95
-Subject: [PATCH] build: add libavltree, libcommon & libheap dependencies
-
-Otherwise it can break on very parallel builds since collectd link time
-arrives before one or more of these were built.
-
---- a/src/daemon/Makefile.am
-+++ b/src/daemon/Makefile.am
-@@ -49,7 +49,7 @@ collectd_CPPFLAGS = $(AM_CPPFLAGS) $(LT
- collectd_CFLAGS = $(AM_CFLAGS)
- collectd_LDFLAGS = -export-dynamic
- collectd_LDADD = libavltree.la libcommon.la libheap.la -lm
--collectd_DEPENDENCIES =
-+collectd_DEPENDENCIES = libavltree.la libcommon.la libheap.la
-
- # Link to these libraries..
- if BUILD_WITH_LIBRT
--- /dev/null
+Patch reverts upstream commit:
+https://github.com/collectd/collectd/commit/6124da7a48f28f54fc09ebeb942d1037516fe6ab
+
+The commit changed the detection path due to FreeBSD issues,
+but apparently affects also Openwrt buildroot negatively.
+
+Original explanation:
+ From 6124da7a48f28f54fc09ebeb942d1037516fe6ab Mon Sep 17 00:00:00 2001
+ Subject: [PATCH] Fix libmodbus detection on FreeBSD
+
+ We look for modbus/modbus.h in /usr/local/include/modbus
+ but we should look for modbus.h
+
+ This is only an issue on FreeBSD since /usr/local/include is not
+ in the default search path.
+
+Reversed patch to be applied:
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -2585,7 +2585,7 @@ then
+ SAVE_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $with_libmodbus_cflags"
+
+- AC_CHECK_HEADERS(modbus.h, [], [with_libmodbus="no (modbus.h not found)"])
++ AC_CHECK_HEADERS(modbus/modbus.h, [], [with_libmodbus="no (modbus/modbus.h not found)"])
+
+ CPPFLAGS="$SAVE_CPPFLAGS"
+ fi
+--- a/src/modbus.c
++++ b/src/modbus.c
+@@ -27,7 +27,7 @@
+
+ #include <netdb.h>
+
+-#include <modbus.h>
++#include <modbus/modbus.h>
+
+ #ifndef LIBMODBUS_VERSION_CHECK
+ /* Assume version 2.0.3 */
--- a/configure.ac
+++ b/configure.ac
-@@ -589,6 +589,9 @@ AC_CHECK_HEADERS(net/pfvar.h,
+@@ -663,6 +663,9 @@ AC_CHECK_HEADERS(net/pfvar.h,
have_termios_h="no"
AC_CHECK_HEADERS(termios.h, [have_termios_h="yes"])
# For the turbostat plugin
have_asm_msrindex_h="no"
AC_CHECK_HEADERS(asm/msr-index.h, [have_asm_msrindex_h="yes"])
-@@ -5171,6 +5174,7 @@ plugin_interface="no"
+@@ -5241,6 +5244,7 @@ plugin_interface="no"
plugin_ipmi="no"
plugin_ipvs="no"
plugin_irq="no"
plugin_load="no"
plugin_log_logstash="no"
plugin_memory="no"
-@@ -5562,6 +5566,7 @@ AC_PLUGIN([ipmi], [$plugin_ipmi],
+@@ -5638,6 +5642,7 @@ AC_PLUGIN([ipmi], [$plugin_ipmi],
AC_PLUGIN([iptables], [$with_libiptc], [IPTables rule counters])
AC_PLUGIN([ipvs], [$plugin_ipvs], [IPVS connection statistics])
AC_PLUGIN([irq], [$plugin_irq], [IRQ statistics])
AC_PLUGIN([java], [$with_java], [Embed the Java Virtual Machine])
AC_PLUGIN([load], [$plugin_load], [System load])
AC_PLUGIN([logfile], [yes], [File logging plugin])
-@@ -5891,6 +5896,7 @@ Configuration:
+@@ -5967,6 +5972,7 @@ Configuration:
oracle . . . . . . . $with_oracle
protobuf-c . . . . . $have_protoc_c
python . . . . . . . $with_python
Features:
daemon mode . . . . . $enable_daemon
-@@ -5940,6 +5946,7 @@ Configuration:
+@@ -6016,6 +6022,7 @@ Configuration:
iptables . . . . . . $enable_iptables
ipvs . . . . . . . . $enable_ipvs
irq . . . . . . . . . $enable_irq
--- a/src/collectd.conf.in
+++ b/src/collectd.conf.in
@@ -128,6 +128,7 @@
- #@BUILD_PLUGIN_IPMI_TRUE@LoadPlugin ipmi
+ #@BUILD_PLUGIN_IPTABLES_TRUE@LoadPlugin iptables
#@BUILD_PLUGIN_IPVS_TRUE@LoadPlugin ipvs
#@BUILD_PLUGIN_IRQ_TRUE@LoadPlugin irq
+#@BUILD_PLUGIN_IWINFO_TRUE@LoadPlugin iwinfo
# JVMArg "-Djava.class.path=@prefix@/share/collectd/java/collectd-api.jar"
--- a/src/collectd.conf.pod
+++ b/src/collectd.conf.pod
-@@ -2572,6 +2572,27 @@ and all other interrupts are collected.
+@@ -2608,6 +2608,27 @@ and all other interrupts are collected.
=back
+}
--- a/src/Makefile.am
+++ b/src/Makefile.am
-@@ -459,6 +459,13 @@ irq_la_SOURCES = irq.c \
+@@ -454,6 +454,13 @@ irq_la_SOURCES = irq.c
irq_la_LDFLAGS = $(PLUGIN_LDFLAGS)
endif
+if BUILD_PLUGIN_IWINFO
+pkglib_LTLIBRARIES += iwinfo.la
-+iwinfo_la_SOURCES = iwinfo.c utils_ignorelist.c utils_ignorelist.h
++iwinfo_la_SOURCES = iwinfo.c
+iwinfo_la_LDFLAGS = -module -avoid-version
+iwinfo_la_LIBADD = -liwinfo
+endif
java_la_SOURCES = java.c
--- a/src/types.db
+++ b/src/types.db
-@@ -227,6 +227,7 @@ voltage value:GAUGE:U:U
+@@ -228,6 +228,7 @@ voltage value:GAUGE:U:U
vs_memory value:GAUGE:0:9223372036854775807
vs_processes value:GAUGE:0:65535
vs_threads value:GAUGE:0:65535
--- a/src/ping.c
+++ b/src/ping.c
-@@ -656,7 +656,7 @@ static int ping_read (void) /* {{{ */
+@@ -658,7 +658,7 @@ static int ping_read (void) /* {{{ */
/ ((double) (pkg_recv * (pkg_recv - 1))));
/* Calculate drop rate. */
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=cryptodev-linux
-PKG_VERSION:=1.7
-PKG_RELEASE:=2
+PKG_VERSION:=1.8
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://download.gna.org/cryptodev-linux/
-PKG_MD5SUM:=0b63b3481cf2c90386b35f057481d36b
+PKG_MD5SUM:=02644cc4cd02301e0b503a332eb2f0b5
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
+++ /dev/null
-Index: cryptodev-linux-1.7/ioctl.c
-===================================================================
---- cryptodev-linux-1.7.orig/ioctl.c
-+++ cryptodev-linux-1.7/ioctl.c
-@@ -546,7 +546,7 @@ static int
- clonefd(struct file *filp)
- {
- int ret;
-- ret = get_unused_fd();
-+ ret = get_unused_fd_flags(0);
- if (ret >= 0) {
- get_file(filp);
- fd_install(ret, filp);
include $(TOPDIR)/rules.mk
PKG_NAME:=cryptsetup
-PKG_VERSION:=1.6.7
+PKG_VERSION:=1.7.0
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0+ LGPL-2.1+
PKG_LICENSE_FILES:=COPYING COPYING.LGPL
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=@KERNEL/linux/utils/cryptsetup/v1.6
-PKG_MD5SUM:=918406eb5d2e2f5a7348c432ea9b1473
+PKG_SOURCE_URL:=@KERNEL/linux/utils/cryptsetup/v1.7
+PKG_MD5SUM:=56c385fe87fc2b6873df4b7f89202d0f
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
# Make sure to also update the dbus-x package
PKG_NAME:=dbus
-PKG_VERSION:=1.10.0
+PKG_VERSION:=1.10.4
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://dbus.freedesktop.org/releases/dbus/
-PKG_MD5SUM:=5af6297348107a906c8449817a728b3b
+PKG_MD5SUM:=27b8e99ffad603b8acfa25201c6e3d5c
PKG_MAINTAINER:=Steven Barth <cyrus@openwrt.org>
PKG_LICENSE:=AFL-2.1
--disable-verbose-mode \
--disable-xml-docs \
--with-dbus-user=root \
- --with-dbus-daemondir="$(STAGIND_DIR_HOST)/bin" \
- --with-system-socket="$(STAGING_DIR_HOST)/var/run/dbus/system_bus_socket" \
- --with-system-pid-file="$(STAGING_DIR_HOST)/var/run/dbus.pid" \
+ --with-dbus-daemondir="$(STAGIND_DIR)/host/bin" \
+ --with-system-socket="$(STAGING_DIR)/host/var/run/dbus/system_bus_socket" \
+ --with-system-pid-file="$(STAGING_DIR)/host/var/run/dbus.pid" \
--without-x \
- --libexecdir="$(STAGING_DIR_HOST)/lib/dbus-1"
+ --libexecdir="$(STAGING_DIR)/host/lib/dbus-1"
HOST_CONFIGURE_VARS+= \
ac_cv_have_abstract_sockets="yes" \
include $(TOPDIR)/rules.mk
PKG_NAME:=dosfstools
-PKG_VERSION:=3.0.27
+PKG_VERSION:=3.0.28
PKG_RELEASE:=1
PKG_LICENSE:=GPL-3.0+
PKG_MAINTAINER:=David Bonnes <david.bonnes@gmail.com>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://daniel-baumann.ch/files/software/dosfstools \
+PKG_SOURCE_URL:=https://github.com/dosfstools/dosfstools/releases/download/v$(PKG_VERSION)/ \
http://fossies.org/linux/misc
-PKG_MD5SUM:=2e31e7bdf92998e41ed17de505a4a552
+PKG_MD5SUM:=64e3b3a59b51d2a97d7ac38b23a124bb
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk
define Package/dosfstools/Default
SECTION:=utils
CATEGORY:=Utilities
- URL:=http://www.daniel-baumann.ch/software/dosfstools/
+ URL:=https://github.com/dosfstools
SUBMENU:=Filesystem
DEPENDS:=$(ICONV_DEPENDS)
endef
--- /dev/null
+Index: dosfstools-3.0.28/src/mkfs.fat.c
+===================================================================
+--- dosfstools-3.0.28.orig/src/mkfs.fat.c
++++ dosfstools-3.0.28/src/mkfs.fat.c
+@@ -1412,7 +1412,7 @@ int main(int argc, char **argv)
+
+ gettimeofday(&create_timeval, NULL);
+ create_time = create_timeval.tv_sec;
+- volume_id = (u_int32_t) ((create_timeval.tv_sec << 20) | create_timeval.tv_usec); /* Default volume ID = creation time, fudged for more uniqueness */
++ volume_id = (uint32_t) ((create_timeval.tv_sec << 20) | create_timeval.tv_usec); /* Default volume ID = creation time, fudged for more uniqueness */
+ check_atari();
+
+ printf("mkfs.fat " VERSION " (" VERSION_DATE ")\n");
include $(TOPDIR)/rules.mk
PKG_NAME:=dump1090
-PKG_VERSION:=2015-10-08
+PKG_VERSION:=2015-11-22
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=git://github.com/mutability/dump1090.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=c55c71b57cf34e90d95afd52449a05a4b6dbda03
+PKG_SOURCE_VERSION:=497f88fe1c597652aca23c1035ddb55a9f6c274d
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
option no_fix '0'
option no_crc_check '0'
option phase_enhance '0'
- option agressive '0'
+ option aggressive '0'
option mlat '0'
option stats '0'
option stats_range '0'
append_bool "$cfg" no_fix "--no-fix"
append_bool "$cfg" no_crc_check "--no-crc-check"
append_bool "$cfg" phase_enhance "--phase-enhance"
- append_bool "$cfg" agressive "--agressive"
+ append_bool "$cfg" aggressive "--aggressive"
append_bool "$cfg" mlat "--mlat"
append_bool "$cfg" stats "--stats"
append_bool "$cfg" stats_range "--stats-range"
--- /dev/null
+#
+# Copyright (C) 2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=dvtm
+PKG_VERSION:=0.15
+PKG_RELEASE:=1
+
+PKG_SOURCE:=dvtm-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://www.brain-dump.org/projects/dvtm/
+PKG_MD5SUM:=887e162a3abe2ad8e86caefab20cdd63
+PKG_MAINTAINER:=Yunfan Jiang <jyf1987@gmail.com>
+
+PKG_LICENSE:=MIT/X
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/dvtm
+ SECTION:=utils
+ CATEGORY:=Utilities
+ DEPENDS:=+libncursesw
+ TITLE:=dynamic virtual terminal manager
+ URL:=http://www.brain-dump.org/projects/dvtm/
+endef
+
+define Package/dvtm/description
+ dvtm brings the concept of tiling window management, popularized by X11-window managers like dwm to the console. As a console window manager it tries to make it easy to work with multiple console based programs.
+endef
+
+define Package/dvtm/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/dvtm $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,dvtm))
--- /dev/null
+# udev package config
+
+menu "Configuration"
+ depends on PACKAGE_eudev
+
+config EUDEV_EXTRA_ata_id
+ bool "Install eudev ata_id callout"
+ default y
+ help
+ ata_id - udev callout to read product/serial number
+ from ATA drives
+
+config EUDEV_EXTRA_blkid
+ bool "Use blkid to identify block devices"
+ default y
+ help
+ blkid - make use of libblkid to identify block devices
+
+config EUDEV_EXTRA_cdrom_id
+ bool "Install eudev cdrom_id callout"
+ default y
+ help
+ cdrom_id - udev callout to determine the capabilities
+ of optical drives and media
+
+config EUDEV_EXTRA_collect
+ bool "Install eudev collect"
+ default n
+ help
+ Adds ID to the list governed by <checkpoint>
+
+config EUDEV_EXTRA_input_id
+ bool "Install input_id callout"
+ default y
+ help
+ input_id - udev callout to classify input devices
+
+config EUDEV_EXTRA_kmod
+ bool "Use kmod for loading kernel modules"
+ default n
+ help
+ kmod - make use of kmod to load kernel modules on demand
+
+config EUDEV_EXTRA_mtd_probe
+ bool "Install mtd_probe callout"
+ default y
+ help
+ mtd_probe - udev callout to probe mtd devices
+
+config EUDEV_EXTRA_rule_generator
+ bool "Install (legacy) eudev rule_generator"
+ default n
+ help
+
+config EUDEV_EXTRA_scsi_id
+ bool "Install eudev scsi_id callout"
+ default y
+ help
+ scsi_id - retrieve and generate a unique SCSI identifier
+
+config EUDEV_EXTRA_v4l_id
+ bool "Install eudev v4l_id callout"
+ default y
+ help
+ v4l_id - udev callout to identify Video4Linux devices
+
+
+endmenu
--- /dev/null
+#
+# Copyright (C) 2006-2008 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=eudev
+PKG_VERSION:=3.1.5
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://dev.gentoo.org/~blueness/eudev/
+PKG_MD5SUM:=c4dace42deecede102b6c01904042acc
+PKG_LICENSE:=GPL-2.0
+
+include $(INCLUDE_DIR)/package.mk
+
+PKG_BUILD_DEPENDS:=gperf/host
+PKG_FIXUP:=autoreconf
+PKG_INSTALL=1
+
+define Package/eudev
+ SECTION:=base
+ CATEGORY:=Base system
+ TITLE:=Dynamic device management subsystem
+ URL:=https://wiki.gentoo.org/wiki/Project:Eudev
+ MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
+ MENU:=1
+ DEPENDS:=+librt +EUDEV_EXTRA_blkid:libblkid +EUDEV_EXTRA_kmod:libkmod
+ PROVIDES:=udev
+ CONFLICTS:=udev
+endef
+
+define Package/eudev/description
+udev allows Linux users to have a dynamic /dev directory and it
+provides the ability to have persistent device names.
+eudev is a fork of systemd-udev with the goal of obtaining better
+compatibility with existing software such as OpenRC and Upstart, older
+kernels, various toolchains and anything else required by users and
+various distributions.
+endef
+
+define Package/eudev/conffiles
+/etc/udev/udev.conf
+endef
+
+define Package/eudev/config
+ source "$(SOURCE)/Config.in"
+endef
+
+CONFIGURE_ARGS += \
+ --prefix=/usr --exec-prefix= --sysconfdir=/etc \
+ --libexecdir=/lib/udev --sbindir=/sbin \
+ --disable-hwdb --disable-introspection --disable-manpages \
+ --disable-selinux \
+ $(if $(CONFIG_EUDEV_EXTRA_blkid),--enable-blkid,--disable-blkid) \
+ $(if $(CONFIG_EUDEV_EXTRA_kmod),--enable-kmod,--disable-kmod)
+
+
+eudev-extra-lib-bin-$(CONFIG_EUDEV_EXTRA_ata_id) += ata_id
+
+eudev-extra-rules-$(CONFIG_EUDEV_EXTRA_blkid) += 60-persistent-storage.rules
+
+eudev-extra-lib-bin-$(CONFIG_EUDEV_EXTRA_cdrom_id) += cdrom_id
+eudev-extra-rules-$(CONFIG_EUDEV_EXTRA_cdrom_id) += 60-cdrom_id.rules
+
+eudev-extra-lib-bin-$(CONFIG_EUDEV_EXTRA_collect) += collect
+
+eudev-extra-rules-$(CONFIG_EUDEV_EXTRA_input_id) += 60-persistent-input.rules
+
+eudev-extra-lib-bin-$(CONFIG_EUDEV_EXTRA_mtd_probe) += mtd_probe
+eudev-extra-rules-$(CONFIG_EUDEV_EXTRA_mtd_probe) += 75-probe_mtd.rules
+
+eudev-extra-lib-bin-$(CONFIG_EUDEV_EXTRA_scsi_id) += scsi_id
+
+eudev-extra-lib-bin-$(CONFIG_EUDEV_EXTRA_v4l_id) += v4l_id
+eudev-extra-rules-$(CONFIG_EUDEV_EXTRA_v4l_id) += 60-persistent-v4l.rules
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)/usr/include
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/libudev.h $(1)/usr/include
+ $(INSTALL_DIR) $(1)/usr/share/pkgconfig
+ $(CP) $(PKG_INSTALL_DIR)/usr/share/pkgconfig/udev.pc $(1)/usr/share/pkgconfig
+ $(INSTALL_DIR) $(1)/lib
+ $(CP) $(PKG_INSTALL_DIR)/lib/libudev.so* $(1)/lib
+ $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+ $(CP) $(PKG_INSTALL_DIR)/lib/pkgconfig/libudev.pc $(1)/usr/lib/pkgconfig
+endef
+
+define Package/eudev/install
+ $(INSTALL_DIR) $(1)/etc/udev/rules.d
+ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/etc/udev/udev.conf $(1)/etc/udev
+
+ $(INSTALL_DIR) $(1)/sbin
+ $(INSTALL_BIN) \
+ $(PKG_INSTALL_DIR)/usr/bin/udevadm \
+ $(PKG_INSTALL_DIR)/sbin/udevd \
+ $(1)/sbin
+
+ $(INSTALL_DIR) $(1)/lib/udev/rules.d
+ $(INSTALL_DATA) \
+ $(addprefix $(PKG_INSTALL_DIR)/lib/udev/rules.d/, \
+ $(eudev-extra-rules-y)) \
+ $(addprefix $(PKG_INSTALL_DIR)/lib/udev/rules.d/, \
+ 50-udev-default.rules \
+ 60-block.rules \
+ 60-drm.rules \
+ 60-evdev.rules \
+ 60-persistent-alsa.rules \
+ 60-persistent-storage-tape.rules \
+ 60-serial.rules \
+ 64-btrfs.rules \
+ 70-mouse.rules \
+ 75-net-description.rules \
+ 78-sound-card.rules \
+ 80-net-name-slot.rules) \
+ $(1)/lib/udev/rules.d
+
+ $(INSTALL_DIR) $(1)/lib
+ $(CP) $(PKG_INSTALL_DIR)/lib/libudev.so* $(1)/lib
+
+ $(INSTALL_DIR) $(1)/lib/udev
+ifneq ($(eudev-extra-lib-bin-y),)
+ $(INSTALL_BIN) \
+ $(addprefix $(PKG_INSTALL_DIR)/lib/udev/, \
+ $(eudev-extra-lib-bin-y)) \
+ $(1)/lib/udev/
+endif
+ifneq ($(eudev-extra-lib-data-y),)
+ $(INSTALL_DATA) \
+ $(addprefix $(PKG_INSTALL_DIR)/lib/udev/, \
+ $(eudev-extra-lib-data-y)) \
+ $(1)/lib/udev/
+endif
+endef
+
+$(eval $(call BuildPackage,eudev))
--- /dev/null
+Index: eudev-3.1.5/src/mtd_probe/mtd_probe.h
+===================================================================
+--- eudev-3.1.5.orig/src/mtd_probe/mtd_probe.h
++++ eudev-3.1.5/src/mtd_probe/mtd_probe.h
+@@ -18,6 +18,7 @@
+ */
+
+ #include <mtd/mtd-user.h>
++#include <stdint.h>
+
+ #include "macro.h"
+
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=evtest
+PKG_REV:=ab140a2dab1547f7deb5233be6d94a388cf08b26
+PKG_VERSION:=1.33
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=git://anongit.freedesktop.org/evtest
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_VERSION:=$(PKG_REV)
+
+PKG_MAINTAINER:=Pushpal Sidhu (psidhu@gateworks.com)
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=COPYING
+
+PKG_FIXUP:=autoreconf
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/autotools.mk
+
+define Package/evtest
+ SECTION:=utils
+ CATEGORY:=Utilities
+ TITLE:=Event Test Program
+endef
+
+define Package/evtest/description
+ Utility to test event driven devices such as keyboards and mice
+endef
+
+define Package/evtest/install
+ $(INSTALL_DIR) $(1)/sbin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/evtest $(1)/sbin/
+endef
+
+$(eval $(call BuildPackage,evtest))
PKG_NAME:=flashrom
PKG_VERSION:=0.9.8
-PKG_RELEASE:=5
+PKG_RELEASE:=6
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://download.flashrom.org/releases
--- /dev/null
+diff -uprN a/linux_spi.c b/linux_spi.c
+--- a/flash.h 2015-02-08 16:57:52.000000000 -0500
++++ b/flash.h 2016-01-08 20:09:51.599387507 -0500
+@@ -30,6 +30,7 @@
+ #include <stdio.h>
+ #include <stdint.h>
+ #include <stddef.h>
++#include <sys/io.h>
+ #include <stdbool.h>
+ #if IS_WINDOWS
+ #include <windows.h>
+
include $(TOPDIR)/rules.mk
PKG_NAME:=gammu
-PKG_VERSION:=1.36.6
+PKG_VERSION:=1.37.0
PKG_RELEASE:=1
PKG_SOURCE_URL:=http://dl.cihar.com/gammu/releases/
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_MD5SUM:=9047f0598602144a99153f5e61104529
+PKG_MD5SUM:=6e249e6f93461f1fc215ec85cec67740
PKG_MAINTAINER:=Vitaly Protsko <villy@sft.ru>
PKG_LICENCE:=GPL-2.0
include $(TOPDIR)/rules.mk
PKG_NAME:=gnupg
-PKG_VERSION:=1.4.19
-PKG_RELEASE:=1
+PKG_VERSION:=1.4.20
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=ftp://ftp.franken.de/pub/crypt/mirror/ftp.gnupg.org/gcrypt/gnupg \
ftp://ftp.gnupg.org/gcrypt/gnupg
-PKG_MD5SUM:=3af4ab5b3113b3e28d3551ecf9600785
+PKG_MD5SUM:=b7af897a041c03c8ad1c7c466b54d10d
PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILES:=COPYING
include $(INCLUDE_DIR)/package.mk
-define Package/gnupg
+define Package/gnupg/Default
SECTION:=utils
CATEGORY:=Utilities
DEPENDS:=+zlib +libncurses +libreadline
URL:=http://www.gnupg.org/
endef
+define Package/gnupg
+ $(call Package/gnupg/Default)
+ MENU:=1
+endef
+
+define Package/gnupg-utils
+ $(call Package/gnupg/Default)
+ DEPENDS:=gnupg +libcurl
+ TITLE:=Key management utilities for GnuPG
+endef
+
define Package/gnupg/description
GnuPG is GNU's tool for secure communication and data storage.
It can be used to encrypt data and to create digital signatures.
with PGP2 because it uses IDEA (which is patented worldwide).
endef
+define Package/gnupg-utils/description
+ Key management utilies for GnuPG.
+ This package is needed to import keys from a keyserver.
+endef
+
CONFIGURE_ARGS += \
--disable-rpath \
--disable-asm \
--disable-card-support \
--disable-agent-support \
--disable-bzip2 \
- --disable-exec \
--disable-ldap \
- --disable-hkp \
--disable-finger \
- --disable-ftp \
--disable-dns-srv \
- --enable-fake-curl \
--disable-regex \
MAKE_FLAGS += \
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/gpg $(1)/usr/bin/
endef
+define Package/gnupg-utils/install
+ $(INSTALL_DIR) $(1)/usr/lib/gnupg
+ for file in gpgkeys_curl gpgkeys_hkp; do \
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/gnupg/$$$$file \
+ $(1)/usr/lib/gnupg/; \
+ done
+endef
+
$(eval $(call BuildPackage,gnupg))
+$(eval $(call BuildPackage,gnupg-utils))
libgpsmm=no \
libQgpsmm=no \
bluez=no \
- strip=no \
+ nostrip=yes \
python=no \
implicit_link=no \
chrpath=no
#
-# Copyright (C) 2010-2015 OpenWrt.org
+# Copyright (C) 2010-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=grep
-PKG_VERSION:=2.22
+PKG_VERSION:=2.23
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@GNU/grep
-PKG_MD5SUM:=e1015e951a49a82b02e38891026ef5df
+PKG_MD5SUM:=f46aa9d0d2577b9212a104348a286787
PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILES:=COPYING
PKG_VERSION:=3.1.2
PKG_RELEASE:=1
-PKG_SOURCE_URL:=http://dl.lm-sensors.org/i2c-tools/releases/
+PKG_SOURCE_URL:=http://dl.lm-sensors.org/i2c-tools/releases/ \
+ http://fossies.org/linux/misc/
+
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_MD5SUM:=7104a1043d11a5e2c7b131614eb1b962
}
:windows Bindings common to all windows
-type ^@ TO ÿ
abort ^C
abort ^K Q
abort ^K ^Q
:query Single-key query window
:inherit windows
-:querya Single-key query window for quoting
-type ^@ TO ÿ
-
-:querysr Search & replace query window
-type ^@ TO ÿ
-
:shell Input to shell windows
:inherit main
"\ 3" ^C Abort
include $(TOPDIR)/rules.mk
PKG_NAME:=LVM2
-PKG_VERSION:=2.02.132
-PKG_RELEASE:=1
+PKG_VERSION:=2.02.141
+PKG_RELEASE:=2
PKG_LICENSE:=GPL-2.0 LGPL-2.1
PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tgz
-PKG_SOURCE_URL:=ftp://sources.redhat.com/pub/lvm2
-PKG_MD5SUM:=80af5af726949bbbb2aceb15b24b7d20
+PKG_SOURCE_URL:=ftp://sources.redhat.com/pub/lvm2/releases
+PKG_MD5SUM:=0bb6261f7ecb9ef70fd773c6a952de67
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME).$(PKG_VERSION)
CATEGORY:=Libraries
TITLE:=The Linux Kernel Device Mapper userspace library
URL:=http://sourceware.org/dm/
- DEPENDS:=+kmod-dm +libpthread
+ DEPENDS:=+kmod-dm +libpthread +libuuid
endef
define Package/libdevmapper/description
--- a/lib/commands/toolcontext.c
+++ b/lib/commands/toolcontext.c
-@@ -1740,8 +1740,10 @@ struct cmd_context *create_toolcontext(u
+@@ -1741,8 +1741,10 @@ struct cmd_context *create_toolcontext(u
unsigned set_filters)
{
struct cmd_context *cmd;
#ifdef M_MMAP_MAX
mallopt(M_MMAP_MAX, 0);
-@@ -1777,7 +1779,7 @@ struct cmd_context *create_toolcontext(u
+@@ -1778,7 +1780,7 @@ struct cmd_context *create_toolcontext(u
/* FIXME Make this configurable? */
reset_lvm_errno(1);
/* Set in/out stream buffering before glibc */
if (set_buffering) {
/* Allocate 2 buffers */
-@@ -2160,7 +2162,7 @@ void destroy_toolcontext(struct cmd_cont
+@@ -2161,7 +2163,7 @@ void destroy_toolcontext(struct cmd_cont
if (cmd->libmem)
dm_pool_destroy(cmd->libmem);
--- a/lib/mm/memlock.c
+++ b/lib/mm/memlock.c
-@@ -161,12 +161,15 @@ static void _allocate_memory(void)
+@@ -169,12 +169,15 @@ static void _allocate_memory(void)
* memory on free(), this is good enough for our purposes.
*/
while (missing > 0) {
inf = mallinfo();
if (hblks < inf.hblks) {
-@@ -176,9 +179,12 @@ static void _allocate_memory(void)
+@@ -184,9 +187,12 @@ static void _allocate_memory(void)
free(areas[area]);
_size_malloc_tmp /= 2;
} else {
if (area == max_areas && missing > 0) {
/* Too bad. Warn the user and proceed, as things are
-@@ -467,8 +473,13 @@ static void _lock_mem(struct cmd_context
+@@ -475,8 +481,13 @@ static void _lock_mem(struct cmd_context
* will not block memory locked thread
* Note: assuming _memlock_count_daemon is updated before _memlock_count
*/
include $(TOPDIR)/rules.mk
PKG_NAME:=lxc
-PKG_VERSION:=1.1.3
+PKG_VERSION:=1.1.5
PKG_RELEASE:=1
PKG_LICENSE:=LGPL-2.1+ BSD-2-Clause GPL-2.0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://linuxcontainers.org/downloads/lxc/
-PKG_MD5SUM:=197abb5a28ab0b689c737eb1951023fb
+PKG_MD5SUM:=dd9684dde0a58ed13f4f49c855b79a1a
PKG_BUILD_DEPENDS:=lua
PKG_BUILD_PARALLEL:=1
--- a/src/lxc/utils.h
+++ b/src/lxc/utils.h
-@@ -44,11 +44,7 @@ extern char *get_rundir(void);
- extern const char *lxc_global_config_value(const char *option_name);
+@@ -41,11 +41,7 @@ extern int mkdir_p(const char *dir, mode
+ extern char *get_rundir(void);
/* Define getline() if missing from the C library */
-#ifndef HAVE_GETLINE
--- a/src/lxc/bdev.c
+++ b/src/lxc/bdev.c
-@@ -1936,3 +1936,3 @@ static int loop_mount(struct bdev *bdev)
+@@ -1939,7 +1939,7 @@ static int find_free_loopdev(int *retfd,
+
+ static int loop_mount(struct bdev *bdev)
{
- int lfd, ffd = -1, ret = -1;
+ int lfd = -1, ffd = -1, ret = -1;
struct loop_info64 lo;
-@@ -1974,3 +1974,3 @@ out:
+ char loname[100];
+
+@@ -1977,7 +1977,7 @@ out:
+ if (ffd > -1)
+ close(ffd);
if (ret < 0) {
- close(lfd);
+ if (lfd > -1) close(lfd);
bdev->lofd = -1;
+ }
+ return ret;
config MC_EDITOR
bool "Enable internal editor"
- default n
+ default y
help
This option enables the built-in file editor.
- Disabled by default.
+ Enabled by default.
config MC_SUBSHELL
bool "Enable concurrent subshell"
- default n
+ default y
help
This option enables concurrent subshell support.
- Disabled by default.
+ Enabled by default.
config MC_LARGEFILE
bool "Enable largefile support"
config MC_CHARSET
bool "Enable charset support"
- default n
+ default y
help
This option adds support for selecting character set of the text in
the internal viewer and editor and converting it on the fly.
- The implementation is currently incomplete.
- Disabled by default.
+ Enabled by default.
config MC_VFS
bool "Enable virtual filesystem support"
include $(TOPDIR)/rules.mk
PKG_NAME:=mc
-PKG_VERSION:=4.8.14
-PKG_RELEASE:=1.3
-PKG_MAINTAINER:=Dirk Brenken <dibdot@gmail.com>
+PKG_VERSION:=4.8.15
+PKG_RELEASE:=2
+PKG_MAINTAINER:=Dirk Brenken <dirk@brenken.org>
PKG_LICENSE:=GPL-3.0+
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://ftp.midnight-commander.org/
-PKG_MD5SUM:=fbdaddb9edcf8925dcf3231331a8720b
-
+PKG_MD5SUM:=7c1935433866fdf59a3c2d9b7dae81ad
PKG_BUILD_PARALLEL:=1
PKG_FIXUP:=autoreconf
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk
-define Package/mc
- SECTION:=utils
- CATEGORY:=Utilities
- DEPENDS:=+glib2 +libncurses +libmount +MC_VFS:libssh2 $(LIBRPC_DEPENDS) $(ICONV_DEPENDS)
- TITLE:=Midnight Commander - a powerful visual file manager
- URL:=http://www.midnight-commander.org/
- MENU:=1
+define Package/$(PKG_NAME)
+ SECTION:=utils
+ CATEGORY:=Utilities
+ DEPENDS:=+glib2 +libncurses +libmount +MC_VFS:libssh2 $(LIBRPC_DEPENDS) $(ICONV_DEPENDS)
+ TITLE:=Midnight Commander - a powerful visual file manager
+ URL:=http://www.midnight-commander.org/
+ MENU:=1
endef
-define Package/mc/config
+define Package/$(PKG_NAME)/config
source "$(SOURCE)/Config.in"
endef
-define Package/mc/description
- GNU Midnight Commander is a visual file manager,
- licensed under GNU General Public License and therefore qualifies as Free Software.
- It's a feature rich full-screen text mode application that allows you to copy,
- move and delete files and whole directory trees, search for files
- and run commands in the subshell. Internal viewer and editor are included.
+define Package/$(PKG_NAME)/description
+GNU Midnight Commander is a visual file manager,
+licensed under GNU General Public License and therefore qualifies as Free Software.
+It's a feature rich full-screen text mode application that allows you to copy,
+move and delete files and whole directory trees, search for files
+and run commands in the subshell. Internal viewer and editor are included.
+
endef
CONFIGURE_ARGS += \
--disable-doxygen-doc \
+ --with-homedir=/etc/mc \
+ --with-included-gettext \
--with-screen=ncurses \
--without-gpm-mouse \
--without-x \
--disable-vfs
endif
-define Package/mc/install
+define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mc $(1)/usr/bin
$(INSTALL_DIR) $(1)/etc/mc
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/mc.charsets $(1)/etc/mc
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/mc.keymap $(1)/etc/mc
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/mc.ext $(1)/etc/mc
ifeq ($(CONFIG_MC_DIFFVIEWER),y)
ln -sf mc $(1)/usr/bin/mcdiff
endif
$(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/mc.menu $(1)/etc/mc
$(INSTALL_DIR) $(1)/etc/mc/skins
$(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/skins/default.ini $(1)/etc/mc/skins
- $(INSTALL_DIR) $(1)/root/.mc/cedit/Syntax
+ $(INSTALL_DIR) $(1)/etc/mc/mcedit/Syntax
endef
-define Package/mc/conffiles
+define Package/$(PKG_NAME)/conffiles
/etc/mc/mc.menu
/etc/mc/skins/default.ini
endef
-$(eval $(call BuildPackage,mc))
+$(eval $(call BuildPackage,$(PKG_NAME)))
--- /dev/null
+--- a/lib/global.c
++++ b/lib/global.c
+@@ -97,6 +97,7 @@ mc_global_t mc_global = {
+ #endif /* !ENABLE_SUBSHELL */
+
+ .shell = NULL,
++ .shell_realpath = NULL,
+
+ .xterm_flag = FALSE,
+ .disable_x11 = FALSE,
+--- a/lib/global.h
++++ b/lib/global.h
+@@ -255,6 +255,7 @@ typedef struct
+
+ /* The user's shell */
+ char *shell;
++ char *shell_realpath;
+
+ /* This flag is set by xterm detection routine in function main() */
+ /* It is used by function view_other_cmd() */
+--- a/lib/mcconfig/paths.c
++++ b/lib/mcconfig/paths.c
+@@ -84,6 +84,7 @@ static const struct
+ /* data */
+ { "skins", &mc_data_str, MC_SKINS_SUBDIR},
+ { "fish", &mc_data_str, FISH_PREFIX},
++ { "ashrc", &mc_data_str, "ashrc"},
+ { "bashrc", &mc_data_str, "bashrc"},
+ { "inputrc", &mc_data_str, "inputrc"},
+ { "extfs.d", &mc_data_str, MC_EXTFS_DIR},
+--- a/src/main.c
++++ b/src/main.c
+@@ -87,6 +87,9 @@
+ /*** file scope variables ************************************************************************/
+
+ /*** file scope functions ************************************************************************/
++
++static char rp_shell[PATH_MAX];
++
+ /* --------------------------------------------------------------------------------------------- */
+
+ static void
+@@ -118,6 +121,44 @@ check_codeset (void)
+ }
+
+ /* --------------------------------------------------------------------------------------------- */
++/**
++ * Get a system shell.
++ *
++ * @return newly allocated string with shell name
++ */
++
++static char *
++mc_get_system_shell (void)
++{
++ char *sh_str;
++ /* 3rd choice: look for existing shells supported as MC subshells. */
++ if (access ("/bin/bash", X_OK) == 0)
++ sh_str = g_strdup ("/bin/bash");
++ else if (access ("/bin/ash", X_OK) == 0)
++ sh_str = g_strdup ("/bin/ash");
++ else if (access ("/bin/dash", X_OK) == 0)
++ sh_str = g_strdup ("/bin/dash");
++ else if (access ("/bin/busybox", X_OK) == 0)
++ sh_str = g_strdup ("/bin/busybox");
++ else if (access ("/bin/zsh", X_OK) == 0)
++ sh_str = g_strdup ("/bin/zsh");
++ else if (access ("/bin/tcsh", X_OK) == 0)
++ sh_str = g_strdup ("/bin/tcsh");
++ /* No fish as fallback because it is so much different from other shells and
++ * in a way exotic (even though user-friendly by name) that we should not
++ * present it as a subshell without the user's explicit intention. We rather
++ * will not use a subshell but just a command line.
++ * else if (access("/bin/fish", X_OK) == 0)
++ * mc_global.tty.shell = g_strdup ("/bin/fish");
++ */
++ else
++ /* Fallback and last resort: system default shell */
++ sh_str = g_strdup ("/bin/sh");
++
++ return sh_str;
++}
++
++/* --------------------------------------------------------------------------------------------- */
+
+ /** POSIX version. The only version we support. */
+ static void
+@@ -126,9 +167,11 @@ OS_Setup (void)
+ const char *shell_env;
+ const char *datadir_env;
+
++
+ shell_env = getenv ("SHELL");
+ if ((shell_env == NULL) || (shell_env[0] == '\0'))
+ {
++ /* 2nd choice: user login shell */
+ struct passwd *pwd;
+
+ pwd = getpwuid (geteuid ());
+@@ -136,13 +179,15 @@ OS_Setup (void)
+ mc_global.tty.shell = g_strdup (pwd->pw_shell);
+ }
+ else
++ /* 1st choice: SHELL environment variable */
+ mc_global.tty.shell = g_strdup (shell_env);
+
+ if ((mc_global.tty.shell == NULL) || (mc_global.tty.shell[0] == '\0'))
+ {
+ g_free (mc_global.tty.shell);
+- mc_global.tty.shell = g_strdup ("/bin/sh");
++ mc_global.tty.shell = mc_get_system_shell ();
+ }
++ mc_global.tty.shell_realpath = mc_realpath (mc_global.tty.shell, rp_shell);
+
+ /* This is the directory, where MC was installed, on Unix this is DATADIR */
+ /* and can be overriden by the MC_DATADIR environment variable */
+--- a/src/subshell.c
++++ b/src/subshell.c
+@@ -114,6 +114,8 @@ enum
+ static enum
+ {
+ BASH,
++ ASH_BUSYBOX, /* BusyBox default shell (ash) */
++ DASH, /* Debian variant of ash */
+ TCSH,
+ ZSH,
+ FISH
+@@ -209,6 +211,7 @@ static void
+ init_subshell_child (const char *pty_name)
+ {
+ char *init_file = NULL;
++ char *putenv_str = NULL;
+ pid_t mc_sid;
+
+ (void) pty_name;
+@@ -257,32 +260,53 @@ init_subshell_child (const char *pty_nam
+ switch (subshell_type)
+ {
+ case BASH:
++ /* Do we have a custom init file ~/.local/share/mc/bashrc? */
+ init_file = mc_config_get_full_path ("bashrc");
+
++ /* Otherwise use ~/.bashrc */
+ if (access (init_file, R_OK) == -1)
+ {
+ g_free (init_file);
+ init_file = g_strdup (".bashrc");
+ }
+
+- /* Make MC's special commands not show up in bash's history */
+- putenv ((char *) "HISTCONTROL=ignorespace");
++ /* Make MC's special commands not show up in bash's history and also suppress
++ * consecutive identical commands*/
++ putenv ((char *) "HISTCONTROL=ignoreboth");
+
+ /* Allow alternative readline settings for MC */
+ {
+ char *input_file = mc_config_get_full_path ("inputrc");
+ if (access (input_file, R_OK) == 0)
+ {
+- char *putenv_str = g_strconcat ("INPUTRC=", input_file, NULL);
++ putenv_str = g_strconcat ("INPUTRC=", input_file, NULL);
+ putenv (putenv_str);
+- g_free (putenv_str);
+ }
+ g_free (input_file);
+ }
+
+ break;
+
+- /* TODO: Find a way to pass initfile to TCSH and ZSH */
++ case ASH_BUSYBOX:
++ case DASH:
++ /* Do we have a custom init file ~/.local/share/mc/ashrc? */
++ init_file = mc_config_get_full_path ("ashrc");
++
++ /* Otherwise use ~/.profile */
++ if (access (init_file, R_OK) == -1)
++ {
++ g_free (init_file);
++ init_file = g_strdup (".profile");
++ }
++
++ /* Put init file to ENV variable used by ash */
++ putenv_str = g_strconcat ("ENV=", init_file, NULL);
++ putenv (putenv_str);
++ /* Do not use "g_free (putenv_str)" here, otherwise ENV will be undefined! */
++
++ break;
++
++ /* TODO: Find a way to pass initfile to TCSH, ZSH and FISH */
+ case TCSH:
+ case ZSH:
+ case FISH:
+@@ -320,10 +344,6 @@ init_subshell_child (const char *pty_nam
+ execl (mc_global.tty.shell, "bash", "-rcfile", init_file, (char *) NULL);
+ break;
+
+- case TCSH:
+- execl (mc_global.tty.shell, "tcsh", (char *) NULL);
+- break;
+-
+ case ZSH:
+ /* Use -g to exclude cmds beginning with space from history
+ * and -Z to use the line editor on non-interactive term */
+@@ -331,8 +351,11 @@ init_subshell_child (const char *pty_nam
+
+ break;
+
++ case ASH_BUSYBOX:
++ case DASH:
++ case TCSH:
+ case FISH:
+- execl (mc_global.tty.shell, "fish", (char *) NULL);
++ execl (mc_global.tty.shell, mc_global.tty.shell, (char *) NULL);
+ break;
+
+ default:
+@@ -341,6 +364,7 @@ init_subshell_child (const char *pty_nam
+
+ /* If we get this far, everything failed miserably */
+ g_free (init_file);
++ g_free (putenv_str);
+ my_exit (FORK_FAILURE);
+ }
+
+@@ -742,6 +766,171 @@ pty_open_slave (const char *pty_name)
+ }
+ #endif /* !HAVE_GRANTPT */
+
++
++/* --------------------------------------------------------------------------------------------- */
++/**
++ * Get a subshell type and store in subshell_type variable
++ *
++ * @return TRUE if subtype was gotten, FALSE otherwise
++ */
++
++static gboolean
++init_subshell_type (void)
++{
++ gboolean result = TRUE;
++
++ /* Find out what type of shell we have. Also consider real paths (resolved symlinks)
++ * because e.g. csh might point to tcsh, ash to dash or busybox, sh to anything. */
++
++ if (strstr (mc_global.tty.shell, "/zsh") || strstr (mc_global.tty.shell_realpath, "/zsh")
++ || getenv ("ZSH_VERSION"))
++ /* Also detects ksh symlinked to zsh */
++ subshell_type = ZSH;
++ else if (strstr (mc_global.tty.shell, "/tcsh")
++ || strstr (mc_global.tty.shell_realpath, "/tcsh"))
++ /* Also detects csh symlinked to tcsh */
++ subshell_type = TCSH;
++ else if (strstr (mc_global.tty.shell, "/fish")
++ || strstr (mc_global.tty.shell_realpath, "/fish"))
++ subshell_type = FISH;
++ else if (strstr (mc_global.tty.shell, "/dash")
++ || strstr (mc_global.tty.shell_realpath, "/dash"))
++ /* Debian ash (also found if symlinked to by ash/sh) */
++ subshell_type = DASH;
++ else if (strstr (mc_global.tty.shell_realpath, "/busybox"))
++ {
++ /* If shell is symlinked to busybox, assume it is an ash, even though theoretically
++ * it could also be a hush (a mini shell for non-MMU systems deactivated by default).
++ * For simplicity's sake we assume that busybox always contains an ash, not a hush.
++ * On embedded platforms or on server systems, /bin/sh often points to busybox.
++ * Sometimes even bash is symlinked to busybox (CONFIG_FEATURE_BASH_IS_ASH option),
++ * so we need to check busybox symlinks *before* checking for the name "bash"
++ * in order to avoid that case. */
++ subshell_type = ASH_BUSYBOX;
++ }
++ else if (strstr (mc_global.tty.shell, "/bash") || getenv ("BASH"))
++ /* If bash is not symlinked to busybox, it is safe to assume it is a real bash */
++ subshell_type = BASH;
++ else
++ {
++ mc_global.tty.use_subshell = FALSE;
++ result = FALSE;
++ }
++ return result;
++}
++
++/* --------------------------------------------------------------------------------------------- */
++/**
++ * Set up `precmd' or equivalent for reading the subshell's CWD.
++ *
++ * Attention! Never forget that these are *one-liners* even though the concatenated
++ * substrings contain line breaks and indentation for better understanding of the
++ * shell code. It is vital that each one-liner ends with a line feed character ("\n" ).
++ *
++ * @return initialized pre-command string
++ */
++
++static void
++init_subshell_precmd (char *precmd, size_t buff_size)
++{
++
++ switch (subshell_type)
++ {
++ case BASH:
++ g_snprintf (precmd, buff_size,
++ " PROMPT_COMMAND='pwd>&%d; kill -STOP $$';\n", subshell_pipe[WRITE]);
++ break;
++
++ case ASH_BUSYBOX:
++ /* BusyBox ash needs a somewhat complicated precmd emulation via PS1, and it is vital
++ * that BB be built with active CONFIG_ASH_EXPAND_PRMT, but this is the default anyway.
++ *
++ * A: This leads to a stopped subshell (=frozen mc) if user calls "ash" command
++ * "PS1='$(pwd>&%d; kill -STOP $$)\\u@\\h:\\w\\$ '\n",
++ *
++ * B: This leads to "sh: precmd: not found" in sub-subshell if user calls "ash" command
++ * "precmd() { pwd>&%d; kill -STOP $$; }; "
++ * "PS1='$(precmd)\\u@\\h:\\w\\$ '\n",
++ *
++ * C: This works if user calls "ash" command because in sub-subshell
++ * PRECMD is unfedined, thus evaluated to empty string - no damage done.
++ * Attention: BusyBox must be built with FEATURE_EDITING_FANCY_PROMPT to
++ * permit \u, \w, \h, \$ escape sequences. Unfortunately this cannot be guaranteed,
++ * especially on embedded systems where people try to save space, so let's use
++ * the dash version below. It should work on virtually all systems.
++ * "precmd() { pwd>&%d; kill -STOP $$; }; "
++ * "PRECMD=precmd; "
++ * "PS1='$(eval $PRECMD)\\u@\\h:\\w\\$ '\n",
++ */
++ case DASH:
++ /* Debian ash needs a precmd emulation via PS1, similar to BusyBox ash,
++ * but does not support escape sequences for user, host and cwd in prompt.
++ * Attention! Make sure that the buffer for precmd is big enough.
++ *
++ * We want to have a fancy dynamic prompt with user@host:cwd just like in the BusyBox
++ * examples above, but because replacing the home directory part of the path by "~" is
++ * complicated, it bloats the precmd to a size > BUF_SMALL (128).
++ *
++ * The following example is a little less fancy (home directory not replaced)
++ * and shows the basic workings of our prompt for easier understanding:
++ *
++ * "precmd() { "
++ * "echo \"$USER@$(hostname -s):$PWD\"; "
++ * "pwd>&%d; "
++ * "kill -STOP $$; "
++ * "}; "
++ * "PRECMD=precmd; "
++ * "PS1='$($PRECMD)$ '\n",
++ */
++ g_snprintf (precmd, buff_size,
++ "precmd() { "
++ "if [ ! \"${PWD##$HOME}\" ]; then "
++ "MC_PWD=\"~\"; "
++ "else "
++ "[ \"${PWD##$HOME/}\" = \"$PWD\" ] && MC_PWD=\"$PWD\" || MC_PWD=\"~/${PWD##$HOME/}\"; "
++ "fi; "
++ "echo \"$USER@openwrt:$MC_PWD\"; "
++ "pwd>&%d; "
++ "kill -STOP $$; "
++ "}; " "PRECMD=precmd; " "PS1='$($PRECMD)$ '\n", subshell_pipe[WRITE]);
++ break;
++
++ case ZSH:
++ g_snprintf (precmd, buff_size,
++ " precmd() { pwd>&%d; kill -STOP $$; }; "
++ "PS1='%%n@%%m:%%~%%# '\n", subshell_pipe[WRITE]);
++ break;
++
++ case TCSH:
++ g_snprintf (precmd, buff_size,
++ "set echo_style=both; "
++ "set prompt='%%n@%%m:%%~%%# '; "
++ "alias precmd 'echo $cwd:q >>%s; kill -STOP $$'\n", tcsh_fifo);
++ break;
++
++ case FISH:
++ /* We also want a fancy user@host:cwd prompt here, but fish makes it very easy to also
++ * use colours, which is what we will do. But first here is a simpler, uncoloured version:
++ * "function fish_prompt; "
++ * "echo (whoami)@(hostname -s):(pwd)\\$\\ ; "
++ * "echo \"$PWD\">&%d; "
++ * "kill -STOP %%self; "
++ * "end\n",
++ *
++ * TODO: fish prompt is shown when panel is hidden (Ctrl-O), but not when it is visible.
++ * Find out how to fix this.
++ */
++ g_snprintf (precmd, buff_size,
++ "function fish_prompt; "
++ "echo (whoami)@(hostname -s):(set_color $fish_color_cwd)(pwd)(set_color normal)\\$\\ ; "
++ "echo \"$PWD\">&%d; " "kill -STOP %%self; " "end\n", subshell_pipe[WRITE]);
++ break;
++
++ default:
++ break;
++ }
++}
++
+ /* --------------------------------------------------------------------------------------------- */
+ /*** public functions ****************************************************************************/
+ /* --------------------------------------------------------------------------------------------- */
+@@ -761,6 +950,7 @@ init_subshell (void)
+ {
+ /* This must be remembered across calls to init_subshell() */
+ static char pty_name[BUF_SMALL];
++ /* Must be considerably longer than BUF_SMALL (128) to support fancy shell prompts */
+ char precmd[BUF_MEDIUM];
+
+ switch (check_sid ())
+@@ -782,23 +972,8 @@ init_subshell (void)
+
+ if (mc_global.tty.subshell_pty == 0)
+ { /* First time through */
+- /* Find out what type of shell we have */
+-
+- if (strstr (mc_global.tty.shell, "/zsh") || getenv ("ZSH_VERSION"))
+- subshell_type = ZSH;
+- else if (strstr (mc_global.tty.shell, "/tcsh"))
+- subshell_type = TCSH;
+- else if (strstr (mc_global.tty.shell, "/csh"))
+- subshell_type = TCSH;
+- else if (strstr (mc_global.tty.shell, "/bash") || getenv ("BASH"))
+- subshell_type = BASH;
+- else if (strstr (mc_global.tty.shell, "/fish"))
+- subshell_type = FISH;
+- else
+- {
+- mc_global.tty.use_subshell = FALSE;
++ if (!init_subshell_type ())
+ return;
+- }
+
+ /* Open a pty for talking to the subshell */
+
+@@ -844,7 +1019,7 @@ init_subshell (void)
+ return;
+ }
+ }
+- else /* subshell_type is BASH or ZSH */ if (pipe (subshell_pipe))
++ else if (pipe (subshell_pipe)) /* subshell_type is BASH, ASH_BUSYBOX, DASH or ZSH */
+ {
+ perror (__FILE__ ": couldn't create pipe");
+ mc_global.tty.use_subshell = FALSE;
+@@ -872,39 +1047,116 @@ init_subshell (void)
+ init_subshell_child (pty_name);
+ }
+
+- /* Set up 'precmd' or equivalent for reading the subshell's CWD */
++ init_subshell_precmd (precmd, BUF_MEDIUM);
++
++ /* Set up `precmd' or equivalent for reading the subshell's CWD
++ *
++ * Attention! Never forget that these are *one-liners* even though the concatenated
++ * substrings contain line breaks and indentation for better understanding of the
++ * shell code. It is vital that each one-liner ends with a line feed character ("\n" ).
++ */
+
+ switch (subshell_type)
+ {
+ case BASH:
+ g_snprintf (precmd, sizeof (precmd),
+- " PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND\n}'pwd>&%d;kill -STOP $$'\n",
+- subshell_pipe[WRITE]);
++ " PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND\n}'pwd>&%d;kill -STOP $$'\n"
++ "PS1='\\u@\\h:\\w\\$ '\n", subshell_pipe[WRITE]);
++ break;
++
++ case ASH_BUSYBOX:
++ /* BusyBox ash needs a somewhat complicated precmd emulation via PS1, and it is vital
++ * that BB be built with active CONFIG_ASH_EXPAND_PRMT, but this is the default anyway.
++ *
++ * A: This leads to a stopped subshell (=frozen mc) if user calls "ash" command
++ * "PS1='$(pwd>&%d; kill -STOP $$)\\u@\\h:\\w\\$ '\n",
++ *
++ * B: This leads to "sh: precmd: not found" in sub-subshell if user calls "ash" command
++ * "precmd() { pwd>&%d; kill -STOP $$; }; "
++ * "PS1='$(precmd)\\u@\\h:\\w\\$ '\n",
++ *
++ * C: This works if user calls "ash" command because in sub-subshell
++ * PRECMD is unfedined, thus evaluated to empty string - no damage done.
++ * Attention: BusyBox must be built with FEATURE_EDITING_FANCY_PROMPT to
++ * permit \u, \w, \h, \$ escape sequences. Unfortunately this cannot be guaranteed,
++ * especially on embedded systems where people try to save space, so let's use
++ * the dash version below. It should work on virtually all systems.
++ * "precmd() { pwd>&%d; kill -STOP $$; }; "
++ * "PRECMD=precmd; "
++ * "PS1='$(eval $PRECMD)\\u@\\h:\\w\\$ '\n",
++ */
++ case DASH:
++ /* Debian ash needs a precmd emulation via PS1, similar to BusyBox ash,
++ * but does not support escape sequences for user, host and cwd in prompt.
++ * Attention! Make sure that the buffer for precmd is big enough.
++ *
++ * We want to have a fancy dynamic prompt with user@host:cwd just like in the BusyBox
++ * examples above, but because replacing the home directory part of the path by "~" is
++ * complicated, it bloats the precmd to a size > BUF_SMALL (128).
++ *
++ * The following example is a little less fancy (home directory not replaced)
++ * and shows the basic workings of our prompt for easier understanding:
++ *
++ * "precmd() { "
++ * "echo \"$USER@$(hostname -s):$PWD\"; "
++ * "pwd>&%d; "
++ * "kill -STOP $$; "
++ * "}; "
++ * "PRECMD=precmd; "
++ * "PS1='$($PRECMD)$ '\n",
++ */
++ g_snprintf (precmd, sizeof (precmd),
++ "precmd() { "
++ "if [ ! \"${PWD##$HOME}\" ]; then "
++ "MC_PWD=\"~\"; "
++ "else "
++ "[ \"${PWD##$HOME/}\" = \"$PWD\" ] && MC_PWD=\"$PWD\" || MC_PWD=\"~/${PWD##$HOME/}\"; "
++ "fi; "
++ "echo \"$USER@openwrt:$MC_PWD\"; "
++ "pwd>&%d; "
++ "kill -STOP $$; "
++ "}; " "PRECMD=precmd; " "PS1='$($PRECMD)$ '\n", subshell_pipe[WRITE]);
+ break;
+
+ case ZSH:
+ g_snprintf (precmd, sizeof (precmd),
+- " _mc_precmd(){ pwd>&%d;kill -STOP $$ }; precmd_functions+=(_mc_precmd)\n",
+- subshell_pipe[WRITE]);
++ " _mc_precmd(){ pwd>&%d;kill -STOP $$ }; precmd_functions+=(_mc_precmd)\n"
++ "PS1='%%n@%%m:%%~%%# '\n", subshell_pipe[WRITE]);
+ break;
+
+ case TCSH:
+ g_snprintf (precmd, sizeof (precmd),
+- "set echo_style=both;"
+- "alias precmd 'echo $cwd:q >>%s;kill -STOP $$'\n", tcsh_fifo);
++ "set echo_style=both; "
++ "set prompt='%%n@%%m:%%~%%# '; "
++ "alias precmd 'echo $cwd:q >>%s; kill -STOP $$'\n", tcsh_fifo);
+ break;
++
+ case FISH:
+ /* Use fish_prompt_mc function for prompt, if not present then copy fish_prompt to it. */
++ /* We also want a fancy user@host:cwd prompt here, but fish makes it very easy to also
++ * use colours, which is what we will do. But first here is a simpler, uncoloured version:
++ * "function fish_prompt; "
++ * "echo (whoami)@(hostname -s):(pwd)\\$\\ ; "
++ * "echo \"$PWD\">&%d; "
++ * "kill -STOP %%self; "
++ * "end\n",
++ *
++ * TODO: fish prompt is shown when panel is hidden (Ctrl-O), but not when it is visible.
++ * Find out how to fix this.
++ */
+ g_snprintf (precmd, sizeof (precmd),
+ "if not functions -q fish_prompt_mc;"
+ "functions -c fish_prompt fish_prompt_mc; end;"
+- "function fish_prompt; echo $PWD>&%d; fish_prompt_mc; kill -STOP %%self; end\n",
++ "function fish_prompt;"
++ "echo (whoami)@(hostname -s):(set_color $fish_color_cwd)(pwd)(set_color normal)\\$\\ ; "
++ "echo \"$PWD\">&%d; fish_prompt_mc; kill -STOP %%self; end\n",
+ subshell_pipe[WRITE]);
+ break;
+
+ default:
+ break;
+ }
++
+ write_all (mc_global.tty.subshell_pty, precmd, strlen (precmd));
+
+ /* Wait until the subshell has started up and processed the command */
+@@ -1108,6 +1360,13 @@ subshell_name_quote (const char *s)
+ quote_cmd_start = "(printf \"%b\" '";
+ quote_cmd_end = "')";
+ }
++ /* TODO: When BusyBox printf is fixed, get rid of this "else if", see
++ http://lists.busybox.net/pipermail/busybox/2012-March/077460.html */
++ /* else if (subshell_type == ASH_BUSYBOX)
++ {
++ quote_cmd_start = "\"`echo -en '";
++ quote_cmd_end = "'`\"";
++ } */
+ else
+ {
+ quote_cmd_start = "\"`printf \"%b\" '";
--- /dev/null
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=mt-st
+PKG_VERSION:=1.1
+PKG_RELEASE:=1
+
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)
+PKG_SOURCE_VERSION:=$(PKG_VERSION)
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.gz
+PKG_SOURCE_URL:=http://ftp.ibiblio.org/pub/Linux/system/backup/
+PKG_MD5SUM:=fdd5f5ec673c9f630a102ceff7612774
+
+PKG_LICENSE:=GPL-2.0
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/mt-st
+ SECTION:=utils
+ CATEGORY:=Utilities
+ TITLE:=Magnetic tape control tools for Linux SCSI tapes
+ URL:=http://ftp.ibiblio.org/pub/Linux/system/backup/
+ MAINTAINER:=Giuseppe Magnotta <giuseppe.magnotta@gmail.com>
+endef
+
+define Package/mt-st/description
+ Includes a mt-like program supporting additional commands using ioctls
+ specific to the Linux SCSI tape driver (up to kernel 2.6.26), and the program
+ stinit to define the SCSI tape devices in system startup scripts.
+endef
+
+define Build/Compile
+ $(MAKE) -C $(PKG_BUILD_DIR) \
+ LDFLAGS="$(TARGET_LDFLAGS)" \
+ CFLAGS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS)" \
+ CC="$(TARGET_CC)"
+endef
+
+define Package/mt-st/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/mt $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/stinit $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,mt-st))
include $(TOPDIR)/rules.mk
PKG_NAME:=nano
-PKG_VERSION:=2.4.2
+PKG_VERSION:=2.5.0
PKG_RELEASE:=1
PKG_LICENSE:=GPL-3.0+
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://www.nano-editor.org/dist/v2.4
-PKG_MD5SUM:=ce6968992fec4283c17984b53554168b
+PKG_SOURCE_URL:=http://www.nano-editor.org/dist/v2.5
+PKG_MD5SUM:=751ed96457017572bab15be18cb873ba
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
--- /dev/null
+ menu "Customize libow"
+ depends on PACKAGE_libow
+
+ menu "Bus master and adapter support"
+ config LIBOW_MASTER_USB
+ bool "USB bus master support (requires libusb)"
+ help
+ Include support for USB adapters (NOT usb-serial adapters, which use
+ kernel driver and are supported anyway).
+ Turning this off will save ~13kB (and ~50kB weighting libusb dependency).
+ default y
+
+ config LIBOW_MASTER_I2C
+ bool "I2C bus master (DS2482) support"
+ default y
+ help
+ Include support for I2C adapters.
+ Turning this feature off will save ~6kB.
+
+ config LIBOW_MASTER_W1
+ bool "Kernel W1 bus master support (requires kmod-w1)"
+ help
+ Support kernel 1-Wire bus masters (requires KConfig CONFIG_CONNECTOR=y
+ and CONFIG_W1_CON=y).
+ Turning this on will increase libow size by about 10kB.
+ default n
+ endmenu
+
+ config LIBOW_ZEROCONF
+ bool "Zeroconf/bonjour support"
+ default y
+ help
+ Enable server process announcement using Zeroconf (Bonjour) protocol.
+ Turning this feature on will increase owlib size by about 12kB.
+
+ config LIBOW_DEBUG
+ bool "Enable debug output (100+ kB)"
+ default y
+ help
+ If you don't need to debug your 1-wire network, you can save as much as
+ 137kB disabling debug output.
+
+ config LIBOW_OWTRAFFIC
+ bool "Enable bus traffic reports"
+ default n
+ help
+ Enable owfs traffic monitor. It's here purely for debugging purposes.
+ Turning this on will increase libow size by about 3kB.
+ endmenu
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
+PKG_CONFIG_DEPENDS:= \
+ CONFIG_LIBOW_MASTER_USB \
+ CONFIG_LIBOW_MASTER_I2C \
+ CONFIG_LIBOW_MASTER_W1 \
+ CONFIG_LIBOW_ZEROCONF \
+ CONFIG_LIBOW_DEBUG \
+ CONFIG_LIBOW_OWTRAFFIC
+
include $(INCLUDE_DIR)/package.mk
#
define Package/libow
$(call Package/owfs/Library)
- DEPENDS:=+libusb-compat +libpthread
+ DEPENDS:= \
+ +libpthread \
+ +LIBOW_MASTER_USB:libusb-compat \
+ +LIBOW_MASTER_W1:kmod-w1
TITLE:=OWFS - common shared library
endef
+define Package/libow/config
+ source "$(SOURCE)/Config.in"
+endef
+
define Package/libow/description
$(call Package/$(PKG_NAME)/Default/description)
--with-fuseinclude="$(STAGING_DIR)/usr/include" \
--with-fuselib="$(STAGING_DIR)/usr/lib" \
--enable-shared \
- --enable-zero \
--disable-parport \
--disable-ownet \
--disable-owpython \
--disable-owphp \
--disable-owtcl \
--disable-swig \
+ $(if $(CONFIG_LIBOW_MASTER_USB),--enable-usb,--disable-usb) \
+ $(if $(CONFIG_LIBOW_MASTER_W1),--enable-w1,--disable-w1) \
+ $(if $(CONFIG_LIBOW_MASTER_I2C),--enable-i2c,--disable-i2c) \
+ $(if $(CONFIG_LIBOW_ZEROCONF),--enable-zero,--disable-zero) \
+ $(if $(CONFIG_LIBOW_DEBUG),--enable-debug,--disable-debug) \
+ $(if $(CONFIG_LIBOW_OWTRAFFIC),--enable-owtraffic,--disable-owtraffic)
CONFIGURE_VARS += \
LDFLAGS="$(TARGET_LDFLAGS) -Wl,-rpath-link=$(STAGING_DIR)/usr/lib -Wl,-rpath-link=$(TOOLCHAIN_DIR)/usr/lib" \
define Package/owfs/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/owfs $(1)/usr/bin/
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_DATA) ./files/owfs.conf $(1)/etc/config/owfs
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/owfs.init $(1)/etc/init.d/owfs
+ mkdir -p $(1)/mnt/owfs
+endef
+
+define Package/owfs/conffiles
+/etc/config/owfs
endef
define Package/owshell/install
define Package/owserver/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/owserver $(1)/usr/bin/
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_DATA) ./files/owserver.conf $(1)/etc/config/owserver
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/owserver.init $(1)/etc/init.d/owserver
+endef
+
+define Package/owserver/conffiles
+/etc/config/owserver
endef
define Package/owhttpd/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/owhttpd $(1)/usr/bin/
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_DATA) ./files/owhttpd.conf $(1)/etc/config/owhttpd
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/owhttpd.init $(1)/etc/init.d/owhttpd
+endef
+
+define Package/owhttpd/conffiles
+/etc/config/owhttpd
endef
define Package/owftpd/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/owftpd $(1)/usr/bin/
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_DATA) ./files/owftpd.conf $(1)/etc/config/owftpd
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/owftpd.init $(1)/etc/init.d/owftpd
endef
+define Package/owftpd/conffiles
+/etc/config/owftpd
+endef
define Package/libow/install
$(INSTALL_DIR) $(1)/usr/lib
--- /dev/null
+config owfs 'owfs'
+ option enabled 0
+ option user root
+ option readonly 0
+ option mountpoint '/mnt/owfs'
+ option fuse_allow_other 0
+ option fuse_open_opt ''
+ option error_level 0
+ list devices '-s'
+ list devices 'localhost:4304'
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2009-2015 OpenWrt.org
+
+START=95
+USE_PROCD=1
+
+PROG=/usr/bin/owfs
+
+append_arg() {
+ local cfg="$1"
+ local var="$2"
+ local opt="$3"
+ local def="$4"
+ local val
+
+ config_get val "$cfg" "$var"
+ [ -n "$val" -o -n "$def" ] && procd_append_param command $opt "${val:-$def}"
+}
+
+append_bool() {
+ local cfg="$1"
+ local var="$2"
+ local opt="$3"
+ local def="$4"
+ local val
+
+ config_get_bool val "$cfg" "$var" "$def"
+ [ "$val" = 1 ] && procd_append_param command "$opt"
+}
+
+append_plain() {
+ procd_append_param command "$1"
+}
+
+append_param() {
+ local cfg="$1"
+ local var="$2"
+ local opt="$3"
+ local def="$4"
+ local val
+
+ config_get val "$cfg" "$var"
+ [ -n "$val" -o -n "$def" ] && procd_append_param "$opt" "${val:-$def}"
+}
+
+start_instance() {
+ local cfg="$1"
+ local enabled
+
+ config_get_bool enabled "$cfg" 'enabled' '0'
+ [ "$enabled" = 0 ] && return 1
+
+ procd_open_instance
+
+ procd_set_param command "$PROG" --foreground --error_print=1
+
+ # common parameters
+ append_bool "$cfg" readonly "--readonly"
+ append_arg "$cfg" error_level "--error_level"
+ config_list_foreach "$cfg" options append_plain
+ config_list_foreach "$cfg" devices append_plain
+ append_param "$cfg" user user
+
+ # owfs-specific
+ append_arg "$cfg" mountpoint "--mountpoint" /mnt/owfs
+ append_bool "$cfg" fuse_allow_other "--allow_other"
+ append_arg "$cfg" fuse_open_opt "--fuse_open_opt"
+
+ # don't respawn fuse
+
+ procd_close_instance
+
+}
+
+service_triggers() {
+ procd_add_reload_trigger owfs
+}
+
+start_service() {
+ config_load owfs
+ config_foreach start_instance owfs
+}
--- /dev/null
+config owftpd 'owftpd'
+ option enabled 0
+ option user root
+ option readonly 0
+ option port 21
+ option error_level 0
+ list devices '-s'
+ list devices 'localhost:4304'
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2009-2015 OpenWrt.org
+
+START=95
+USE_PROCD=1
+
+PROG=/usr/bin/owftpd
+
+append_arg() {
+ local cfg="$1"
+ local var="$2"
+ local opt="$3"
+ local def="$4"
+ local val
+
+ config_get val "$cfg" "$var"
+ [ -n "$val" -o -n "$def" ] && procd_append_param command $opt "${val:-$def}"
+}
+
+append_bool() {
+ local cfg="$1"
+ local var="$2"
+ local opt="$3"
+ local def="$4"
+ local val
+
+ config_get_bool val "$cfg" "$var" "$def"
+ [ "$val" = 1 ] && procd_append_param command "$opt"
+}
+
+append_plain() {
+ procd_append_param command "$1"
+}
+
+append_param() {
+ local cfg="$1"
+ local var="$2"
+ local opt="$3"
+ local def="$4"
+ local val
+
+ config_get val "$cfg" "$var"
+ [ -n "$val" -o -n "$def" ] && procd_append_param "$opt" "${val:-$def}"
+}
+
+start_instance() {
+ local cfg="$1"
+ local enabled
+
+ config_get_bool enabled "$cfg" 'enabled' '0'
+ [ "$enabled" = 0 ] && return 1
+
+ procd_open_instance
+
+ procd_set_param command "$PROG" --foreground --error_print=1
+
+ # common parameters
+ append_bool "$cfg" readonly "--readonly"
+ append_arg "$cfg" error_level "--error_level"
+ config_list_foreach "$cfg" options append_plain
+ config_list_foreach "$cfg" devices append_plain
+ append_param "$cfg" user user
+
+ # owftpd-specific
+ append_arg "$cfg" port "--port"
+ append_arg "$cfg" max_connections "--max_connections"
+
+ procd_set_param respawn
+
+ procd_close_instance
+
+}
+
+service_triggers() {
+ procd_add_reload_trigger owftpd
+}
+
+start_service() {
+ config_load owftpd
+ config_foreach start_instance owftpd
+}
--- /dev/null
+config owhttpd 'owhttpd'
+ option enabled 0
+ option user root
+ option readonly 0
+ option port 3001
+ option error_level 0
+ list devices '-s'
+ list devices 'localhost:4304'
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2009-2015 OpenWrt.org
+
+START=95
+USE_PROCD=1
+
+PROG=/usr/bin/owhttpd
+
+append_arg() {
+ local cfg="$1"
+ local var="$2"
+ local opt="$3"
+ local def="$4"
+ local val
+
+ config_get val "$cfg" "$var"
+ [ -n "$val" -o -n "$def" ] && procd_append_param command $opt "${val:-$def}"
+}
+
+append_bool() {
+ local cfg="$1"
+ local var="$2"
+ local opt="$3"
+ local def="$4"
+ local val
+
+ config_get_bool val "$cfg" "$var" "$def"
+ [ "$val" = 1 ] && procd_append_param command "$opt"
+}
+
+append_plain() {
+ procd_append_param command "$1"
+}
+
+append_param() {
+ local cfg="$1"
+ local var="$2"
+ local opt="$3"
+ local def="$4"
+ local val
+
+ config_get val "$cfg" "$var"
+ [ -n "$val" -o -n "$def" ] && procd_append_param "$opt" "${val:-$def}"
+}
+
+start_instance() {
+ local cfg="$1"
+ local enabled
+
+ config_get_bool enabled "$cfg" 'enabled' '0'
+ [ "$enabled" = 0 ] && return 1
+
+ procd_open_instance
+
+ procd_set_param command "$PROG" --foreground --error_print=1
+
+ # common parameters
+ append_bool "$cfg" readonly "--readonly"
+ append_arg "$cfg" error_level "--error_level"
+ config_list_foreach "$cfg" options append_plain
+ config_list_foreach "$cfg" devices append_plain
+ append_param "$cfg" user user
+
+ # owhttpd-specific
+ append_arg "$cfg" port "--port"
+ append_arg "$cfg" max_connections "--max_connections"
+
+ procd_set_param respawn
+
+ procd_close_instance
+
+}
+
+service_triggers() {
+ procd_add_reload_trigger owhttpd
+}
+
+start_service() {
+ config_load owhttpd
+ config_foreach start_instance owhttpd
+}
--- /dev/null
+config owserver 'owserver'
+ option enabled 0
+ option user root
+ option readonly 0
+ option port 4304
+ option error_level 0
+ list devices '-d'
+ list devices '/dev/ttyUSB0'
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2009-2015 OpenWrt.org
+
+START=90
+USE_PROCD=1
+
+PROG=/usr/bin/owserver
+
+append_arg() {
+ local cfg="$1"
+ local var="$2"
+ local opt="$3"
+ local def="$4"
+ local val
+
+ config_get val "$cfg" "$var"
+ [ -n "$val" -o -n "$def" ] && procd_append_param command $opt "${val:-$def}"
+}
+
+append_bool() {
+ local cfg="$1"
+ local var="$2"
+ local opt="$3"
+ local def="$4"
+ local val
+
+ config_get_bool val "$cfg" "$var" "$def"
+ [ "$val" = 1 ] && procd_append_param command "$opt"
+}
+
+append_plain() {
+ procd_append_param command "$1"
+}
+
+append_param() {
+ local cfg="$1"
+ local var="$2"
+ local opt="$3"
+ local def="$4"
+ local val
+
+ config_get val "$cfg" "$var"
+ [ -n "$val" -o -n "$def" ] && procd_append_param "$opt" "${val:-$def}"
+}
+
+start_instance() {
+ local cfg="$1"
+ local enabled
+
+ config_get_bool enabled "$cfg" 'enabled' '0'
+ [ "$enabled" = 0 ] && return 1
+
+ procd_open_instance
+
+ procd_set_param command "$PROG" --foreground --error_print=1
+
+ # common parameters
+ append_bool "$cfg" readonly "--readonly"
+ append_arg "$cfg" error_level "--error_level"
+ config_list_foreach "$cfg" options append_plain
+ config_list_foreach "$cfg" devices append_plain
+ append_param "$cfg" user user
+
+ # owserver-specific
+ append_arg "$cfg" port "--port"
+ append_arg "$cfg" max_connections "--max_connections"
+
+ procd_set_param respawn
+
+ procd_close_instance
+
+}
+
+service_triggers() {
+ procd_add_reload_trigger owserver
+}
+
+start_service() {
+ config_load owserver
+ config_foreach start_instance owserver
+}
--- /dev/null
+AaAA
+--- a/module/owlib/src/c/ow_w1_parse.c
++++ b/module/owlib/src/c/ow_w1_parse.c
+@@ -237,7 +237,7 @@ enum Netlink_Read_Status W1_Process_Resp
+ owfree(nlp.nlm) ;
+ return nrs_nodev ;
+ }
+- if ( nrs_callback == NULL ) { // status message
++ if ( nrs_callback == NULL ) { // bus reset
+ owfree(nlp.nlm) ;
+ return nrs_complete ;
+ }
+@@ -246,7 +246,7 @@ enum Netlink_Read_Status W1_Process_Resp
+ nrs_callback( &nlp, v, pn ) ;
+ LEVEL_DEBUG("Called nrs_callback");
+ owfree(nlp.nlm) ;
+- if ( nlp.cn->ack != 0 ) {
++ if ( nlp.cn->seq != nlp.cn->ack ) {
+ if ( nlp.w1m->type == W1_LIST_MASTERS ) {
+ continue ; // look for more data
+ }
+@@ -254,7 +254,7 @@ enum Netlink_Read_Status W1_Process_Resp
+ continue ; // look for more data
+ }
+ }
+- nrs_callback = NULL ; // now look for status message
++ return nrs_complete ; // status message
+ }
+ return nrs_timeout ;
+ }
--- /dev/null
+--- a/module/owlib/src/c/ow_reset.c
++++ b/module/owlib/src/c/ow_reset.c
+@@ -21,6 +21,10 @@ RESET_TYPE BUS_reset(const struct parsed
+ struct connection_in * in = pn->selected_connection ;
+ STAT_ADD1_BUS(e_bus_resets, in);
+
++ if ( in->iroutines.reset == NO_RESET_ROUTINE ) {
++ return BUS_RESET_OK;
++ }
++
+ switch ( (in->iroutines.reset) (pn) ) {
+ case BUS_RESET_OK:
+ in->reconnect_state = reconnect_ok; // Flag as good!
include $(TOPDIR)/rules.mk
PKG_NAME:=pcsc-lite
-PKG_VERSION:=1.8.14
+PKG_VERSION:=1.8.15
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=https://alioth.debian.org/frs/download.php/file/4138
-PKG_MD5SUM:=439b2c8892f502e39e5b8997a7ae01ed
+PKG_SOURCE_URL:=https://alioth.debian.org/frs/download.php/file/4157
+PKG_MD5SUM:=ded5cf2f78d26293934cefd0dbc58a43
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=rtl-ais
-PKG_VERSION:=20150722
+PKG_VERSION:=20151213
PKG_RELEASE=$(PKG_SOURCE_VERSION)
#!/bin/sh /etc/rc.common
-# Copyright (C) 2015 OpenWrt.org
START=99
-
USE_PROCD=1
+
PROG=/usr/bin/rtl_ais
-start_service() {
- enabled="$(uci_get rtl_ais @rtl_ais[0] enabled 0)"
- ppm="$(uci_get rtl_ais @rtl_ais[0] ppm 0)"
+validate_rtl_ais_section() {
+ uci_validate_section "rtl_ais" "rtl_ais" "$1" \
+ 'enabled:bool' \
+ 'ppm:range(-100,100):0'
+}
+
+load_rtl_ais() {
+ local cfg="$1"
+
+ local enabled ppm
+ validate_rtl_ais_section "$cfg" || { echo "validation failed"; return 1; }
- [ "$enabled" != "1" ] && return
+ [ "$enabled" = "1" ] || return 1
procd_open_instance
procd_set_param command "$PROG" -p "$ppm"
+ procd_set_param stdout 1
+ procd_set_param stderr 1
procd_set_param respawn
procd_close_instance
}
+
+start_service() {
+ config_load "rtl_ais"
+ config_foreach load_rtl_ais "rtl_ais"
+}
+
+service_triggers() {
+ procd_add_reload_trigger "rtl_ais"
+ procd_add_validation validate_rtl_ais_section
+}
#
-# Copyright (C) 2006-2015 OpenWrt.org
+# Copyright (C) 2006-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
depends on PACKAGE_sane-backends
prompt "Include all SANE backends (sane-backends-all)"
- comment "Modules"
+ comment "Backends"
$(foreach backend,$(SANE_BACKENDS), \
$(eval \
HIDDEN:=1
endef
-define Package/sane-backends/description
+define Package/sane-backends-all/description
$(call Package/sane-backends/Default/description)
.
Metapackage for selecting all SANE Backends
PKG_NAME:=smstools3
PKG_VERSION:=3.1.15
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_MAINTAINER:=Gérald Kerma <dreagle@doukki.net>
PKG_LICENSE:=GPL-2.0
PKG_MD5SUM:=0241ef60e646fac1a06254a848e61ed7
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
-PKG_BUILD_DEPENDS:=libiconv-full iconv
include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/nls.mk
define Package/smstools3
SECTION:=utils
CATEGORY:=Utilities
TITLE:=SMS Server Tools 3
- DEPENDS:=+libiconv-full +iconv
+ DEPENDS:=$(ICONV_DEPENDS)
URL:=http://smstools3.kekekasvi.com/
endef
short messages through GSM modems and mobile phones.
endef
-TARGET_CFLAGS = -D NUMBER_OF_MODEMS=1
+TARGET_CFLAGS += -D NUMBER_OF_MODEMS=1
TARGET_CFLAGS += -D USE_ICONV
TARGET_CFLAGS += -D DISABLE_INET_SOCKET
TARGET_CFLAGS += -W -Wall
TARGET_CFLAGS += -D_FILE_OFFSET_BITS=64
-TARGET_LDFLAGS += -liconv
+MAKE_VARS += LFLAGS="$(TARGET_LDFLAGS) $(if $(ICONV_FULL),-liconv)"
BINDIR=/usr/local/bin
-define Build/Compile
- $(MAKE) -C "$(PKG_BUILD_DIR)/src" \
- CC="$(TARGET_CC)" \
- CFLAGS='$(TARGET_CFLAGS) $(EXTRA_CFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS) \
- -I"$(STAGING_DIR)/usr/lib/libiconv-full/include"' \
- LFLAGS='$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS) -L"$(STAGING_DIR)/usr/lib/libiconv-full/lib"' \
- all
+define Package/smstools3/configure
endef
define Package/smstools3/install
---- a/src/Makefile 2014-12-20 18:33:55.654252867 +0100
-+++ b/src/Makefile 2014-12-20 18:31:10.241359741 +0100
-@@ -43,7 +43,7 @@
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -1,7 +1,7 @@
+ # In case of windows, use os_cygwin=yes setting in the configuration file (smsd.conf).
+
+ # Select your setup size:
+-CFLAGS = -D NUMBER_OF_MODEMS=64
++CFLAGS ?= -D NUMBER_OF_MODEMS=64
+
+ # Uncomment for Solaris
+ # CFLAGS += -D SOLARIS
+@@ -43,7 +43,7 @@ smsd: smsd.c extras.o locking.o cfgfile.
ifneq (,$(findstring SOLARIS,$(CFLAGS)))
ifeq (,$(findstring DISABLE_INET_SOCKET,$(CFLAGS)))
endif
endif
-
--- /dev/null
+#
+# Copyright (C) 2006-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=stress
+PKG_VERSION:=1.0.4
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://people.seas.harvard.edu/~apw/stress/
+PKG_MD5SUM:=a607afa695a511765b40993a64c6e2f4
+
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=COPYING
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/stress
+ SECTION:=utils
+ CATEGORY:=Utilities
+ TITLE:=stress is a simple stress utility
+ URL:=http://people.seas.harvard.edu/~apw/stress/
+ MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
+endef
+
+define Package/stress/description
+stress is a simple tool that imposes certain types of compute \ stress on
+UNIX-like operating systems.
+endef
+
+CONFIGURE_ARGS += \
+ --prefix="/usr"
+
+MAKE_FLAGS += \
+ CFLAGS="$(TARGET_CFLAGS)"
+
+define Package/stress/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/stress $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,stress))
include $(TOPDIR)/rules.mk
PKG_NAME:=sumo
-PKG_VERSION:=0.24.0
+PKG_VERSION:=0.25.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-src-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/sumo
-PKG_MD5SUM:=5522dffc71ecf636b02dc6bdea7e569d
+PKG_MD5SUM:=6bfc4e1ff37fe4ba5d481ddc40323529
PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
PKG_LICENSE:=GPL-3.0
include $(TOPDIR)/rules.mk
PKG_NAME:=tracertools
-PKG_VERSION:=20150916
+PKG_VERSION:=20160118
PKG_RELEASE=$(PKG_SOURCE_VERSION)
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/dangowrt/tracertools.git
-PKG_SOURCE_VERSION:=7dba3342fedfd04eb7b0d9941971726fde948ec0
+PKG_SOURCE_VERSION:=0428aa8585c915e64ce7cdb7c6f88cf2f5987b5f
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
#
-# Copyright (C) 2014 OpenWrt.org
+# Copyright (C) 2014-2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=triggerhappy
-PKG_VERSION:=0.3.4
-PKG_REV:=649bf670a012558393d7c41f3660d0a017edd982
-PKG_RELEASE:=2
+PKG_VERSION:=0.3.4-151001
+PKG_REV:=7e5abc69f215678e93a6b999524981c8b40bdcd9
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=git://github.com/wertarbyte/triggerhappy
+++ /dev/null
---- a/Makefile
-+++ b/Makefile
-@@ -10,7 +10,7 @@ THCMD_COMPS := th-cmd cmdsocket
-
- MAKEDEPEND = $(CC) -M -MG $(CPPFLAGS) -o $*.d $<
-
--LINUX_INPUT_H := $(shell echo '\#include <linux/input.h>' | $(CC) $(CPPFLAGS) -M -E - | awk 'NR==1 {print $$2}')
-+LINUX_INPUT_H := $(shell for i in `echo | $(CC) $(CPPFLAGS) -M -E -include 'linux/input.h' -`; do test -f "$$i" && echo "$$i" && break; done)
-
- all: thd th-cmd man
-
include $(TOPDIR)/rules.mk
PKG_NAME:=unrar
-PKG_VERSION:=5.3.7
+PKG_VERSION:=5.3.8
PKG_RELEASE:=1
PKG_SOURCE:=unrarsrc-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.rarlab.com/rar
-PKG_MD5SUM:=668f8de87b74d9fa7037d3d487200149
+PKG_MD5SUM:=9aa9643e817187519e358be292185f6f
PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
PKG_LICENSE:=UnRAR
PKG_LICENSE_FILES:=license.txt
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/unrar
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)-$(BUILD_VARIANT)/unrar
PKG_INSTALL:=1
include $(INCLUDE_DIR)/uclibc++.mk
SECTION:=utils
CATEGORY:=Utilities
TITLE+= (application)
+ VARIANT:=bin
endef
define Package/libunrar
SECTION:=libs
CATEGORY:=Libraries
TITLE+= (library)
+ VARIANT:=lib
endef
define Package/unrar/description
archives
endef
+ifeq ($(BUILD_VARIANT),lib)
define Build/Compile
- $(call Build/Compile/Default,unrar)
$(call Build/Compile/Default,lib)
endef
+define Build/Install
+ $(call Build/Install/Default,install-lib)
+endef
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)/usr/include/unrar
+ $(CP) $(PKG_BUILD_DIR)/*.hpp $(1)/usr/include/unrar/
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/lib/libunrar.so $(1)/usr/lib/
+endef
+else
+define Build/Compile
+ $(call Build/Compile/Default,unrar)
+endef
+
+define Build/Install
+ $(call Build/Install/Default,install-unrar)
+endef
+endif
+
define Package/unrar/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/bin/unrar $(1)/usr/bin/
define Package/libunrar/install
$(INSTALL_DIR) $(1)/usr/lib
- $(CP) $(PKG_BUILD_DIR)/libunrar.so $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/lib/libunrar.so $(1)/usr/lib/
endef
$(eval $(call BuildPackage,unrar))
DESTDIR=/usr
# Linux using LCC
+@@ -142,7 +142,7 @@ uninstall-unrar:
+ rm -f $(DESTDIR)/bin/unrar
+
+ install-lib:
+- install libunrar.so $(DESTDIR)/lib
++ install -D libunrar.so $(DESTDIR)/lib/libunrar.so
+
+ uninstall-lib:
+ rm -f $(DESTDIR)/lib/libunrar.so
PKG_NAME:=unzip
PKG_REV:=60
PKG_VERSION:=6.0
-PKG_RELEASE:=3
+PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)$(PKG_REV).tar.gz
PKG_SOURCE_URL:=@SF/infozip
define Build/Configure
endef
-TARGET_CFLAGS += -DNO_LCHMOD -DLARGE_FILE_SUPPORT
+TARGET_CFLAGS += \
+ -DNO_LCHMOD \
+ -DLARGE_FILE_SUPPORT \
+ -DUNICODE_WCHAR \
+ -DUNICODE_SUPPORT \
+ -DUTF8_MAYBE_NATIVE \
+ -DZIP64_SUPPORT
define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) -f unix/Makefile unzips \
define Package/unzip/install
$(INSTALL_DIR) $(1)/usr/bin/
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
+ $(INSTALL_BIN) \
+ $(PKG_INSTALL_DIR)/usr/bin/{funzip,unzip,unzipsfx,zipgrep} \
+ $(1)/usr/bin/
+ $(LN) unzip $(1)/usr/bin/zipinfo
endef
$(eval $(call BuildPackage,unzip))
PKG_NAME:=zile
PKG_VERSION:=2.3.24
-PKG_RELEASE:=1
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@GNU/zile
PKG_LICENSE:=GPL-3.0+
PKG_LICENSE_FILES:=COPYING
+PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
endef
CONFIGURE_VARS += \
- gl_cv_func_getopt_gnu=yes
+ gl_cv_func_getopt_gnu=yes \
+ gl_cv_warn__Wmudflap=no \
+ gl_cv_warn__fmudflap=no
+
+CONFIGURE_ARGS += \
+ --with-ncursesw \
+
define Package/zile/install
$(INSTALL_DIR) $(1)/usr/bin
--- /dev/null
+--- a/m4/ax_with_curses.m4
++++ b/m4/ax_with_curses.m4
+@@ -72,7 +72,7 @@ AC_DEFUN([AX_WITH_CURSES],
+ AC_CACHE_CHECK([for working ncursesw], ax_cv_ncursesw,
+ [LIBS="$ax_save_LIBS -lncursesw"
+ AC_TRY_LINK(
+- [#include <ncurses.h>],
++ [#include <ncursesw/ncurses.h>],
+ [chtype a; int b=A_STANDOUT, c=KEY_LEFT; initscr(); ],
+ ax_cv_ncursesw=yes, ax_cv_ncursesw=no)])
+ if test "$ax_cv_ncursesw" = yes
--- /dev/null
+--- a/lib/stdio.in.h
++++ b/lib/stdio.in.h
+@@ -733,7 +733,7 @@ _GL_CXXALIASWARN (gets);
+ /* It is very rare that the developer ever has full control of stdin,
+ so any use of gets warrants an unconditional warning. Assume it is
+ always declared, since it is required by C89. */
+-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
++#define gets(a) fgets( a, sizeof(*(a)), stdin)
+ #endif
+
+
--- /dev/null
+--- a/src/term_curses.c
++++ b/src/term_curses.c
+@@ -23,7 +23,11 @@
+
+ #include <stdlib.h>
+ #ifdef HAVE_NCURSES_H
+-#include <ncurses.h>
++# ifdef HAVE_NCURSESW
++# include <ncursesw/ncurses.h>
++# else
++# include <ncurses.h>
++# endif
+ #else
+ #include <curses.h>
+ #endif
#
-# Copyright (C) 2007-2015 OpenWrt.org
+# Copyright (C) 2007-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=zoneinfo
-PKG_VERSION:=2015g
-PKG_VERSION_CODE:=2015g
+PKG_VERSION:=2016a
+PKG_VERSION_CODE:=2016a
PKG_RELEASE:=1
#As i couldn't find real license used "Public Domain"
PKG_SOURCE:=tzdata$(PKG_VERSION).tar.gz
PKG_SOURCE_CODE:=tzcode$(PKG_VERSION_CODE).tar.gz
PKG_SOURCE_URL:=http://www.iana.org/time-zones/repository/releases
-PKG_MD5SUM:=8d46e8b225b9a04c75f5c39636435ad6
+PKG_MD5SUM:=0d3123eb1b453ec0620822bd65be4c42
include $(INCLUDE_DIR)/package.mk
define Download/tzcode
FILE=$(PKG_SOURCE_CODE)
URL=$(PKG_SOURCE_URL)
- MD5SUM:=a2c47d908a6426f530efb1393cf1cd06
+ MD5SUM:=f5e0299925631da7cf82d8ce1205111d
endef
$(eval $(call Download,tzcode))