Browse Source

Merge branch 'master' of git+ssh://openadk.org/git/openadk

Waldemar Brodkorb 13 years ago
parent
commit
1eff6309b4

+ 1 - 0
mk/mirrors.mk

@@ -20,6 +20,7 @@ MASTER_SITE_XORG?=	\
 	http://www.x.org/releases/X11R7.6/src/everything/ \
 	http://ftp.gwdg.de/pub/x11/x.org/pub/X11R7.6/src/everything/ \
 	http://xorg.freedesktop.org/releases/X11R7.6/src/everything/ \
+	http://xorg.freedesktop.org/releases/individual/app/ \
 	http://xorg.freedesktop.org/releases/individual/lib/ \
 	http://xorg.freedesktop.org/releases/individual/driver/ \
 	

+ 0 - 138
package/DirectFB/patches/patch-interfaces_IDirectFBImageProvider_idirectfbimageprovider_png_c

@@ -1,138 +0,0 @@
---- DirectFB-1.4.11.orig/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c	2010-10-31 09:49:49.000000000 +0100
-+++ DirectFB-1.4.11/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c	2011-03-29 10:57:18.433069010 +0200
-@@ -207,7 +207,7 @@ Construct( IDirectFBImageProvider *thiz,
-      if (!data->png_ptr)
-           goto error;
- 
--     if (setjmp( data->png_ptr->jmpbuf )) {
-+     if (png_jmpbuf( data->png_ptr )) {
-           D_ERROR( "ImageProvider/PNG: Error reading header!\n" );
-           goto error;
-      }
-@@ -292,7 +292,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDi
-           rect = dst_data->area.wanted;
-      }
- 
--     if (setjmp( data->png_ptr->jmpbuf )) {
-+     if (png_jmpbuf( data->png_ptr )) {
-           D_ERROR( "ImageProvider/PNG: Error during decoding!\n" );
- 
-           if (data->stage < STAGE_IMAGE)
-@@ -327,6 +327,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDi
-      }
-      else {
-           CoreSurfaceBufferLock lock;
-+          png_byte bit_depth = png_get_bit_depth( data->png_ptr, data->info_ptr );
- 
-           ret = dfb_surface_lock_buffer( dst_surface, CSBR_BACK, CSAID_CPU, CSAF_WRITE, &lock );
-           if (ret)
-@@ -334,7 +335,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDi
- 
-           switch (data->color_type) {
-                case PNG_COLOR_TYPE_PALETTE:
--                    if (dst_surface->config.format == DSPF_LUT8 && data->info_ptr->bit_depth == 8) {
-+                    if (dst_surface->config.format == DSPF_LUT8 && bit_depth == 8) {
-                          /*
-                           * Special indexed PNG to LUT8 loading.
-                           */
-@@ -377,7 +378,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDi
-                     }
-                     else {
-                          if (data->color_type == PNG_COLOR_TYPE_GRAY) {
--                              int num = 1 << data->info_ptr->bit_depth;
-+                              int num = 1 << bit_depth;
- 
-                               for (x=0; x<num; x++) {
-                                    int value = x * 255 / (num - 1);
-@@ -386,7 +387,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDi
-                               }
-                          }
- 
--                         switch (data->info_ptr->bit_depth) {
-+                         switch (bit_depth) {
-                               case 8:
-                                    for (y=0; y<data->height; y++) {
-                                         u8  *S = data->image + data->pitch * y;
-@@ -441,7 +442,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDi
- 
-                               default:
-                                    D_ERROR( "ImageProvider/PNG: Unsupported indexed bit depth %d!\n",
--                                            data->info_ptr->bit_depth );
-+                                            bit_depth );
-                          }
- 
-                          dfb_scale_linear_32( image_argb, data->width, data->height,
-@@ -594,16 +595,26 @@ png_info_callback( png_structp png_read_
-                    NULL, NULL, NULL );
- 
-      if (png_get_valid( data->png_ptr, data->info_ptr, PNG_INFO_tRNS )) {
-+          png_bytep     trans;
-+          png_color_16p trans_color;
-+          int           num_trans;
-+
-+          png_get_tRNS( data->png_ptr, data->info_ptr, &trans, &num_trans, &trans_color );
-+
-           data->color_keyed = true;
- 
-           /* generate color key based on palette... */
-           if (data->color_type == PNG_COLOR_TYPE_PALETTE) {
-                u32        key;
--               png_colorp palette    = data->info_ptr->palette;
--               png_bytep  trans      = data->info_ptr->trans_alpha;
--               int        num_colors = MIN( MAXCOLORMAPSIZE,
--                                            data->info_ptr->num_palette );
--               u8         cmap[3][num_colors];
-+               png_colorp palette;
-+               int        num_colors;
-+               u8        *cmap[3];
-+
-+               png_get_PLTE( data->png_ptr, data->info_ptr, &palette, &num_colors );
-+               num_colors = MIN( MAXCOLORMAPSIZE, num_colors );
-+               cmap[0] = alloca (num_colors);
-+               cmap[1] = alloca (num_colors);
-+               cmap[2] = alloca (num_colors);
- 
-                for (i=0; i<num_colors; i++) {
-                     cmap[0][i] = palette[i].red;
-@@ -613,7 +624,7 @@ png_info_callback( png_structp png_read_
- 
-                key = FindColorKey( num_colors, &cmap[0][0] );
- 
--               for (i=0; i<data->info_ptr->num_trans; i++) {
-+               for (i=0; i<num_trans; i++) {
-                     if (!trans[i]) {
-                          palette[i].red   = (key & 0xff0000) >> 16;
-                          palette[i].green = (key & 0x00ff00) >>  8;
-@@ -625,20 +636,23 @@ png_info_callback( png_structp png_read_
-           }
-           else {
-                /* ...or based on trans rgb value */
--               png_color_16p trans = &data->info_ptr->trans_color;
--
--               data->color_key = (((trans->red & 0xff00) << 8) |
--                                  ((trans->green & 0xff00)) |
--                                  ((trans->blue & 0xff00) >> 8));
-+               data->color_key = (((trans_color->red & 0xff00) << 8) |
-+                                  ((trans_color->green & 0xff00)) |
-+                                  ((trans_color->blue & 0xff00) >> 8));
-           }
-      }
- 
-      switch (data->color_type) {
-           case PNG_COLOR_TYPE_PALETTE: {
--               png_colorp palette    = data->info_ptr->palette;
--               png_bytep  trans      = data->info_ptr->trans_alpha;
--               int        num_trans  = data->info_ptr->num_trans;
--               int        num_colors = MIN( MAXCOLORMAPSIZE, data->info_ptr->num_palette );
-+               png_colorp    palette;
-+               png_bytep     trans;
-+               png_color_16p trans_color;
-+               int           num_trans;
-+               int           num_colors;
-+
-+               png_get_PLTE( data->png_ptr, data->info_ptr, &palette, &num_colors );
-+               num_colors = MIN( MAXCOLORMAPSIZE, num_colors );
-+               png_get_tRNS( data->png_ptr, data->info_ptr, &trans, &num_trans, &trans_color );
- 
-                for (i=0; i<num_colors; i++) {
-                     data->colors[i].a = (i < num_trans) ? trans[i] : 0xff;

+ 0 - 11
package/DirectFB/patches/patch-tools_mkdfiff_c

@@ -1,11 +0,0 @@
---- DirectFB-1.4.11.orig/tools/mkdfiff.c	2010-10-31 09:49:49.000000000 +0100
-+++ DirectFB-1.4.11/tools/mkdfiff.c	2011-03-29 10:57:18.503068913 +0200
-@@ -97,7 +97,7 @@ load_image (const char            *filen
-      if (!png_ptr)
-           goto cleanup;
- 
--     if (setjmp (png_ptr->jmpbuf)) {
-+     if (setjmp (png_jmpbuf (png_ptr))) {
-           if (desc->preallocated[0].data) {
-                free (desc->preallocated[0].data);
-                desc->preallocated[0].data = NULL;

+ 0 - 11
package/DirectFB/patches/patch-tools_mkdgifft_cpp

@@ -1,11 +0,0 @@
---- DirectFB-1.4.11.orig/tools/mkdgifft.cpp	2010-10-31 09:52:08.000000000 +0100
-+++ DirectFB-1.4.11/tools/mkdgifft.cpp	2011-03-29 10:57:18.581810094 +0200
-@@ -595,7 +595,7 @@ load_image (const char            *filen
-      if (!png_ptr)
-           goto cleanup;
- 
--     if (setjmp (png_ptr->jmpbuf)) {
-+     if (setjmp (png_jmpbuf (png_ptr))) {
-           if (desc->preallocated[0].data) {
-                free (desc->preallocated[0].data);
-                desc->preallocated[0].data = NULL;

+ 37 - 2
package/busybox/config/miscutils/Config.in

@@ -33,20 +33,55 @@ config BUSYBOX_NANDDUMP
 	help
 	  Dump the content of raw NAND chip
 
+config BUSYBOX_SETSERIAL
+	bool "setserial"
+	default n
+	select PLATFORM_LINUX
+	help
+	  Retrieve or set Linux serial port.
+
 config BUSYBOX_UBIATTACH
 	bool "ubiattach"
 	default n
-	depends on BUSYBOX_PLATFORM_LINUX
+	select PLATFORM_LINUX
 	help
 	  Attach MTD device to an UBI device.
 
 config BUSYBOX_UBIDETACH
 	bool "ubidetach"
 	default n
-	depends on BUSYBOX_PLATFORM_LINUX
+	select PLATFORM_LINUX
 	help
 	  Detach MTD device from an UBI device.
 
+config BUSYBOX_UBIMKVOL
+	bool "ubimkvol"
+	default n
+	select PLATFORM_LINUX
+	help
+	  Create a UBI volume.
+
+config BUSYBOX_UBIRMVOL
+	bool "ubirmvol"
+	default n
+	select PLATFORM_LINUX
+	help
+	  Delete a UBI volume.
+
+config BUSYBOX_UBIRSVOL
+	bool "ubirsvol"
+	default n
+	select PLATFORM_LINUX
+	help
+	  Resize a UBI volume.
+
+config BUSYBOX_UBIUPDATEVOL
+	bool "ubiupdatevol"
+	default n
+	select PLATFORM_LINUX
+	help
+	  Update a UBI volume.
+
 config BUSYBOX_ADJTIMEX
 	bool "adjtimex"
 	default n

+ 2 - 2
package/busybox/config/procps/Config.in

@@ -7,7 +7,7 @@ menu "Process Utilities"
 
 config BUSYBOX_FREE
 	bool "free"
-	default n
+	default y
 	depends on BUSYBOX_PLATFORM_LINUX #sysinfo()
 	help
 	  free displays the total amount of free and used physical and swap
@@ -16,7 +16,7 @@ config BUSYBOX_FREE
 
 config BUSYBOX_FUSER
 	bool "fuser"
-	default n
+	default y
 	help
 	  fuser lists all PIDs (Process IDs) that currently have a given
 	  file open. fuser can also list all PIDs that have a given network

+ 7 - 0
package/fbset/files/fb.modes

@@ -1009,3 +1009,10 @@ mode "320x240-103"
     rgba 8/16,8/8,8/0,8/24
 endmode
 
+# setting for lemote
+mode "1024x600"
+    geometry 1024 600 1024 600 8
+    timings 0 0 0 0 0 0 0
+    rgba 3/5,3/2,2/0,0/0
+endmode
+

+ 10 - 1
package/libtirpc/patches/patch-src_Makefile_in

@@ -1,5 +1,5 @@
 --- libtirpc-0.2.2.orig/src/Makefile.in	2011-05-02 14:31:55.000000000 +0200
-+++ libtirpc-0.2.2/src/Makefile.in	2012-03-22 19:02:24.598855474 +0100
++++ libtirpc-0.2.2/src/Makefile.in	2012-03-27 22:24:03.971238587 +0200
 @@ -81,8 +81,8 @@ am__libtirpc_la_SOURCES_DIST = auth_none
  	rpc_commondata.c rpc_callmsg.c rpc_generic.c rpc_soc.c \
  	rpcb_clnt.c rpcb_prot.c rpcb_st_xdr.c svc.c svc_auth.c \
@@ -21,6 +21,15 @@
  	libtirpc_la-xdr.lo libtirpc_la-xdr_rec.lo \
  	libtirpc_la-xdr_array.lo libtirpc_la-xdr_float.lo \
  	libtirpc_la-xdr_mem.lo libtirpc_la-xdr_reference.lo \
+@@ -291,7 +290,7 @@ lib_LTLIBRARIES = libtirpc.la
+ # release number of your package. This is an abuse that only fosters
+ # misunderstanding of the purpose of library versions."
+ #
+-libtirpc_la_LDFLAGS = -lnsl -lpthread -version-info 1:10:0 \
++libtirpc_la_LDFLAGS = -lpthread -version-info 1:10:0 \
+ 	$(am__append_2)
+ libtirpc_la_SOURCES = auth_none.c auth_unix.c authunix_prot.c \
+ 	bindresvport.c clnt_bcast.c clnt_dg.c clnt_generic.c \
 @@ -302,8 +301,8 @@ libtirpc_la_SOURCES = auth_none.c auth_u
  	rpc_commondata.c rpc_callmsg.c rpc_generic.c rpc_soc.c \
  	rpcb_clnt.c rpcb_prot.c rpcb_st_xdr.c svc.c svc_auth.c \

+ 4 - 2
package/pam/Makefile

@@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=		pam
 PKG_VERSION:=		1.1.4
-PKG_RELEASE:=		1
+PKG_RELEASE:=		2
 PKG_MD5SUM:=		ff8f3c4382b78ac211e11bcd56ab17bf
 PKG_DESCR:=		Pluggable Authentication Modules
 PKG_BUILDDEP:=		flex
@@ -20,6 +20,8 @@ include $(TOPDIR)/mk/package.mk
 $(eval $(call PKG_template,PAM,pam,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 
 XAKE_FLAGS+=		GCC_HONOUR_COPTS=s
+CONFIGURE_ARGS+=	--disable-nis \
+			--enable-db=no
 
 pam-install:
 	$(INSTALL_DIR) $(IDIR_PAM)/etc/security
@@ -27,7 +29,7 @@ pam-install:
 	$(INSTALL_DIR) $(IDIR_PAM)/lib/security
 	$(CP) $(WRKINST)/lib/libpam*.so* $(IDIR_PAM)/lib
 	$(CP) $(WRKINST)/lib/security/*.so* $(IDIR_PAM)/lib/security
-	$(CP) $(WRKBUILD)/conf/pam.conf $(IDIR_PAM)/etc
+	$(CP) ./files/pam.conf $(IDIR_PAM)/etc
 	# /lib is not automatically installed to staging area
 	$(CP) $(WRKINST)/lib/libpam*.so* $(STAGING_DIR)/usr/lib
 

+ 126 - 0
package/pam/files/pam.conf

@@ -0,0 +1,126 @@
+# ---------------------------------------------------------------------------#
+# /etc/pam.conf								     #
+#									     #
+# Last modified by Andrew G. Morgan <morgan@kernel.org>		             #
+# ---------------------------------------------------------------------------#
+# $Id$
+# ---------------------------------------------------------------------------#
+# serv.	module	   ctrl	      module [path]	...[args..]		     #
+# name	type	   flag							     #
+# ---------------------------------------------------------------------------#
+#
+# The PAM configuration file for the `chfn' service
+#
+chfn	auth       required   pam_unix.so
+chfn	account    required   pam_unix.so
+#chfn	password   required   pam_cracklib.so retry=3
+chfn	password   required   pam_unix.so shadow md5 use_authtok
+#
+# The PAM configuration file for the `chsh' service
+#
+chsh	auth       required   pam_unix.so
+chsh	account    required   pam_unix.so
+#chsh	password   required   pam_cracklib.so retry=3
+chsh	password   required   pam_unix.so shadow md5 use_authtok
+#
+# The PAM configuration file for the `ftp' service
+#
+ftp	auth       requisite  pam_listfile.so \
+		item=user sense=deny file=/etc/ftpusers onerr=succeed
+ftp	auth       requisite  pam_shells.so
+ftp	auth       required   pam_unix.so
+ftp	account    required   pam_unix.so
+#
+# The PAM configuration file for the `imap' service
+#
+imap	auth       required   pam_unix.so
+imap	account    required   pam_unix.so
+#
+# The PAM configuration file for the `login' service
+#
+#login	auth       requisite  pam_securetty.so
+login	auth       required   pam_unix.so
+login	auth       optional   pam_group.so
+login	account    requisite  pam_time.so
+login	account    required   pam_unix.so
+#login	password   required   pam_cracklib.so retry=3
+login	password   required   pam_unix.so shadow md5 use_authtok
+login	session    required   pam_unix.so
+#
+# The PAM configuration file for the `netatalk' service
+#
+netatalk	auth       required   pam_unix.so
+netatalk	account    required   pam_unix.so
+#
+# The PAM configuration file for the `other' service
+#
+other	auth       required   pam_deny.so
+other	auth       required   pam_warn.so
+other	account    required   pam_deny.so
+other	password   required   pam_deny.so
+other	password   required   pam_warn.so
+other	session    required   pam_deny.so
+#
+# The PAM configuration file for the `passwd' service
+#
+#passwd	password   requisite  pam_cracklib.so retry=3
+passwd	password   required   pam_unix.so shadow md5 use_authtok
+#
+# The PAM configuration file for the `rexec' service
+#
+rexec	auth       requisite  pam_securetty.so
+rexec	auth       requisite  pam_nologin.so
+rexec	auth       sufficient pam_rhosts_auth.so
+rexec	auth       required   pam_unix.so
+rexec	account    required   pam_unix.so
+rexec	session    required   pam_unix.so
+rexec	session    required   pam_limits.so
+#
+# The PAM configuration file for the `rlogin' service
+# this application passes control to `login' if it fails
+#
+rlogin	auth       requisite  pam_securetty.so
+rlogin	auth       requisite  pam_nologin.so
+rlogin	auth       required   pam_rhosts_auth.so
+rlogin	account    required   pam_unix.so
+#rlogin	password   required   pam_cracklib.so retry=3
+rlogin	password   required   pam_unix.so shadow md5 use_authtok
+rlogin	session    required   pam_unix.so
+rlogin	session    required   pam_limits.so
+#
+# The PAM configuration file for the `rsh' service
+#
+rsh	auth       requisite  pam_securetty.so
+rsh	auth       requisite  pam_nologin.so
+rsh	auth       sufficient pam_rhosts_auth.so
+rsh	auth       required   pam_unix.so
+rsh	account    required   pam_unix.so
+rsh	session    required   pam_unix.so
+rsh	session    required   pam_limits.so
+#
+# The PAM configuration file for the `samba' service
+#
+samba	auth       required   pam_unix.so
+samba	account    required   pam_unix.so
+#
+# The PAM configuration file for the `su' service
+#
+su	auth       required   pam_wheel.so
+su	auth       sufficient pam_rootok.so
+su	auth       required   pam_unix.so
+su	account    required   pam_unix.so
+su	session    required   pam_unix.so
+#
+# The PAM configuration file for the `vlock' service
+#
+vlock	auth       required   pam_unix.so
+#
+# The PAM configuration file for the `xdm' service
+#
+xdm	auth       required   pam_unix.so
+xdm	account    required   pam_unix.so
+#
+# The PAM configuration file for the `xlock' service
+#
+xlock	auth       required   pam_unix.so
+

+ 24 - 0
package/xconsole/Makefile

@@ -0,0 +1,24 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=		xconsole
+PKG_VERSION:=		1.0.4
+PKG_RELEASE:=		1
+PKG_MD5SUM:=		c617acec432901a3c1a2b23b022624cb
+PKG_DESCR:=		X console app
+PKG_SECTION:=		x11/apps
+PKG_URL:=		http://xorg.freedesktop.org/
+PKG_SITES:=		${MASTER_SITE_XORG}
+
+include $(TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,XCONSOLE,$(PKG_NAME),$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+
+post-install:
+	$(INSTALL_DIR) $(IDIR_XCONSOLE)/usr/bin
+	$(INSTALL_BIN) $(WRKINST)/usr/bin/xconsole \
+		$(IDIR_XCONSOLE)/usr/bin
+
+include ${TOPDIR}/mk/pkg-bottom.mk

+ 36 - 0
package/xdm/Makefile

@@ -0,0 +1,36 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=		xdm
+PKG_VERSION:=		1.1.11
+PKG_RELEASE:=		1
+PKG_MD5SUM:=		aaf8c3d05d4a1e689d2d789c99a6023c
+PKG_DESCR:=		X display manager
+PKG_SECTION:=		x11/apps
+PKG_BUILDDEP:=		pam
+PKG_DEPENDS:=		xconsole pam xsm
+PKG_URL:=		http://xorg.freedesktop.org/
+PKG_SITES:=		${MASTER_SITE_XORG}
+
+include $(TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,XDM,$(PKG_NAME),$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+
+CONFIGURE_ARGS+=	--with-random-device=/dev/urandom \
+			--with-utmp-file=/dev/null \
+			--with-wtmp-file=/dev/null
+
+post-install:
+	$(INSTALL_DIR) $(IDIR_XDM)/usr/lib/X11
+	$(CP) $(WRKINST)/usr/lib/X11/* \
+		$(IDIR_XDM)/usr/lib/X11
+	$(INSTALL_DIR) $(IDIR_XDM)/usr/share/X11
+	$(CP) $(WRKINST)/usr/share/X11/* \
+		$(IDIR_XDM)/usr/lib/X11
+	$(INSTALL_DIR) $(IDIR_XDM)/usr/bin
+	$(INSTALL_BIN) $(WRKINST)/usr/bin/xdm \
+		$(IDIR_XDM)/usr/bin
+
+include ${TOPDIR}/mk/pkg-bottom.mk

+ 30 - 0
package/xsm/Makefile

@@ -0,0 +1,30 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=		xsm
+PKG_VERSION:=		1.0.2
+PKG_RELEASE:=		1
+PKG_MD5SUM:=		6dfc70ae1c13f775f1c646a6d8780076
+PKG_DESCR:=		X session manager
+PKG_SECTION:=		x11/apps
+PKG_URL:=		http://xorg.freedesktop.org/
+PKG_SITES:=		${MASTER_SITE_XORG}
+
+include $(TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,XSM,$(PKG_NAME),$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+
+post-install:
+	$(INSTALL_DIR) $(IDIR_XSM)/usr/lib/X11
+	$(CP) $(WRKINST)/usr/lib/X11/* \
+		$(IDIR_XSM)/usr/lib/X11
+	$(INSTALL_DIR) $(IDIR_XSM)/usr/share/X11
+	$(CP) $(WRKINST)/usr/share/X11/* \
+		$(IDIR_XSM)/usr/lib/X11
+	$(INSTALL_DIR) $(IDIR_XSM)/usr/bin
+	$(INSTALL_BIN) $(WRKINST)/usr/bin/xsm \
+		$(IDIR_XSM)/usr/bin
+
+include ${TOPDIR}/mk/pkg-bottom.mk