OpenPKG CVS Repository http://cvs.openpkg.org/ ____________________________________________________________________________
Server: cvs.openpkg.org Name: Thomas Lotterer Root: /v/openpkg/cvs Email: [EMAIL PROTECTED] Module: openpkg-src Date: 13-Aug-2005 00:51:44 Branch: HEAD Handle: 2005081223513704 Modified files: openpkg-src/openpkg HISTORY aux.wrapsrc.sh openpkg.boot openpkg.spec rpmmacros Log: add --fallback and related options to openpkg bootstrap, enabling use of "foreign" dev tools and getting rid of global OS symlinks on systems with no vendor development tools Summary: Revision Changes Path 1.287 +1 -0 openpkg-src/openpkg/HISTORY 1.19 +7 -4 openpkg-src/openpkg/aux.wrapsrc.sh 1.55 +67 -50 openpkg-src/openpkg/openpkg.boot 1.441 +22 -63 openpkg-src/openpkg/openpkg.spec 1.72 +1 -1 openpkg-src/openpkg/rpmmacros ____________________________________________________________________________ patch -p0 <<'@@ .' Index: openpkg-src/openpkg/HISTORY ============================================================================ $ cvs diff -u -r1.286 -r1.287 HISTORY --- openpkg-src/openpkg/HISTORY 12 Aug 2005 20:47:22 -0000 1.286 +++ openpkg-src/openpkg/HISTORY 12 Aug 2005 22:51:37 -0000 1.287 @@ -2,6 +2,7 @@ 2005 ==== +20050813 add --fallback and related options, enabling use of "foreign" dev tools 20050812 use ls(1) as a better strip(1) replacement as both fail when a file is missing 20050812 store l_ar, l_ld and l_strip in .buildenv, reorder rpmmacros and introduce l_strip 20050808 make sure strip(1) logic does not break shell script execution @@ . patch -p0 <<'@@ .' Index: openpkg-src/openpkg/aux.wrapsrc.sh ============================================================================ $ cvs diff -u -r1.18 -r1.19 aux.wrapsrc.sh --- openpkg-src/openpkg/aux.wrapsrc.sh 24 Mar 2005 11:19:44 -0000 1.18 +++ openpkg-src/openpkg/aux.wrapsrc.sh 12 Aug 2005 22:51:38 -0000 1.19 @@ -53,12 +53,15 @@ --prefix=* ) l_prefix=$arg ;; esac done -if [ ".$o_help" = .yes ]; then - echo "Usage: sh $l_me" 2>&1 - echo " [--prefix=<prefix>]" 2>&1 - echo " [--user=<usr>] [--group=<grp>] [--tag=<str>]" 2>&1 +if [ ".$help" = .1 ]; then + echo "Usage: sh $me" 2>&1 + echo " [--prefix=<instancedir>] [--tag=<str>]" 2>&1 + echo " [--user=<usr>] [--group=<grp>]" 2>&1 echo " [--{s,m,r,n}usr=<usr>] [--{s,m,r,n}grp=<grp>]" 2>&1 echo " [--{s,m,r,n}uid=<uid>] [--{s,m,r,n}gid=<gid>]" 2>&1 + echo " [--fallback=<devtoolsdir>]" 2>&1 + echo " [--use_tar=<tar>] [--use_make=<make>] [--use_cc=<cc>]" 2>&1 + echo " [--use_ar=<ar>] [--use_ld=<ld>] [--use_strip=<strip>]" 2>&1 echo " [-t|--tar] [-h|--help] [-v|--version]" 2>&1 exit 1 fi @@ . patch -p0 <<'@@ .' Index: openpkg-src/openpkg/openpkg.boot ============================================================================ $ cvs diff -u -r1.54 -r1.55 openpkg.boot --- openpkg-src/openpkg/openpkg.boot 24 Mar 2005 11:19:44 -0000 1.54 +++ openpkg-src/openpkg/openpkg.boot 12 Aug 2005 22:51:39 -0000 1.55 @@ -56,6 +56,7 @@ muid=''; mgid='' ruid=''; rgid='' nuid=''; ngid='' +fallback=''; use_tar=''; use_make=''; use_cc=''; use_ar=''; use_ld=''; use_strip='' bs=0 # parse command line options @@ -88,6 +89,13 @@ --rgid=* ) rgid=$arg ;; --nuid=* ) nuid=$arg ;; --ngid=* ) ngid=$arg ;; + --fallback=* ) fallback=$arg ;; + --use_tar=* ) use_tar=$arg ;; + --use_make=* ) use_make=$arg ;; + --use_cc=* ) use_cc=$arg ;; + --use_ar=* ) use_ar=$arg ;; + --use_ld=* ) use_ld=$arg ;; + --use_strip=* ) use_strip=$arg ;; -bs | -s ) bs=1 ;; * ) help=1 ;; esac @@ -97,10 +105,13 @@ fi if [ ".$help" = .1 ]; then echo "Usage: sh $me" 2>&1 - echo " [--prefix=<prefix>]" 2>&1 - echo " [--user=<usr>] [--group=<grp>] [--tag=<str>]" 2>&1 + echo " [--prefix=<instancedir>] [--tag=<str>]" 2>&1 + echo " [--user=<usr>] [--group=<grp>]" 2>&1 echo " [--{s,m,r,n}usr=<usr>] [--{s,m,r,n}grp=<grp>]" 2>&1 echo " [--{s,m,r,n}uid=<uid>] [--{s,m,r,n}gid=<gid>]" 2>&1 + echo " [--fallback=<devtoolsdir>]" 2>&1 + echo " [--use_tar=<tar>] [--use_make=<make>] [--use_cc=<cc>]" 2>&1 + echo " [--use_ar=<ar>] [--use_ld=<ld>] [--use_strip=<strip>]" 2>&1 echo " [-t|--tar] [-h|--help] [-v|--version]" 2>&1 exit 1 fi @@ -120,6 +131,9 @@ # canonicalize prefix prefix=`echo "$prefix" | sed -e 's;//*;/;g' -e 's;/$;;'` +# canonicalize fallback +fallback=`echo "$fallback" | sed -e 's;//*;/;g' -e 's;/$;;'` + # provide default package tag if [ ".$tag" = . ]; then tag="<loc>" @@ -241,7 +255,7 @@ # find reasonable safe program path test ".$PATH" = . && PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin" -for dir in /usr/ccs/bin /usr/xpg4/bin; do +for dir in /usr/ccs/bin /usr/xpg4/bin $fallback; do test -d $dir && PATH="$PATH:$dir" done export PATH @@ -250,55 +264,55 @@ umask 022 unset ls rm mv cp sed grep awk >/dev/null 2>&1 || true -# find reasonable TAR -l_tar='' -for t in gtar tar; do - for p in `IFS=":"; echo . $PATH`; do - if [ -f "$p/$t" ]; then - l_tar="$p/$t" - break - fi - done - [ ".$l_tar" != . ] && break -done -if [ ".$l_tar" = . ]; then - echo "$0:FAILED: required TAR not found" - exit 1 -fi - -# find required Make tool -l_make='' -for t in gmake make; do - for p in `IFS=":"; echo . $PATH`; do - if [ -f "$p/$t" ]; then - l_make="$p/$t" - break - fi - done - [ ".$l_make" != . ] && break -done -if [ ".$l_make" = . ]; then - echo "$0:FAILED: required Make tool not found" - exit 1 -fi - -# find required [GNU] C Compiler -l_cc='' -for t in egcc ggcc gcc cc; do - for p in `IFS=":"; echo . $PATH`; do - if [ -f "$p/$t" ]; then - # if [ ".`$p/$t --version 2>/dev/null | grep '[23]\.[789]'`" != . ]; then - l_cc="$p/$t" - break - # fi +# find reasonable tool +findtool () { + n="$1" + shift + if [ ".$1" = . ]; then + shift + set -- "$@" + else + set -- "$1" + fi + tool='' + for t in "$@"; do + if [ ".$t" != . ]; then + echo "$t" | grep "\.\./" >/dev/null + if [ $? -eq 0 ]; then + echo "$0:FAILED: required tool $n at \"$t\" must not use relative path" + exit 1 + fi + echo "$t" | grep "^/" >/dev/null + if [ $? -eq 0 ]; then + if [ -f "$t" ]; then + tool="$t" + return + else + echo "$0:FAILED: required tool $n at \"$t\" not found" + exit 1 + fi + fi + for p in `IFS=":"; echo $PATH`; do + if [ -f "$p/$t" ]; then + tool="$p/$t" + return + fi + done fi done - [ ".$l_cc" != . ] && break -done -if [ ".$l_cc" = . ]; then - echo "$0:FAILED: required [GNU] C/C++ compiler not found" - exit 1 -fi + if [ ".$tool" = . ]; then + echo "$0:FAILED: required tool $n not found" + exit 1 + fi +} +findtool "tar(1)" "$use_tar" gtar tar ; l_tar="$tool" +findtool "make(1L)" "$use_make" gmake make ; l_make="$tool" +findtool "cc(1)" "$use_cc" egcc ggcc gcc cc ; l_cc="$tool" +findtool "ar(1)" "$use_ar" ar ; l_ar="$tool" +findtool "ld(1)" "$use_ld" ld ; l_ld="$tool" +findtool "strip(1)" "$use_strip" strip ls ; l_strip="$tool" +set -- +echo "++ tar=$l_tar make=$l_make cc=$l_cc ar=$l_ar ld=$l_ld strip=$l_strip" ## ## execute the spec file manually by emulating @@ -335,6 +349,9 @@ echo "l_tar=$l_tar" echo "l_make=$l_make" echo "l_cc=$l_cc" + echo "l_ar=$l_ar" + echo "l_ld=$l_ld" + echo "l_strip=$l_strip" grep '%define' $spec | \ sed \ -e 's:^%define *\([^ ]*\) *\(.*\):\1="\2":' @@ . patch -p0 <<'@@ .' Index: openpkg-src/openpkg/openpkg.spec ============================================================================ $ cvs diff -u -r1.440 -r1.441 openpkg.spec --- openpkg-src/openpkg/openpkg.spec 12 Aug 2005 20:47:22 -0000 1.440 +++ openpkg-src/openpkg/openpkg.spec 12 Aug 2005 22:51:40 -0000 1.441 @@ -38,7 +38,7 @@ # o any cc(1) # the package version/release -%define V_openpkg 20050812 +%define V_openpkg 20050813 # the used software versions %define V_rpm 4.2.1 @@ -260,70 +260,18 @@ shtool=`SOURCE shtool` echo "shtool=$shtool" >>./.buildenv - # manually make sure tar(1) is available - l_tar=""; [ ".%{?l_tar:set}" = .set ] && l_tar="%{l_tar}"; export l_tar - if [ ".$l_tar" = . ]; then - l_tar=`sh $shtool path gtar tar` - if [ ".$l_tar" = . ]; then - echo "openpkg: prerequisite tool \`gtar' or \`tar' not found" - exit 1 - fi - fi + # development tools + l_tar="%{l_tar}"; export l_tar echo "l_tar=\"$l_tar\"; export l_tar" >>.buildenv - - # manually make sure make(1L) is available - l_make=""; [ ".%{?l_make:set}" = .set ] && l_make="%{l_make}"; export l_make - if [ ".$l_make" = . ]; then - l_make=`sh $shtool path gmake make` - if [ ".$l_make" = . ]; then - echo "openpkg: prerequisite tool \`gmake' or \`make' not found" - exit 1 - fi - fi + l_make="%{l_make}"; export l_make echo "l_make=\"$l_make\"; export l_make" >>.buildenv - - # manually make sure cc(1) is available - l_cc=""; [ ".%{?l_cc:set}" = .set ] && l_cc="%{l_cc}"; export l_cc - if [ ".$l_cc" = . ]; then - l_cc=`sh $shtool path gcc cc` - if [ ".$l_cc" = . ]; then - echo "openpkg: prerequisite tool \`gcc' or \`cc' not found" - exit 1 - fi - fi + l_cc="%{l_cc}"; export l_cc echo "l_cc=\"$l_cc\"; export l_cc" >>.buildenv - - # manually make sure ar(1) is available - l_ar=""; [ ".%{?l_ar:set}" = .set ] && l_ar="%{l_ar}"; export l_ar - if [ ".$l_ar" = . ]; then - l_ar=`sh $shtool path ar` - if [ ".$l_ar" = . ]; then - echo "openpkg: prerequisite tool \`ar' not found" - exit 1 - fi - fi + l_ar="%{l_ar}"; export l_ar echo "l_ar=\"$l_ar\"; export l_ar" >>.buildenv - - # manually make sure ld(1) is available - l_ld=""; [ ".%{?l_ld:set}" = .set ] && l_ld="%{l_ld}"; export l_ld - if [ ".$l_ld" = . ]; then - l_ld=`sh $shtool path ld` - if [ ".$l_ld" = . ]; then - echo "openpkg: prerequisite tool \`ld' not found" - exit 1 - fi - fi + l_ld="%{l_ld}"; export l_ld echo "l_ld=\"$l_ld\"; export l_ld" >>.buildenv - - # manually make sure strip(1) is available or use a null replacement - l_strip=""; [ ".%{?l_strip:set}" = .set ] && l_strip="%{l_strip}"; export l_strip - if [ ".$l_strip" = . ]; then - l_strip=`sh $shtool path strip ls` - if [ ".$l_strip" = . ]; then - echo "openpkg: prerequisite tool \`strip' not found" - exit 1 - fi - fi + l_strip="%{l_strip}"; export l_strip echo "l_strip=\"$l_strip\"; export l_strip" >>.buildenv # determine path to aux.usrgrp.sh script @@ -2076,11 +2024,11 @@ # incompatible to the de-facto standardized install-info(8) # command from GNU Texinfo. ATTENTION: THIS SHOULD BE REPLACED # ASAP WITH A MORE GENERIC BUILD COMMAND OVERRIDE SOLUTION! + if [ ! -d %{l_prefix}/lib/openpkg/override ]; then + mkdir %{l_prefix}/lib/openpkg/override >/dev/null 2>&1 || true + fi case "`cat %{l_prefix}/etc/openpkg/platform`" in *-*-debian* | *-*-ubuntu* ) - if [ ! -d %{l_prefix}/lib/openpkg/override ]; then - mkdir %{l_prefix}/lib/openpkg/override >/dev/null 2>&1 || true - fi if [ ! -f %{l_prefix}/lib/openpkg/override/install-info ]; then ( echo "#!/bin/sh" echo "echo 'OpenPKG: NOTICE: install-info(8) command execution overridden'" @@ -2091,6 +2039,12 @@ ;; esac + # FIXME: hack to workaround problems in environments with too few + # development tools. ATTENTION: see one paragraph above. + if [ ! -d %{l_prefix}/lib/openpkg/fallback ]; then + mkdir %{l_prefix}/lib/openpkg/fallback >/dev/null 2>&1 || true + fi + %preun [ ".$1" != .0 ] && exit 0 @@ -2099,6 +2053,11 @@ rm -rf %{l_prefix}/lib/openpkg/override >/dev/null 2>&1 || true fi + # remove fallback files + if [ -d %{l_prefix}/lib/openpkg/fallback ]; then + rm -rf %{l_prefix}/lib/openpkg/fallback >/dev/null 2>&1 || true + fi + # remove files which are not RPM controlled rm -rf %{l_prefix}/RPM/TMP/* %{l_prefix}/RPM/TMP/.[a-z]* >/dev/null 2>&1 || true rm -rf %{l_prefix}/RPM/SRC/* %{l_prefix}/RPM/SRC/.[a-z]* >/dev/null 2>&1 || true @@ . patch -p0 <<'@@ .' Index: openpkg-src/openpkg/rpmmacros ============================================================================ $ cvs diff -u -r1.71 -r1.72 rpmmacros --- openpkg-src/openpkg/rpmmacros 12 Aug 2005 20:47:22 -0000 1.71 +++ openpkg-src/openpkg/rpmmacros 12 Aug 2005 22:51:41 -0000 1.72 @@ -363,7 +363,7 @@ %l_fetch_backup_9 ftp://ftp.openpkg.org/sources/DST/%{name}/ # sane build environment setup -%l_build_path %(if [ -d %{l_prefix}/lib/openpkg/override ]; then echo "%{l_prefix}/lib/openpkg/override:"; fi)%{l_prefix}/bin:%{l_prefix}/sbin:@l_build_path@ +%l_build_path %(if [ -d %{l_prefix}/lib/openpkg/override ]; then echo "%{l_prefix}/lib/openpkg/override:"; fi)%{l_prefix}/bin:%{l_prefix}/sbin:@[EMAIL PROTECTED](if [ -d %{l_prefix}/lib/openpkg/fallback ]; then echo ":%{l_prefix}/lib/openpkg/fallback"; fi) %l_build_ldlp %{l_prefix}/lib:@l_build_ldlp@ %l_build_ulim @l_build_ulim@ %l_build_shell_cmd %{l_prefix}/lib/openpkg/bash @@ . ______________________________________________________________________ The OpenPKG Project www.openpkg.org CVS Repository Commit List openpkg-cvs@openpkg.org