1
0
mirror of https://github.com/moparisthebest/pacman synced 2025-02-28 17:31:52 -05:00

* Updated makepkg to use a new form of options. These two arrays now replace

most of the former options in makepkg.conf, and are described in detail
  there:
   BUILDENV=(fakeroot !distcc color !ccache)
   OPTIONS=(strip !docs !libtool emptydirs)
  Note that PKGBUILD specified options will always have final say. They will
  now be specified as they are above, except using lowercase 'options' array.
* makepkg was fixed so options actually work as expected.
This commit is contained in:
Dan McGee 2007-02-04 18:28:21 +00:00
parent 1bb3cd34bf
commit b1cc72ebb3
4 changed files with 118 additions and 74 deletions

View File

@ -1,6 +1,7 @@
Judd Vinet <jvinet@zeroflux.org> Judd Vinet <jvinet@zeroflux.org>
Aurelien Foret <aurelien@archlinux.org> Aurelien Foret <aurelien@archlinux.org>
Aaron Griffin <aaron@archlinux.org> Aaron Griffin <aaron@archlinux.org>
Dan McGee <dan@archlinux.org>
Miklós Vajna <vmiklos@frugalware.org> Miklós Vajna <vmiklos@frugalware.org>
Christian Hamar <krics@linuxforum.hu> Christian Hamar <krics@linuxforum.hu>
@ -8,6 +9,5 @@ Christian Hamar <krics@linuxforum.hu>
Josh Wheeler <deltalima@gmail.com> Josh Wheeler <deltalima@gmail.com>
David Kimpe <DNAku@frugalware.org> David Kimpe <DNAku@frugalware.org>
Dan McGee <dpmcgee@gmail.com>
James Rosten <seinfeld90@gmail.com> James Rosten <seinfeld90@gmail.com>
Roman Kyrylych <Roman.Kyrylych@gmail.com> Roman Kyrylych <Roman.Kyrylych@gmail.com>

View File

