diff --git a/package/ctcgfw/cups-bjnp/Makefile b/package/ctcgfw/cups-bjnp/Makefile
new file mode 100644
index 0000000000..0c8a592b4b
--- /dev/null
+++ b/package/ctcgfw/cups-bjnp/Makefile
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 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:=cups-bjnp
+PKG_VERSION:=2.0
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@SF/cups-bjnp
+PKG_MD5SUM:=8a337091b65abfdd70191129efefb9b3
+
+PKG_BUILD_DEPENDS:=cups
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/cups-bjnp
+ SECTION:=net
+ CATEGORY:=Network
+ TITLE:=BJNP protocol backend for CUPS
+ URL:=http://sourceforge.net/projects/cups-bjnp/
+ DEPENDS:=cups
+ SUBMENU:=Printing
+endef
+
+define Package/cups-bjnp/description
+CUPS backend for the canon printers using the proprietary USB over
+IP BJNP protocol. This backend allows Cups to print over the network
+to a Canon printer. It currently supports Cups 1.2 and Cups 1.3 and
+is designed by reverse engineering.
+endef
+
+CONFIGURE_ARGS += --with-cupsbackenddir=$(STAGING_DIR)/usr/include/cups
+
+TARGET_CFLAGS+=-Wl,-rpath-link=$(STAGING_DIR)/usr/lib
+
+define Package/cups-bjnp/install
+ $(INSTALL_DIR) $(1)/usr/lib/cups/backend
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/bjnp $(1)/usr/lib/cups/backend
+endef
+
+
+$(eval $(call BuildPackage,cups-bjnp))
diff --git a/package/ctcgfw/cups/Makefile b/package/ctcgfw/cups/Makefile
new file mode 100644
index 0000000000..62df2e608e
--- /dev/null
+++ b/package/ctcgfw/cups/Makefile
@@ -0,0 +1,321 @@
+#
+# Copyright (C) 2006-2016 OpenWrt.org
+# Copyright (C) 2016 lede-project.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=cups
+PKG_VERSION:=2.1.4
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-source.tar.gz
+PKG_SOURCE_URL:=http://www.cups.org/software/$(PKG_VERSION)
+PKG_MD5SUM:=9f9bf6e3b9c20a3519b4dc409666d6e7
+
+TARGET_LDFLAGS+=-Wl,-rpath-link=$(STAGING_DIR)/usr/lib
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/cups/Default
+ URL:=http://www.cups.org/
+ SUBMENU:=Printing
+endef
+
+define Package/cups
+$(call Package/cups/Default)
+ SECTION:=net
+ CATEGORY:=Network
+ DEPENDS:=+libcups +libcupsmime +libcupscgi +libcupsppdc +libusb-1.0
+ TITLE:=Common UNIX Printing System (daemon)
+endef
+
+define Package/cups/description
+ Common UNIX Printing System (daemon)
+endef
+
+define Package/cups/conffiles
+/etc/cups/classes.conf
+/etc/cups/cupsd.conf
+/etc/cups/printers.conf
+endef
+
+define Package/cups-bsd
+$(call Package/cups/Default)
+ SECTION:=net
+ CATEGORY:=Network
+ DEPENDS:=+libcups
+ TITLE:=Common UNIX Printing System - BSD commands (old)
+endef
+
+define Package/cups-bsd/description
+ Common UNIX Printing System - BSD commands (old)
+endef
+
+define Package/cups-client
+$(call Package/cups/Default)
+ SECTION:=net
+ CATEGORY:=Network
+ DEPENDS:=+libcups +libcupsimage +libcupsmime
+ TITLE:=Common UNIX Printing System - Client commands
+endef
+
+define Package/cups-client/conffiles
+/etc/cups/client.conf
+endef
+
+define Package/cups-client/description
+ Common UNIX Printing System - Client commands
+endef
+
+define Package/cups-filters
+$(call Package/cups/Default)
+ SECTION:=net
+ CATEGORY:=Network
+ DEPENDS:=+libcupsimage
+ TITLE:=Common UNIX Printing System - Filter
+endef
+
+define Package/cups-filters/description
+ Common UNIX Printing System - Filter
+endef
+
+define Package/cups-ppdc
+$(call Package/cups/Default)
+ SECTION:=net
+ CATEGORY:=Network
+ DEPENDS:=+libcupsppdc
+ TITLE:=Common UNIX Printing System - PPDC utils
+endef
+
+define Package/cups-ppdc/description
+ Common UNIX Printing System - PPDC utils
+endef
+
+define Package/libcups
+$(call Package/cups/Default)
+ SECTION:=libs
+ CATEGORY:=Libraries
+ DEPENDS:=+zlib +libpthread +libpng +libjpeg
+ TITLE:=Common UNIX Printing System - Core library
+endef
+
+define Package/libcups/description
+ Common UNIX Printing System - Core library
+endef
+
+define Package/libcupscgi
+$(call Package/cups/Default)
+ SECTION:=libs
+ CATEGORY:=Libraries
+ DEPENDS:=+libcups
+ TITLE:=Common UNIX Printing System - CGI library
+endef
+
+define Package/libcupscgi/description
+ Common UNIX Printing System - CGI library
+endef
+
+define Package/libcupsimage
+$(call Package/cups/Default)
+ SECTION:=libs
+ CATEGORY:=Libraries
+ DEPENDS:=+libcups
+ TITLE:=Common UNIX Printing System - Image library
+endef
+
+define Package/libcupsimage/description
+ Common UNIX Printing System - Image library
+endef
+
+define Package/libcupsmime
+$(call Package/cups/Default)
+ SECTION:=libs
+ CATEGORY:=Libraries
+ DEPENDS:=+libcups
+ TITLE:=Common UNIX Printing System - MIME library
+endef
+
+define Package/libcupsmime/description
+ Common UNIX Printing System - MIME library
+endef
+
+define Package/libcupsppdc
+$(call Package/cups/Default)
+ SECTION:=libs
+ CATEGORY:=Libraries
+ DEPENDS:=+libcups +libstdcpp
+ TITLE:=Common UNIX Printing System - PPDC library
+endef
+
+define Package/libcupsppdc/description
+ Common UNIX Printing System - PPDC library
+endef
+
+define Build/Configure
+ $(call Build/Configure/Default, \
+ --with-cups-user="nobody" \
+ --with-cups-group="nogroup" \
+ --with-system-groups="root" \
+ --with-pdftops="none" \
+ --without-perl \
+ --without-python \
+ --without-php \
+ --enable-default-shared \
+ --enable-shared \
+ --enable-image \
+ --enable-libusb \
+ --disable-acl \
+ --disable-dnssd \
+ --disable-dbus \
+ --disable-avahi \
+ --disable-launchd \
+ --disable-ldap \
+ --disable-pam \
+ --disable-slp \
+ --disable-gnutls \
+ --disable-openssl \
+ --disable-cdsassl \
+ --disable-ssl \
+ --disable-gssapi \
+ --disable-tiff, \
+ UNAME="Linux" \
+ LIBS="$(TARGET_LDFLAGS) -lz -lpng -ljpeg" \
+ )
+endef
+
+define Build/Compile
+ $(MAKE) -C $(PKG_BUILD_DIR) \
+ $(TARGET_CONFIGURE_OPTS) \
+ DSTROOT="$(PKG_INSTALL_DIR)" \
+ STRIP="/bin/true" \
+ all install
+endef
+
+define Package/cups/install
+ rm -rf $(1)/etc/cups
+ $(INSTALL_DIR) $(1)/etc/cups
+ $(CP) $(PKG_INSTALL_DIR)/etc/cups/* $(1)/etc/cups/
+ rm -rf $(1)/etc/cups/certs
+ ln -sf /tmp $(1)/etc/cups/certs
+ rm -f $(1)/usr/bin/cups-config
+ $(INSTALL_DIR) $(1)/usr/lib/cups
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/cups/backend $(1)/usr/lib/cups
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/cups/cgi-bin $(1)/usr/lib/cups
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/cups/daemon $(1)/usr/lib/cups
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/cups/driver $(1)/usr/lib/cups
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/cups/monitor $(1)/usr/lib/cups
+ $(INSTALL_DIR) $(1)/usr/lib/cups/filter
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/cups/filter/{commandtops,pstops} \
+ $(PKG_INSTALL_DIR)/usr/lib/cups/filter/gziptoany \
+ $(1)/usr/lib/cups/filter
+ $(INSTALL_DIR) $(1)/usr/share/cups/templates
+ $(CP) $(PKG_INSTALL_DIR)/usr/share/cups/templates/*.tmpl \
+ $(1)/usr/share/cups/templates/
+ $(INSTALL_DIR) $(1)/usr/share/cups/mime
+ $(CP) $(PKG_INSTALL_DIR)/usr/share/cups/mime/* $(1)/usr/share/cups/mime/
+ ### Do install docs: cups web interface relies on them
+ $(INSTALL_DIR) $(1)/usr/share/doc/cups
+ $(CP) $(PKG_INSTALL_DIR)/usr/share/doc/cups/*.*html \
+ $(1)/usr/share/doc/cups/
+ $(CP) $(PKG_INSTALL_DIR)/usr/share/doc/cups/*.css \
+ $(1)/usr/share/doc/cups/
+ $(CP) $(PKG_INSTALL_DIR)/usr/share/doc/cups/*.txt \
+ $(1)/usr/share/doc/cups/
+ $(CP) $(PKG_INSTALL_DIR)/usr/share/doc/cups/images \
+ $(1)/usr/share/doc/cups/
+ $(INSTALL_DIR) $(1)/usr/sbin
+ # overwrite default config with our own
+ $(CP) ./files/etc/cups/* $(1)/etc/cups/
+ # install initscript with priority 60
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/cupsd.init $(1)/etc/init.d/cupsd
+ $(INSTALL_BIN) \
+ $(PKG_INSTALL_DIR)/usr/sbin/{cupsctl,cupsd} \
+ $(1)/usr/sbin/
+ # needed for cups to find usb printers per http://wiki.openwrt.org/doc/howto/cups.server
+ chmod 700 $(1)/usr/lib/cups/backend/usb
+endef
+
+define Package/cups-bsd/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/{lprm,lpq,lpr} $(1)/usr/bin/
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/lpc $(1)/usr/sbin/
+endef
+
+define Package/cups-client/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) \
+ $(PKG_INSTALL_DIR)/usr/bin/{lp,cancel,cupstestppd,cupstestdsc} \
+ $(PKG_INSTALL_DIR)/usr/bin/{ipptool,lpoptions,lpstat} \
+ $(1)/usr/bin/
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_BIN) \
+ $(PKG_INSTALL_DIR)/usr/sbin/{cupsaccept,cupsaddsmb,cupsfilter} \
+ $(PKG_INSTALL_DIR)/usr/sbin/{lpadmin,lpinfo,lpmove} \
+ $(1)/usr/sbin/
+ (cd $(1)/usr/sbin; ln -sf cupsaccept accept; ln -sf cupsaccept cupsenable; ln -sf cupsaccept cupsdisable; ln -sf cupsaccept reject; ln -sf cupsaccept cupsreject;)
+endef
+
+define Package/cups-filters/install
+ $(INSTALL_DIR) $(1)/usr/lib/cups/filter
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/cups/filter/{commandtops,gziptoany,pstops,rastertoepson,rastertohp,rastertolabel,rastertopwg} \
+ $(1)/usr/lib/cups/filter
+ (cd $(1)/usr/lib/cups/filter; ln -sf rastertolabel rastertodymo;)
+endef
+
+define Package/cups-ppdc/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) \
+ $(PKG_INSTALL_DIR)/usr/bin/{ppdc,ppdhtml,ppdi,ppdmerge,ppdpo} \
+ $(1)/usr/bin/
+endef
+
+define Package/libcups/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcups.so* $(1)/usr/lib/
+endef
+
+define Package/libcupscgi/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcupscgi.so* $(1)/usr/lib/
+endef
+
+define Package/libcupsimage/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcupsimage.so* $(1)/usr/lib/
+endef
+
+define Package/libcupsmime/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcupsmime.so* $(1)/usr/lib/
+endef
+
+define Package/libcupsppdc/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcupsppdc.so* $(1)/usr/lib/
+endef
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(2)/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/cups-config $(2)/bin/
+ $(INSTALL_DIR) $(1)/usr/include
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/cups $(1)/usr/include/
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcups*.so* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,cups))
+$(eval $(call BuildPackage,libcups))
+$(eval $(call BuildPackage,libcupscgi))
+$(eval $(call BuildPackage,libcupsimage))
+$(eval $(call BuildPackage,libcupsmime))
+$(eval $(call BuildPackage,libcupsppdc))
+$(eval $(call BuildPackage,cups-bsd))
+$(eval $(call BuildPackage,cups-client))
+$(eval $(call BuildPackage,cups-filters))
+$(eval $(call BuildPackage,cups-ppdc))
diff --git a/package/ctcgfw/cups/files/cupsd.init b/package/ctcgfw/cups/files/cupsd.init
new file mode 100755
index 0000000000..e5f00da9a4
--- /dev/null
+++ b/package/ctcgfw/cups/files/cupsd.init
@@ -0,0 +1,19 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006-2011 OpenWrt.org
+
+START=50
+
+start() {
+ mkdir -m 0755 -p /var/cache/cups
+ mkdir -m 0755 -p /var/cups
+ mkdir -m 0755 -p /var/spool/cups/tmp
+ service_start /usr/sbin/cupsd
+}
+
+stop() {
+ service_stop /usr/sbin/cupsd
+}
+
+reload() {
+ service_reload /usr/sbin/cupsd
+}
diff --git a/package/ctcgfw/cups/files/etc/cups/classes.conf b/package/ctcgfw/cups/files/etc/cups/classes.conf
new file mode 100644
index 0000000000..15afda75a2
--- /dev/null
+++ b/package/ctcgfw/cups/files/etc/cups/classes.conf
@@ -0,0 +1,7 @@
+########################################################################
+# #
+# This is a sample class configuration file. This file is included #
+# from the main configuration file (cups.conf) and lists all of the #
+# printer classes known to the system. #
+# #
+########################################################################
diff --git a/package/ctcgfw/cups/files/etc/cups/client.conf b/package/ctcgfw/cups/files/etc/cups/client.conf
new file mode 100644
index 0000000000..c8d9f910ed
--- /dev/null
+++ b/package/ctcgfw/cups/files/etc/cups/client.conf
@@ -0,0 +1,9 @@
+########################################################################
+# #
+# This is the CUPS client configuration file. This file is used to #
+# define client-specific parameters, such as the default server or #
+# default encryption settings. #
+# #
+########################################################################
+
+Encryption Never
diff --git a/package/ctcgfw/cups/files/etc/cups/cupsd.conf b/package/ctcgfw/cups/files/etc/cups/cupsd.conf
new file mode 100644
index 0000000000..48c4188386
--- /dev/null
+++ b/package/ctcgfw/cups/files/etc/cups/cupsd.conf
@@ -0,0 +1,58 @@
+########################################################################
+# #
+# This is the CUPS configuration file. If you are familiar with #
+# Apache or any of the other popular web servers, we've followed the #
+# same format. Any configuration variable used here has the same #
+# semantics as the corresponding variable in Apache. If we need #
+# different functionality then a different name is used to avoid #
+# confusion... #
+# #
+########################################################################
+
+
+AccessLog syslog
+ErrorLog syslog
+LogLevel info
+PageLog syslog
+PreserveJobHistory No
+PreserveJobFiles No
+AutoPurgeJobs Yes
+MaxJobs 25
+MaxPrinterHistory 10
+#Printcap /etc/printcap
+#PrintcapFormat BSD
+RequestRoot /var/cups
+#RemoteRoot remroot
+#User nobody
+#Group nogroup
+# root permissions required to make cups work with the usb backend
+User root
+Group root
+RIPCache auto
+TempDir /var/cups
+Port 631
+HostNameLookups On
+KeepAlive On
+# No: "BrowseOrder" "BrowseAllow" "BrowseRemoteProtocols"
+Browsing Yes
+BrowsingWebIF Yes
+BrowseLocalProtocols DNSSD
+DefaultShared Yes
+WebInterface no
+Listen /var/run/cups/cups.sock
+
+ServerAlias *
+
+
+Order Allow,Deny
+Allow From 127.0.0.1
+Allow From 192.168.1.0/24
+
+
+
+AuthType Basic
+AuthClass System
+Order Allow,Deny
+Allow From 127.0.0.1
+Allow From 192.168.1.0/24
+
diff --git a/package/ctcgfw/cups/files/etc/cups/printers.conf b/package/ctcgfw/cups/files/etc/cups/printers.conf
new file mode 100644
index 0000000000..88bba1b133
--- /dev/null
+++ b/package/ctcgfw/cups/files/etc/cups/printers.conf
@@ -0,0 +1,23 @@
+
+Info USB Printer
+Location
+DeviceURI usb:/dev/usb/lp0
+State Idle
+Accepting Yes
+JobSheets none none
+QuotaPeriod 0
+PageLimit 0
+KLimit 0
+
+
+
+Info Parallel Port Printer
+Location
+DeviceURI parallel:/dev/printers/0
+State Idle
+Accepting Yes
+JobSheets none none
+QuotaPeriod 0
+PageLimit 0
+KLimit 0
+
diff --git a/package/ctcgfw/cups/patches/100-target.patch b/package/ctcgfw/cups/patches/100-target.patch
new file mode 100644
index 0000000000..571cce1a69
--- /dev/null
+++ b/package/ctcgfw/cups/patches/100-target.patch
@@ -0,0 +1,11 @@
+--- a/configure
++++ b/configure
+@@ -5896,7 +5896,7 @@ fi
+
+ case "$COMPONENTS" in
+ all)
+- BUILDDIRS="filter backend berkeley cgi-bin monitor notifier ppdc scheduler systemv conf data desktop locale man doc examples templates"
++ BUILDDIRS="filter backend berkeley cgi-bin monitor ppdc scheduler systemv conf data desktop locale doc examples templates"
+ ;;
+
+ core)
diff --git a/package/ctcgfw/cups/patches/140-uname.patch b/package/ctcgfw/cups/patches/140-uname.patch
new file mode 100644
index 0000000000..3261de6187
--- /dev/null
+++ b/package/ctcgfw/cups/patches/140-uname.patch
@@ -0,0 +1,11 @@
+--- a/configure
++++ b/configure
+@@ -1966,7 +1966,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+-uname=`uname`
++uname=${UNAME:-`uname`}
+ uversion=`uname -r | sed -e '1,$s/^[^0-9]*\([0-9]*\)\.\([0-9]*\).*/\1\2/'`
+ uarch=`uname -m`
+
diff --git a/package/ctcgfw/cups/patches/150-64bit_host_fix.patch b/package/ctcgfw/cups/patches/150-64bit_host_fix.patch
new file mode 100644
index 0000000000..db46c44268
--- /dev/null
+++ b/package/ctcgfw/cups/patches/150-64bit_host_fix.patch
@@ -0,0 +1,33 @@
+--- a/config-scripts/cups-directories.m4
++++ b/config-scripts/cups-directories.m4
+@@ -104,7 +104,7 @@ if test "$libdir" = "\${exec_prefix}/lib
+ case "$uname" in
+ Linux*)
+ if test -d /usr/lib64 -a ! -d /usr/lib64/fakeroot; then
+- libdir="$exec_prefix/lib64"
++ libdir="$exec_prefix/lib"
+ fi
+ ;;
+ esac
+--- a/configure
++++ b/configure
+@@ -5998,7 +5998,7 @@ if test "$libdir" = "\${exec_prefix}/lib
+ case "$uname" in
+ Linux*)
+ if test -d /usr/lib64 -a ! -d /usr/lib64/fakeroot; then
+- libdir="$exec_prefix/lib64"
++ libdir="$exec_prefix/lib"
+ fi
+ ;;
+ esac
+--- a/cups-config.in
++++ b/cups-config.in
+@@ -50,7 +50,7 @@ else
+ CFLAGS="$CFLAGS -I$includedir"
+ fi
+
+- if test $libdir != /usr/lib -a $libdir != /usr/lib32 -a $libdir != /usr/lib64; then
++ if test $libdir != /usr/lib -a $libdir != /usr/lib -a $libdir != /usr/lib; then
+ LDFLAGS="$LDFLAGS -L$libdir"
+ fi
+ fi
diff --git a/package/ctcgfw/cups/patches/160-ppdc.patch b/package/ctcgfw/cups/patches/160-ppdc.patch
new file mode 100644
index 0000000000..b92780a10b
--- /dev/null
+++ b/package/ctcgfw/cups/patches/160-ppdc.patch
@@ -0,0 +1,17 @@
+--- a/ppdc/Makefile
++++ b/ppdc/Makefile
+@@ -238,13 +238,7 @@ framedhelp:
+
+ genstrings: genstrings.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC) \
+ sample.drv ../data/media.defs
+- echo Linking $@...
+- $(CXX) $(ARCHFLAGS) $(LDFLAGS) -o genstrings genstrings.o \
+- libcupsppdc.a ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) \
+- $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
+- echo Generating localization strings...
+- ./genstrings >sample.c
+-
++ echo Not Linking $@...
+
+ #
+ # ppdc, the PPD compiler.