# pkgutils
#
# Copyright (c) 2000-2005 by Per Liden <per@fukt.bth.se>
-# Copyright (c) 2006-2007 by CRUX team (http://crux.nu)
+# Copyright (c) 2006-2010 by CRUX team (http://crux.nu)
#
# 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
MANDIR = /usr/man
ETCDIR = /etc
-VERSION = 5.34.2
+VERSION = 5.35.1
NAME = pkgutils-$(VERSION)
CXXFLAGS += -DNDEBUG
CXXFLAGS += -O2 -Wall -pedantic -D_GNU_SOURCE -DVERSION=\"$(VERSION)\" \
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
-LDFLAGS += -static -larchive -lz
+LIBARCHIVELIBS := $(shell pkg-config --libs --static libarchive)
+
+LDFLAGS += -static $(LIBARCHIVELIBS)
OBJECTS = main.o pkgutil.o pkgadd.o pkgrm.o pkginfo.o
Copyright
---------
pkgutils is Copyright (c) 2000-2005 Per Liden and
-Copyright (c) 2006-2007 CRUX team (http://crux.nu).
+Copyright (c) 2006-2010 CRUX team (http://crux.nu).
pkgutils is licensed through the GNU General Public License.
Read the COPYING file for the complete license.
// pkgutils
//
// Copyright (c) 2000-2005 Per Liden
-// Copyright (c) 2006-2007 by CRUX team (http://crux.nu)
+// Copyright (c) 2006-2010 by CRUX team (http://crux.nu)
//
// 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
.SH SEE ALSO
pkgrm(8), pkginfo(8), pkgmk(8), rejmerge(8)
.SH COPYRIGHT
-pkgadd (pkgutils) is Copyright (c) 2000-2005 Per Liden and Copyright (c) 2006-2007 CRUX team (http://crux.nu).
+pkgadd (pkgutils) is Copyright (c) 2000-2005 Per Liden and Copyright (c) 2006-2010 CRUX team (http://crux.nu).
pkgadd (pkgutils) is licensed through the GNU General Public License.
Read the COPYING file for the complete license.
// pkgutils
//
// Copyright (c) 2000-2005 Per Liden
-// Copyright (c) 2006-2007 by CRUX team (http://crux.nu)
+// Copyright (c) 2006-2010 by CRUX team (http://crux.nu)
//
// 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
.SH SEE ALSO
pkgadd(8), pkgrm(8), pkgmk(8), rejmerge(8)
.SH COPYRIGHT
-pkginfo (pkgutils) is Copyright (c) 2000-2005 Per Liden and Copyright (c) 2006-2007 CRUX team (http://crux.nu).
+pkginfo (pkgutils) is Copyright (c) 2000-2005 Per Liden and Copyright (c) 2006-2010 CRUX team (http://crux.nu).
pkginfo (pkgutils) is licensed through the GNU General Public License.
Read the COPYING file for the complete license.
// pkgutils
//
// Copyright (c) 2000-2005 Per Liden
-// Copyright (c) 2006-2007 by CRUX team (http://crux.nu)
+// Copyright (c) 2006-2010 by CRUX team (http://crux.nu)
//
// 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
// pkgutils
//
// Copyright (c) 2000-2005 Per Liden
-// Copyright (c) 2006-2007 by CRUX team (http://crux.nu)
+// Copyright (c) 2006-2010 by CRUX team (http://crux.nu)
//
// 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
\fBpkgmk [options]\fP
.SH DESCRIPTION
\fBpkgmk\fP is a \fIpackage management\fP utility, which makes
-a software package. A \fIpackage\fP is an archive of files (.pkg.tar.gz)
+a software package. A \fIpackage\fP is an archive of files (.pkg.tar.gz, .pkg.tar.bz2 or .pkg.tar.xz)
that can be installed using pkgadd(8).
To prepare to use pkgmk, you must write a file named \fIPkgfile\fP
.B "\-if, \-\-ignore\-footprint"
Build package without checking footprint.
.TP
+.B "\-in, \-\-ignore\-new"
+Build package, ignore new files in a footprint mismatch.
+.TP
.B "\-um, \-\-update\-md5sum"
Update md5sum using the current source files.
.TP
.TP
.B "wget"
Used by pkgmk to download source code.
+.SH EXIT CODES
+.TP
+.B 0
+No error occured.
+.TP
+.B 1
+A general error has occured.
+.TP
+.B 2
+The Pkgfile is invalid.
+.TP
+.B 3
+The source or build directory is missing or is lacking read/write permissions.
+.TP
+.B 4
+An error occured during the download of source files.
+.TP
+.B 5
+An error occured during unpacking of source files.
+.TP
+.B 6
+An md5sum mismatch occured.
+.TP
+.B 7
+A footprint mismatch occured.
+.TP
+.B 8
+An error occured while running the build function.
+.TP
+.B 9
+An error occured while installing the package via pkgadd.
.SH SEE ALSO
pkgmk.conf(5), pkgadd(8), pkgrm(8), pkginfo(8), rejmerge(8), wget(1)
.SH COPYRIGHT
-pkgmk (pkgutils) is Copyright (c) 2000-2005 Per Liden and Copyright (c) 2006-2007 CRUX team (http://crux.nu).
+pkgmk (pkgutils) is Copyright (c) 2000-2005 Per Liden and Copyright (c) 2006-2010 CRUX team (http://crux.nu).
pkgmk (pkgutils) is licensed through the GNU General Public License.
Read the COPYING file for the complete license.
# eabi
export CTARGET="arm-crux-linux-gnueabi"
-export CLFS="/devel/crux-arm/toolchain/clfs"
-export CROSSTOOLS="/devel/crux-arm/toolchain/crosstools"
+export CLFS="/des/lokalix/crux-arm/prod/toolchain/clfs"
+export CROSSTOOLS="/des/lokalix/crux-arm/prod/toolchain/crosstools"
# no-eabi
#export CTARGET="arm-crux-linux-gnu"
export LD="$CTARGET-ld"
export STRIP="$CTARGET-strip"
-export CFLAGS="-O2 -pipe"
+export CFLAGS="-O2 -msoft-float"
export CXXFLAGS="$CFLAGS"
+#export CFLAGS="-O2 -pipe"
+#export CXXFLAGS="$CFLAGS"
+
arm9tdmi_CFLAGS="-O2 -pipe -march=armv4 -mtune=arm9tdmi"
armv5te_CFLAGS="-O2 -pipe -msoft-float -march=armv5te"
strongarm_CFLAGS="-O2 -pipe -march=armv4 -mtune=strongarm"
# PKGMK_SOURCE_MIRRORS=()
# PKGMK_SOURCE_DIR="$PWD"
+PKGMK_SOURCE_DIR="/des/lokalix/crux-arm/prod/ports/src"
# PKGMK_PACKAGE_DIR="$PWD"
+PKGMK_PACKAGE_DIR="/des/lokalix/crux-arm/prod/ports/pkg"
# PKGMK_WORK_DIR="$PWD/work"
+PKGMK_WORK_DIR="$PWD/work"
# PKGMK_DOWNLOAD="no"
# PKGMK_IGNORE_FOOTPRINT="no"
+# PKGMK_IGNORE_NEW="no"
# PKGMK_NO_STRIP="no"
# PKGMK_WGET_OPTS=""
+# PKGMK_COMPRESSION_MODE="gz"
# End of file
.br
Default: 'no'
.TP
+\fBPKGMK_IGNORE_NEW='STRING'\fP
+If set to 'yes', pkgmk will ignore new files in a footprint mismatch.
+.br
+Default: 'no'
+.TP
\fBPKGMK_NO_STRIP='STRING'\fP
If set to 'no', pkgmk will strip built binaries.
.br
Default: 'no'
+.TP
+\fBPKGMK_COMPRESSION_MODE='STRING'\fP
+Option to select the mode used to compress the packages. Valid strings are gz, bz2 and xz.
+.br
+Default: 'gz'
.SH SEE ALSO
pkgmk(8)
.SH COPYRIGHT
-pkgmk (pkgutils) is Copyright (c) 2000-2005 Per Liden and Copyright (c) 2006-2008 CRUX team (http://crux.nu).
+pkgmk (pkgutils) is Copyright (c) 2000-2005 Per Liden and Copyright (c) 2006-2010 CRUX team (http://crux.nu).
pkgmk (pkgutils) is licensed through the GNU General Public License.
Read the COPYING file for the complete license.
# pkgutils
#
# Copyright (c) 2000-2005 Per Liden
-# Copyright (c) 2006-2007 by CRUX team (http://crux.nu)
-#
+# Copyright (c) 2006-2010 by CRUX team (http://crux.nu)
# Patches for crosscompilation by Jose V Beneyto <sepen@crux.nu>
-# (CRUX-ARM System Team <crux-arm@mikeux.dyndns.org>)
+# (CRUX-ARM System Team <devel@crux-arm.nu>)
#
# 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
# USA.
#
+##
+# error codes
+E_GENERAL=1
+E_PKGFILE=2 # invalid Pkgfile
+E_DIR_PERM=3 # (source/build) directory missing or missing read/write permission
+E_DOWNLOAD=4 # error during download
+E_UNPACK=5 # error during unpacking of source file(s)
+E_MD5=6 # md5sum verification failed
+E_FOOTPRINT=7 # footprint check failure
+E_BUILD=8 # error while running 'build()'
+E_INSTALL=9 # error while installing the package via 'pkgadd'
+
info() {
echo "=======> $1"
}
check_pkgfile() {
if [ ! "$name" ]; then
error "Variable 'name' not specified in $PKGMK_PKGFILE."
- exit 1
+ exit $E_PKGFILE
elif [ ! "$version" ]; then
error "Variable 'version' not specified in $PKGMK_PKGFILE."
- exit 1
+ exit $E_PKGFILE
elif [ ! "$release" ]; then
error "Variable 'release' not specified in $PKGMK_PKGFILE."
- exit 1
+ exit $E_PKGFILE
elif [ "`type -t build`" != "function" ]; then
error "Function 'build' not specified in $PKGMK_PKGFILE."
- exit 1
+ exit $E_PKGFILE
fi
}
check_directory() {
if [ ! -d $1 ]; then
error "Directory '$1' does not exist."
- exit 1
+ exit $E_DIR_PERM
elif [ ! -w $1 ]; then
error "Directory '$1' not writable."
- exit 1
+ exit $E_DIR_PERM
elif [ ! -x $1 ] || [ ! -r $1 ]; then
error "Directory '$1' not readable."
- exit 1
+ exit $E_DIR_PERM
fi
}
if [ ! "`type -p wget`" ]; then
error "Command 'wget' not found."
- exit 1
+ exit $E_GENERAL
fi
LOCAL_FILENAME=`get_filename $1`
if [ $error != 0 ]; then
error "Downloading '$1' failed."
- exit 1
+ exit $E_DOWNLOAD
fi
mv -f "$LOCAL_FILENAME_PARTIAL" "$LOCAL_FILENAME"
if [ ! -e $LOCAL_FILENAME ]; then
if [ "$LOCAL_FILENAME" = "$FILE" ]; then
error "Source file '$LOCAL_FILENAME' not found (can not be downloaded, URL not specified)."
- exit 1
+ exit $E_DOWNLOAD
else
if [ "$PKGMK_DOWNLOAD" = "yes" ]; then
download_file $FILE
else
error "Source file '$LOCAL_FILENAME' not found (use option -d to download)."
- exit 1
+ exit $E_DOWNLOAD
fi
fi
fi
for FILE in ${source[@]}; do
LOCAL_FILENAME=`get_filename $FILE`
case $LOCAL_FILENAME in
- *.tar.gz|*.tar.Z|*.tgz|*.tar.bz2|*.tar.xz|*.tar.lzma|*.zip)
+ *.tar.gz|*.tar.Z|*.tgz|*.tar.bz2|*.tbz2|*.tar.xz|*.txz|*.tar.lzma|*.zip|*.rpm)
COMMAND="bsdtar -p -o -C $SRC -xf $LOCAL_FILENAME" ;;
*)
COMMAND="cp $LOCAL_FILENAME $SRC" ;;
rm -rf $PKGMK_WORK_DIR
fi
error "Building '$TARGET' failed."
- exit 1
+ exit $E_UNPACK
fi
done
}
if [ "$PKGMK_CHECK_MD5SUM" = "yes" ]; then
error "Md5sum not ok."
- exit 1
+ exit $E_MD5
fi
error "Building '$TARGET' failed."
- exit 1
+ exit $E_MD5
fi
else
if [ "$PKGMK_CHECK_MD5SUM" = "yes" ]; then
rm -rf $PKGMK_WORK_DIR
fi
info "Md5sum not found."
- exit 1
+ exit $E_MD5
fi
warning "Md5sum not found, creating new."
done
}
-fix_cross_paths() {
- # remove the last / from CLFS path if appeared
- CLFS=${CLFS%*/}
-
- find $PKG -type f -name '*.la' -exec sed -e "s|$CLFS||g" -e "s|$CROSTOOLS/$CTARGET|/usr|g" -e "s|$CROSSTOOLS||g" -i {} \;
-}
-
check_footprint() {
local FILE="$PKGMK_WORK_DIR/.tmp"
sed 's/^+/NEW /g' | \
sed 's/^-/MISSING /g' > $FILE.footprint.diff
if [ -s $FILE.footprint.diff ]; then
- error "Footprint mismatch found:"
+ if [ "$PKGMK_IGNORE_NEW" = "yes" ] && \
+ [ -z "$(egrep -l ^MISSING $FILE.footprint.diff)" ] ; then
+ info "New files found:"
+ else
+ error "Footprint mismatch found:"
+ BUILD_SUCCESSFUL="no"
+ fi
cat $FILE.footprint.diff >&2
- BUILD_SUCCESSFUL="no"
fi
else
warning "Footprint not found, creating new."
build_package() {
local BUILD_SUCCESSFUL="no"
+ local COMPRESSION
check_file "$TARGET"
make_work_dir
fi
compress_manpages
- fix_cross_paths
cd $PKG
info "Build result:"
- tar czvvf $TARGET *
-
+
+ case $PKGMK_COMPRESSION_MODE in
+ gz) COMPRESSION="-z" ;;
+ bz2) COMPRESSION="-j" ;;
+ xz) COMPRESSION="-J" ;;
+ esac
+ bsdtar -c $COMPRESSION -f $TARGET * && bsdtar -t -v -f $TARGET
+
if [ $? = 0 ]; then
BUILD_SUCCESSFUL="yes"
echo " -utd, --up-to-date do not build, only check if package is up to date"
echo " -uf, --update-footprint update footprint using result from last build"
echo " -if, --ignore-footprint build package without checking footprint"
+ echo " -in, --ignore-new build package, ignore new files in a footprint missmatch"
echo " -um, --update-md5sum update md5sum"
echo " -im, --ignore-md5sum build package without checking md5sum"
echo " -cm, --check-md5sum do not build, only check md5sum"
PKGMK_UPDATE_FOOTPRINT="yes" ;;
-if|--ignore-footprint)
PKGMK_IGNORE_FOOTPRINT="yes" ;;
+ -in|--ignore-new)
+ PKGMK_IGNORE_NEW="yes" ;;
-um|--update-md5sum)
PKGMK_UPDATE_MD5SUM="yes" ;;
-im|--ignore-md5sum)
check_directory "`dirname $PKGMK_WORK_DIR`"
check_pkgfile
-
- TARGET="$PKGMK_PACKAGE_DIR/$name#$version-$release.pkg.tar.gz"
-
+
+ case $PKGMK_COMPRESSION_MODE in
+ gz|bz2|xz)
+ TARGET="$PKGMK_PACKAGE_DIR/$name#$version-$release.pkg.tar.$PKGMK_COMPRESSION_MODE"
+ ;;
+ *)
+ error "Compression mode '$PKGMK_COMPRESSION_MODE' not supported"
+ exit 1
+ ;;
+ esac
+
if [ "$PKGMK_CLEAN" = "yes" ]; then
clean
exit 0
readonly PKGMK_COMMAND="$0"
readonly PKGMK_ROOT="$PWD"
-STRIP_CMD="strip"
-
PKGMK_CONFFILE="/etc/pkgmk.conf"
PKGMK_PKGFILE="Pkgfile"
PKGMK_FOOTPRINT=".footprint"
PKGMK_PACKAGE_DIR="$PWD"
PKGMK_WORK_DIR="$PWD/work"
+PKGMK_COMPRESSION_MODE="gz"
+
PKGMK_INSTALL="no"
PKGMK_RECURSIVE="no"
PKGMK_DOWNLOAD="no"
PKGMK_UP_TO_DATE="no"
PKGMK_UPDATE_FOOTPRINT="no"
PKGMK_IGNORE_FOOTPRINT="no"
+PKGMK_IGNORE_NEW="no"
PKGMK_FORCE="no"
PKGMK_KEEP_WORK="no"
PKGMK_UPDATE_MD5SUM="no"
.SH SEE ALSO
pkgadd(8), pkginfo(8), pkgmk(8), rejmerge(8)
.SH COPYRIGHT
-pkgrm (pkgutils) is Copyright (c) 2000-2005 Per Liden and Copyright (c) 2006-2007 CRUX team (http://crux.nu).
+pkgrm (pkgutils) is Copyright (c) 2000-2005 Per Liden and Copyright (c) 2006-2010 CRUX team (http://crux.nu).
pkgrm (pkgutils) is licensed through the GNU General Public License.
Read the COPYING file for the complete license.
// pkgutils
//
// Copyright (c) 2000-2005 Per Liden
-// Copyright (c) 2006-2007 by CRUX team (http://crux.nu)
+// Copyright (c) 2006-2010 by CRUX team (http://crux.nu)
//
// 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
// pkgutils
//
// Copyright (c) 2000-2005 Per Liden
-// Copyright (c) 2006-2007 by CRUX team (http://crux.nu)
+// Copyright (c) 2006-2010 by CRUX team (http://crux.nu)
//
// 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
// pkgutils
//
// Copyright (c) 2000-2005 Per Liden
-// Copyright (c) 2006-2007 by CRUX team (http://crux.nu)
+// Copyright (c) 2006-2010 by CRUX team (http://crux.nu)
//
// 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
#define INIT_ARCHIVE(ar) \
archive_read_support_compression_gzip((ar)); \
+ archive_read_support_compression_bzip2((ar)); \
+ archive_read_support_compression_xz((ar)); \
archive_read_support_format_tar((ar))
using __gnu_cxx::stdio_filebuf;
// pkgutils
//
// Copyright (c) 2000-2005 Per Liden
-// Copyright (c) 2006-2007 by CRUX team (http://crux.nu)
+// Copyright (c) 2006-2010 by CRUX team (http://crux.nu)
//
// 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
#include <sys/types.h>
#include <dirent.h>
-#define PKG_EXT ".pkg.tar.gz"
+#define PKG_EXT ".pkg.tar."
#define PKG_DIR "var/lib/pkg"
#define PKG_DB "var/lib/pkg/db"
#define PKG_REJECTED "var/lib/pkg/rejected"
.SH SEE ALSO
pkgadd(8), pkgrm(8), pkginfo(8), pkgmk(8)
.SH COPYRIGHT
-rejmerge (pkgutils) is Copyright (c) 2000-2005 Per Liden and Copyright (c) 2006-2007 CRUX team (http://crux.nu).
+rejmerge (pkgutils) is Copyright (c) 2000-2005 Per Liden and Copyright (c) 2006-2010 CRUX team (http://crux.nu).
rejmerge (pkgutils) is licensed through the GNU General Public License.
Read the COPYING file for the complete license.
# rejmerge (pkgutils)
#
# Copyright (c) 2000-2005 Per Liden
-# Copyright (c) 2006-2007 by CRUX team (http://crux.nu)
+# Copyright (c) 2006-2010 by CRUX team (http://crux.nu)
#
# 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