@ -2,12 +2,6 @@ TODO.dan
This is my personal TODO list. No guarantees if it is out of date and things This is my personal TODO list. No guarantees if it is out of date and things
no longer apply. If you want to help out with any of it, send me an email. no longer apply. If you want to help out with any of it, send me an email.
* Variable names in makepkg.conf--confusing
- some use 'USE_', others do not
- some are 'NO', some are 'KEEP', etc.
- some options use 0/1, others are y/n
* Should undocumented makepkg (and thus PKGBUILD) options be put in the
manpage, as well as including sections for them in the makepkg.conf file?
* Go through all makepkg bugs in flyspray and see if they are rectified: * Go through all makepkg bugs in flyspray and see if they are rectified:
http://bugs.archlinux.org/index.php?tasks=&project=1&string=makepkg http://bugs.archlinux.org/index.php?tasks=&project=1&string=makepkg
@ -19,27 +13,19 @@ This is my personal TODO list. No guarantees if it is out of date and things
* Port the libdownload (libfetch) manpage from BSD style to Linux style, or at * Port the libdownload (libfetch) manpage from BSD style to Linux style, or at
very least change references to BSD. very least change references to BSD.
* Revise build system to a more static one (Aaron mentioned wmii system). * Pacman 3.1 - New cache cleaning functionality in pacman - keep installed
version, choose number to keep, etc. Good python script in the forums that
* NEWS file updating and cleanup. Get rid of items that are bugfixes of never- we should try to emulate, perhaps.
released code, etc. * Pacman 3.1 - downgrade feature - allow users to see cached packages and
* New cache cleaning functionality in pacman - keep installed version, choose
number to keep, etc. Good python script in the forums that we should try to
emulate, perhaps.
* pacman - downgrade feature - allow users to see cached packages and
downgrade to (previous or any?) available options. downgrade to (previous or any?) available options.
* alpm_log_action & install script logging interaction - producing duplicate * Pacman 3.1 - Extreme similarity between some of the sync and add code...we
entries in pacman logs (possibly fixed? needs more testing but looks good) have to be able to abstract more away from sync actions and add actions to
just 'actions' (example: sync,c, add.c, and deptest.c all contain a switch
on PM_DEP_MOD_*). Merge update, add, and sync code when possible, so we
reduce duplication.
* Extreme similarity between some of the sync and add code...we have to be able * Pacman 3.1 - List every function, define, etc. in libalpm. Give one
to abstract more away from sync actions and add actions to just 'actions'
(example: sync,c, add.c, and deptest.c all contain a switch on PM_DEP_MOD_*)
* Merge update, add, and sync code when possible, so we reduce duplication.
* For Pacman 3.1 - List every function, define, etc. in libalpm. Give one
sentence description of each. If it sounds like two are similar, find a way sentence description of each. If it sounds like two are similar, find a way
to combine or refactor them. If it is unnecessary- delete it. Stop keeping to combine or refactor them. If it is unnecessary- delete it. Stop keeping
everything clustered in little add/sync/remove parts, allow transactions to everything clustered in little add/sync/remove parts, allow transactions to
@ -49,14 +35,28 @@ This is my personal TODO list. No guarantees if it is out of date and things
are still relevant, etc. Ideas for -Re (#6273), changing meaning of -c (has are still relevant, etc. Ideas for -Re (#6273), changing meaning of -c (has
two meanings, another FS bug), etc. two meanings, another FS bug), etc.
* Monotone suggestion- allow changing of a branch name after commit (example: * Pacman 3.1 - Possible rewrite of make system. Options:
I meant to commit to a new branch, but I forgot --branch option on the -- revise to be more static (Aaron mentioned wmii's system)
commit. Can I remove the original branch cert and replace it with a new -- Cmake? It looks intriguing
one?)
* Pacman 3.1 - Rewrite _alpm_sortbydeps to use Topological Sort. Should work
using a standard topo sort algorithm, once the crazy types can be fixed up
a bit. Include a cycle check - print a big error message if this happens.
-- http://en.wikipedia.org/wiki/Topological_sort
-- http://everything2.com/?node_id=556079
Quick hits: Quick hits:
* log_progress and cb_trans_progress - same function? not quite but commonality * log_progress and cb_trans_progress - same function? not quite but close
* unsigned int vs. unsigned * unsigned int vs. unsigned
* 'ldd' & 'ldd -u' - many linkages * 'ldd' & 'ldd -u' - many linkages
* possibly split utilities/extras from pacman package * possibly split utilities/extras from pacman package
* makepkg3 produces files with arch appended- gensync can't deal with it * makepkg3 produces files with arch appended- gensync can't deal with it
* FS #4185 - move where message is logged, perhaps?
* Remove -A flag (and possibly -D, -T, and -Y?)
* ideas mentioned here - http://bbs.archlinux.org/viewtopic.php?id=29450
add a .install message about mirrors, maybe comment whole file, encourage
rankmirrors usage
* update copyrights
* update pacman website
* finish pacman coding style page
* make indent.pro file for GNU indent

View File

@ -1,4 +1,4 @@
# vim: set ft=sh ts=2 sw=2 et: #
# /etc/makepkg.conf # /etc/makepkg.conf
# #
@ -31,35 +31,37 @@ CXXFLAGS="-@MARCHFLAG@=@CARCHFLAGS@ -O2 -pipe"
# BUILD ENVIRONMENT # BUILD ENVIRONMENT
######################################################################### #########################################################################
# #
#-- Fakeroot: for building packages as a non-root user # Defaults: ENVIRONMENT=(!fakeroot !distcc color !ccache)
USE_FAKEROOT="y" #
#-- DistCC: a distributed C/C++/ObjC compiler (modify MAKEFLAGS too) #-- fakeroot: Allow building packages as a non-root user
USE_DISTCC="n" #-- distcc: Use the Distributed C/C++/ObjC compiler
#-- A space-delimited list of hosts running in the DistCC cluster #-- color: Colorize output messages
DISTCC_HOSTS="" #-- ccache: Use ccache to cache compilation
#-- Colorized output messages #
USE_COLOR="y" BUILDENV=(fakeroot !distcc color !ccache)
#-- Use ccache when building #
USE_CCACHE=0 #-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster.
#DISTCC_HOSTS=""
######################################################################### #########################################################################
# GLOBAL PACKAGE OPTIONS # GLOBAL PACKAGE OPTIONS
# These are default values for the options=() settings # These are default values for the options=() settings
######################################################################### #########################################################################
# #
#-- Don't strip symbols from binaries/libraries # Default: OPTIONS=(strip !docs !libtool emptydirs)
NOSTRIP=0 #
#-- Keep doc and info directories #-- strip: Strip symbols from binaries/libraries
KEEPDOCS=0 #-- docs: Save doc and info directories
#-- Don't remove libtool files? #-- libtool: Leave libtool (.la) files in binaries
NOLIBTOOL=0 #-- emptydirs: Leave empty directories in binaries
#-- Don't remove empty directories from package? #
NOEMPTYDIRS=0 OPTIONS=(strip !docs !libtool emptydirs)
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
INTEGRITY_CHECK=(md5)
#-- Info and doc directories to be removed
DOC_DIRS=(usr/{,share/}{info,doc} opt/gnome/{,share/}{info,doc,gtk-doc})
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
INTEGRITY_CHECK=(md5 sha1)
#-- Info and doc directories to remove (if option set correctly above)
DOC_DIRS=(usr/{,share/}{info,doc} opt/gnome/{,share/}{info,doc,gtk-doc})
######################################################################### #########################################################################
# PACKAGE OUTPUT # PACKAGE OUTPUT
@ -71,3 +73,5 @@ DOC_DIRS=(usr/{,share/}{info,doc} opt/gnome/{,share/}{info,doc,gtk-doc})
#SRCDEST=/var/cache/pacman/src #SRCDEST=/var/cache/pacman/src
#-- Packager: name/email of the person or organization building packages #-- Packager: name/email of the person or organization building packages
#PACKAGER="John Doe <john@doe.com>" #PACKAGER="John Doe <john@doe.com>"
# vim: set ft=sh ts=2 sw=2 et:

View File

@ -32,7 +32,7 @@ BUILDSCRIPT="PKGBUILD"
PKGEXT="pkg.tar.gz" PKGEXT="pkg.tar.gz"
source "/etc/abs/abs.conf" source "/etc/abs/abs.conf"
SRCROOT=$ABSROOT SRCROOT="$ABSROOT"
# Options # Options
CLEANUP=0 CLEANUP=0
@ -63,7 +63,7 @@ fi
### SUBROUTINES ### ### SUBROUTINES ###
plain() { plain() {
if [ "$USE_COLOR" = "Y" -o "$USE_COLOR" = "y" ]; then if [ ! "$USE_COLOR" = "n" -a "$(check_buildenv color)" = "y" ]; then
echo -e " \033[1;1m$1\033[1;0m" >&2 echo -e " \033[1;1m$1\033[1;0m" >&2
else else
echo " $1" >&2 echo " $1" >&2
@ -71,7 +71,7 @@ plain() {
} }
msg() { msg() {
if [ "$USE_COLOR" = "Y" -o "$USE_COLOR" = "y" ]; then if [ ! "$USE_COLOR" = "n" -a "$(check_buildenv color)" = "y" ]; then
echo -e "\033[1;32m==>\033[1;0m \033[1;1m$1\033[1;0m" >&2 echo -e "\033[1;32m==>\033[1;0m \033[1;1m$1\033[1;0m" >&2
else else
echo "==> $1" >&2 echo "==> $1" >&2
@ -79,7 +79,7 @@ msg() {
} }
msg2() { msg2() {
if [ "$USE_COLOR" = "Y" -o "$USE_COLOR" = "y" ]; then if [ ! "$USE_COLOR" = "n" -a "$(check_buildenv color)" = "y" ]; then
echo -e " \033[1;34m->\033[1;0m \033[1;1m$1\033[1;0m" >&2 echo -e " \033[1;34m->\033[1;0m \033[1;1m$1\033[1;0m" >&2
else else
echo " -> $1" >&2 echo " -> $1" >&2
@ -87,7 +87,7 @@ msg2() {
} }
warning() { warning() {
if [ "$USE_COLOR" = "Y" -o "$USE_COLOR" = "y" ]; then if [ ! "$USE_COLOR" = "n" -a "$(check_buildenv color)" = "y" ]; then
echo -e "\033[1;33m==> WARNING:\033[1;0m \033[1;1m$1\033[1;0m" >&2 echo -e "\033[1;33m==> WARNING:\033[1;0m \033[1;1m$1\033[1;0m" >&2
else else
echo "==> WARNING: $1" >&2 echo "==> WARNING: $1" >&2
@ -95,7 +95,7 @@ warning() {
} }
error() { error() {
if [ "$USE_COLOR" = "Y" -o "$USE_COLOR" = "y" ]; then if [ ! "$USE_COLOR" = "n" -a "$(check_buildenv color)" = "y" ]; then
echo -e "\033[1;31m==> ERROR:\033[1;0m \033[1;1m$1\033[1;0m" >&2 echo -e "\033[1;31m==> ERROR:\033[1;0m \033[1;1m$1\033[1;0m" >&2
else else
echo "==> ERROR: $1" >&2 echo "==> ERROR: $1" >&2
@ -106,16 +106,54 @@ strip_url() {
echo "$1" | sed 's|^.*://.*/||g' echo "$1" | sed 's|^.*://.*/||g'
} }
# checks to see if options are present in makepkg.conf or PKGBUILD;
# PKGBUILD options always take precedence
check_option() { check_option() {
local needle=$(echo $1 | tr [:upper:] [:lower:])
local i local i
# loop PKGBUILD opts first so it overrides makepkg.conf
for i in ${options[@]}; do for i in ${options[@]}; do
local uc=$(echo $i | tr [:lower:] [:upper:])
local lc=$(echo $i | tr [:upper:] [:lower:]) local lc=$(echo $i | tr [:upper:] [:lower:])
if [ "$uc" = "$1" -o "$lc" = "$1" ]; then if [ "$lc" = "$needle" ]; then
echo $1 echo "y"
return
elif [ "$lc" = "!$needle" ]; then
echo "n"
return return
fi fi
done done
# fall back to makepkg.conf options
for i in ${OPTIONS[@]}; do
local lc=$(echo $i | tr [:upper:] [:lower:])
if [ "$lc" = "$needle" ]; then
echo "y"
return
elif [ "$lc" = "!$needle" ]; then
echo "n"
return
fi
done
echo "unknown"
return
}
# check if option is present in BUILDENV
check_buildenv() {
local needle=$(echo $1 | tr [:upper:] [:lower:])
local i
# use options from makepkg.conf
for i in ${BUILDENV[@]}; do
local lc=$(echo $i | tr [:upper:] [:lower:])
if [ "$lc" = "$needle" ]; then
echo "y"
return
elif [ "$lc" = "!$needle" ]; then
echo "n"
return
fi
done
echo "unknown"
return
} }
in_array() { in_array() {
@ -123,7 +161,7 @@ in_array() {
shift 1 shift 1
[ -z "$1" ] && return 1 [ -z "$1" ] && return 1
for i in $*; do for i in $*; do
[ "$i" == "$needle" ] && return 0 [ "$i" = "$needle" ] && return 0
done done
return 1 return 1
} }
@ -347,7 +385,7 @@ while [ "$#" -ne "0" ]; do
--syncdeps) DEP_BIN=1 ;; --syncdeps) DEP_BIN=1 ;;
--sudosync) DEP_SUDO=1 ;; --sudosync) DEP_SUDO=1 ;;
--builddeps) DEP_SRC=1 ;; --builddeps) DEP_SRC=1 ;;
--noccache) USE_CCACHE=0 ;; --noccache) USE_CCACHE="n" ;;
--nodeps) NODEPS=1 ;; --nodeps) NODEPS=1 ;;
--noextract) NOEXTRACT=1 ;; --noextract) NOEXTRACT=1 ;;
--install) INSTALL=1 ;; --install) INSTALL=1 ;;
@ -370,7 +408,7 @@ while [ "$#" -ne "0" ]; do
while getopts "bBcCdefghij:Lmop:rRsS-" opt; do while getopts "bBcCdefghij:Lmop:rRsS-" opt; do
case $opt in case $opt in
b) DEP_SRC=1 ;; b) DEP_SRC=1 ;;
B) USE_CCACHE=0 ;; B) USE_CCACHE="n" ;;
c) CLEANUP=1 ;; c) CLEANUP=1 ;;
C) CLEANCACHE=1 ;; C) CLEANCACHE=1 ;;
d) NODEPS=1 ;; d) NODEPS=1 ;;
@ -498,7 +536,7 @@ fi
# Enter the fakeroot environment if necessary. This will call the makepkg script again # Enter the fakeroot environment if necessary. This will call the makepkg script again
# as the fake root user. We detect this by passing a sentinel option (-F) to makepkg # as the fake root user. We detect this by passing a sentinel option (-F) to makepkg
if [ "$EUID" != "0" ]; then if [ "$EUID" != "0" ]; then
if [ "$USE_FAKEROOT" = "y" -o "$USE_FAKEROOT" = "Y" ]; then if [ "$(check_buildenv fakeroot)" = "y" ]; then
if [ $(type -p fakeroot) ]; then if [ $(type -p fakeroot) ]; then
msg "Entering fakeroot environment" msg "Entering fakeroot environment"
fakeroot -- $0 -F $ARGLIST fakeroot -- $0 -F $ARGLIST
@ -514,7 +552,7 @@ if [ "$EUID" != "0" ]; then
else else
warning "Running makepkg as an unprivileged user will result in non-root" warning "Running makepkg as an unprivileged user will result in non-root"
plain "ownership of the packaged files. Try using the fakeroot" plain "ownership of the packaged files. Try using the fakeroot"
plain "environment. (USE_FAKEROOT=y in makepkg.conf)" plain "environment. ('fakeroot' in BUILDENV in makepkg.conf)"
plain "" plain ""
sleep 1 sleep 1
fi fi
@ -746,12 +784,13 @@ else
mkdir -p $startdir/pkg mkdir -p $startdir/pkg
# use distcc if requested # use distcc if requested
if [ "$USE_DISTCC" = "y" ]; then if [ "$(check_buildenv distcc)" = "y" ]; then
[ -d /usr/lib/distcc/bin ] && export PATH=/usr/lib/distcc/bin:$PATH [ -d /usr/lib/distcc/bin ] && export PATH=/usr/lib/distcc/bin:$PATH
fi fi
# use ccache if it's available # use ccache if it's available
if [ "$USE_CCACHE" = "1" ]; then # USE_CCACHE still here because it is a command line option
if [ ! "$USE_CCACHE" = "n" -a "$(check_buildenv ccache)" = "y" ]; then
[ -d /usr/lib/ccache/bin ] && export PATH=/usr/lib/ccache/bin:$PATH [ -d /usr/lib/ccache/bin ] && export PATH=/usr/lib/ccache/bin:$PATH
fi fi
@ -799,7 +838,7 @@ else
fi fi
fi fi
if [ ! "$(check_option KEEPDOCS)" -a "$KEEPDOCS" = "0" ]; then if [ "$(check_option docs)" = "n" ]; then
# remove info/doc files # remove info/doc files
msg "Removing info/doc files..." msg "Removing info/doc files..."
cd $startdir/pkg cd $startdir/pkg
@ -833,7 +872,7 @@ done
cd $startdir cd $startdir
# strip binaries # strip binaries
if [ ! "$(check_option NOSTRIP)" -a "$NOSTRIP" = "0" ]; then if [ "$(check_option strip)" = "y" ]; then
msg "Stripping debugging symbols from libraries..." msg "Stripping debugging symbols from libraries..."
find pkg/{,usr,usr/local,opt/*}/lib -type f -not -name "*.dll" -not -name "*.exe" \ find pkg/{,usr,usr/local,opt/*}/lib -type f -not -name "*.dll" -not -name "*.exe" \
-exec /usr/bin/strip --strip-debug '{}' \; 2>&1 \ -exec /usr/bin/strip --strip-debug '{}' \; 2>&1 \
@ -845,15 +884,16 @@ if [ ! "$(check_option NOSTRIP)" -a "$NOSTRIP" = "0" ]; then
fi fi
# remove libtool (.la) files # remove libtool (.la) files
if [ "$(check_option NOLIBTOOL)" -a "$NOLIBTOOL" = "1" ]; then if [ "$(check_option libtool)" = "n" ]; then
msg "Removing libtool .la files..." msg "Removing libtool .la files..."
find pkg -type f -name "*.la" -exec rm -f -- '{}' \; find pkg -type f -name "*.la" -exec rm -f -- '{}' \;
fi fi
# remove empty directories # remove empty directories
if [ "$(check_option NOEMPTYDIRS)" -a "$NOEMPTYDIRS" = 1 ]; then if [ "$(check_option emptydirs)" = "n" ]; then
msg "Removing empty directories..." msg "Removing empty directories..."
find pkg -depth -type d -empty -delete; cd "$startdir/pkg"
find -depth -type d -empty -delete;
fi fi
# get some package meta info # get some package meta info