List of reports associated
Test name: /ext/gd/tests/bug48801.phpt
Version: 5.4.0
| Date |
Failed tests |
Email |
|
| 2012-03-05 14:18:31 |
12 |
*** |
 |
| 2012-03-14 12:02:14 |
20 |
*** |
 |
| 2012-03-17 06:18:12 |
87 |
*** at 126 dot com |
 |
| 2012-03-27 14:56:13 |
12 |
*** |
 |
| 2012-04-21 04:42:16 |
23 |
*** at gmail dot com |
 |
| 2012-05-05 07:22:34 |
12 |
*** |
 |
| 2012-08-18 03:57:39 |
75 |
*** at 163 dot com |
 |
| 2012-12-15 13:47:15 |
17 |
*** at test dot com |
 |
| 2013-05-17 11:56:24 |
69 |
*** |
 |
Goto: PHPInfo Build environment
PHPInfo
phpinfo()
PHP Version => 5.4.0
System => Linux mee-v3 2.6.9-103.ELsmp #1 SMP Fri Nov 11 14:34:02 EST 2011 i686
Build Date => Mar 27 2012 07:45:54
Configure Command => './configure' '--prefix=/openpkg' '--sysconfdir=/openpkg/etc/php' '--with-config-file-path=/openpkg/etc/php' '--with-apxs2=/openpkg/sbin/apxs' '--libdir=/openpkg/lib/php' '--disable-all' '--enable-pdo' '--enable-filter' '--with-pcre-regex=/openpkg' '--without-sqlite' '--without-pdo-sqlite' '--without-mysql' '--without-pdo-mysql' '--with-pgsql=/openpkg' '--with-pdo-pgsql=/openpkg' '--with-gd=/openpkg' '--with-jpeg-dir=/openpkg' '--with-png-dir=/openpkg' '--enable-gd-native-ttf' '--with-freetype-dir=/openpkg' '--disable-debug' '--with-zlib=/openpkg' '--with-zlib-dir=/openpkg' '--with-openssl=/openpkg' '--enable-session' '--disable-json' '--disable-tokenizer' '--disable-xml' '--without-xsl' '--disable-dom' '--without-pear' '--disable-simplexml' '--without-tidy' '--enable-cli' '--enable-cgi'
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /openpkg/etc/php
Loaded Configuration File => /openpkg/etc/php/php.ini
Scan this dir for additional .ini files => (none)
Additional .ini files parsed => (none)
PHP API => 20100412
PHP Extension => 20100525
Zend Extension => 220100525
Zend Extension Build => API220100525,NTS
PHP Extension Build => API20100525,NTS
Debug Build => no
Thread Safety => disabled
Zend Signal Handling => disabled
Zend Memory Manager => enabled
Zend Multibyte Support => disabled
IPv6 Support => enabled
DTrace Support => disabled
Registered PHP Streams => https, ftps, compress.zlib, php, file, glob, data, http, ftp
Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, sslv3, sslv2, tls
Registered Stream Filters => zlib.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
_______________________________________________________________________
Configuration
Core
PHP Version => 5.4.0
Directive => Local Value => Master Value
allow_url_fopen => Off => Off
allow_url_include => Off => Off
always_populate_raw_post_data => Off => Off
arg_separator.input => & => &
arg_separator.output => & => &
asp_tags => Off => Off
auto_append_file => no value => no value
auto_globals_jit => On => On
auto_prepend_file => no value => no value
browscap => no value => no value
default_charset => no value => no value
default_mimetype => text/html => text/html
disable_classes => no value => no value
disable_functions => no value => no value
display_errors => STDERR => STDERR
display_startup_errors => Off => Off
doc_root => no value => no value
docref_ext => no value => no value
docref_root => no value => no value
enable_dl => On => On
enable_post_data_reading => On => On
error_append_string => no value => no value
error_log => no value => no value
error_prepend_string => no value => no value
error_reporting => 32767 => 32767
exit_on_timeout => Off => Off
expose_php => On => On
extension_dir => /openpkg/lib/php/extensions/no-debug-non-zts-20100525 => /openpkg/lib/php/extensions/no-debug-non-zts-20100525
file_uploads => On => On
highlight.comment => <font style="color: #FF8000">#FF8000</font> => <font style="color: #FF8000">#FF8000</font>
highlight.default => <font style="color: #0000BB">#0000BB</font> => <font style="color: #0000BB">#0000BB</font>
highlight.html => <font style="color: #000000">#000000</font> => <font style="color: #000000">#000000</font>
highlight.keyword => <font style="color: #007700">#007700</font> => <font style="color: #007700">#007700</font>
highlight.string => <font style="color: #DD0000">#DD0000</font> => <font style="color: #DD0000">#DD0000</font>
html_errors => Off => Off
ignore_repeated_errors => Off => Off
ignore_repeated_source => Off => Off
ignore_user_abort => Off => Off
implicit_flush => On => On
include_path => .:/openpkg/lib/php:/openpkg/lib/php/php-jpgraph => .:/openpkg/lib/php:/openpkg/lib/php/php-jpgraph
log_errors => On => On
log_errors_max_len => 1024 => 1024
mail.add_x_header => Off => Off
mail.force_extra_parameters => no value => no value
mail.log => no value => no value
max_execution_time => 0 => 0
max_file_uploads => 20 => 20
max_input_nesting_level => 64 => 64
max_input_time => -1 => -1
max_input_vars => 1000 => 1000
memory_limit => 32M => 32M
open_basedir => no value => no value
output_buffering => 0 => 0
output_handler => no value => no value
post_max_size => 8M => 8M
precision => 14 => 14
realpath_cache_size => 16K => 16K
realpath_cache_ttl => 120 => 120
register_argc_argv => On => On
report_memleaks => On => On
report_zend_debug => Off => Off
request_order => no value => no value
sendmail_from => no value => no value
sendmail_path => /bin/false -t -i => /bin/false -t -i
serialize_precision => 17 => 17
short_open_tag => On => On
SMTP => localhost => localhost
smtp_port => 25 => 25
sql.safe_mode => Off => Off
track_errors => Off => Off
unserialize_callback_func => no value => no value
upload_max_filesize => 2M => 2M
upload_tmp_dir => no value => no value
user_dir => no value => no value
user_ini.cache_ttl => 300 => 300
user_ini.filename => .user.ini => .user.ini
variables_order => EGPCS => EGPCS
xmlrpc_error_number => 0 => 0
xmlrpc_errors => Off => Off
zend.detect_unicode => On => On
zend.enable_gc => On => On
zend.multibyte => Off => Off
zend.script_encoding => no value => no value
date
date/time support => enabled
"Olson" Timezone Database Version => 2011.14
Timezone Database => internal
Default timezone => UTC
Directive => Local Value => Master Value
date.default_latitude => 31.7667 => 31.7667
date.default_longitude => 35.2333 => 35.2333
date.sunrise_zenith => 90.583333 => 90.583333
date.sunset_zenith => 90.583333 => 90.583333
date.timezone => no value => no value
ereg
Regex Library => Bundled library enabled
filter
Input Validation and Filtering => enabled
Revision => $Revision: 321634 $
Directive => Local Value => Master Value
filter.default => unsafe_raw => unsafe_raw
filter.default_flags => no value => no value
gd
GD Support => enabled
GD Version => 2.0
FreeType Support => enabled
FreeType Linkage => with freetype
FreeType Version => 2.4.9
GIF Read Support => enabled
GIF Create Support => enabled
JPEG Support => enabled
libJPEG Version => unknown
PNG Support => enabled
libPNG Version => 1.4.8
WBMP Support => enabled
Directive => Local Value => Master Value
gd.jpeg_ignore_warning => 0 => 0
openssl
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.0g 18 Jan 2012
OpenSSL Header Version => OpenSSL 1.0.0g 18 Jan 2012
pcre
PCRE (Perl Compatible Regular Expressions) Support => enabled
PCRE Library Version => 8.30 2012-02-04
Directive => Local Value => Master Value
pcre.backtrack_limit => 1000000 => 1000000
pcre.recursion_limit => 100000 => 100000
PDO
PDO support => enabled
PDO drivers => pgsql
pdo_pgsql
PDO Driver for PostgreSQL => enabled
PostgreSQL(libpq) Version => 9.1.2
Module version => 1.0.2
Revision => $Id: pdo_pgsql.c 321634 2012-01-01 13:15:04Z felipe $
pgsql
PostgreSQL Support => enabled
PostgreSQL(libpq) Version => 9.1.2
Multibyte character support => enabled
SSL support => enabled
Active Persistent Links => 0
Active Links => 0
Directive => Local Value => Master Value
pgsql.allow_persistent => On => On
pgsql.auto_reset_persistent => Off => Off
pgsql.ignore_notice => Off => Off
pgsql.log_notice => Off => Off
pgsql.max_links => Unlimited => Unlimited
pgsql.max_persistent => Unlimited => Unlimited
Reflection
Reflection => enabled
Version => $Revision: 321634 $
session
Session Support => enabled
Registered save handlers => files user
Registered serializer handlers => php php_binary
Directive => Local Value => Master Value
session.auto_start => Off => Off
session.cache_expire => 180 => 180
session.cache_limiter => nocache => nocache
session.cookie_domain => no value => no value
session.cookie_httponly => Off => Off
session.cookie_lifetime => 0 => 0
session.cookie_path => / => /
session.cookie_secure => Off => Off
session.entropy_file => /dev/urandom => /dev/urandom
session.entropy_length => 32 => 32
session.gc_divisor => 100 => 100
session.gc_maxlifetime => 1440 => 1440
session.gc_probability => 1 => 1
session.hash_bits_per_character => 4 => 4
session.hash_function => 0 => 0
session.name => PHPSESSID => PHPSESSID
session.referer_check => no value => no value
session.save_handler => files => files
session.save_path => no value => no value
session.serialize_handler => php => php
session.upload_progress.cleanup => On => On
session.upload_progress.enabled => On => On
session.upload_progress.freq => 1% => 1%
session.upload_progress.min_freq => 1 => 1
session.upload_progress.name => PHP_SESSION_UPLOAD_PROGRESS => PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix => upload_progress_ => upload_progress_
session.use_cookies => On => On
session.use_only_cookies => On => On
session.use_trans_sid => 0 => 0
SPL
SPL support => enabled
Interfaces => Countable, OuterIterator, RecursiveIterator, SeekableIterator, SplObserver, SplSubject
Classes => AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, CallbackFilterIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveCallbackFilterIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException
standard
Dynamic Library Support => enabled
Path to sendmail => /bin/false -t -i
Directive => Local Value => Master Value
assert.active => 1 => 1
assert.bail => 0 => 0
assert.callback => no value => no value
assert.quiet_eval => 0 => 0
assert.warning => 1 => 1
auto_detect_line_endings => 0 => 0
default_socket_timeout => 60 => 60
from => no value => no value
url_rewriter.tags => a=href,area=href,frame=src,form=,fieldset= => a=href,area=href,frame=src,form=,fieldset=
user_agent => no value => no value
zlib
ZLib Support => enabled
Stream Wrapper => compress.zlib://
Stream Filter => zlib.inflate, zlib.deflate
Compiled Version => 1.2.6
Linked Version => 1.2.6
Directive => Local Value => Master Value
zlib.output_compression => Off => Off
zlib.output_compression_level => -1 => -1
zlib.output_handler => no value => no value
Additional Modules
Module Name
Environment
Variable => Value
MANPATH => /openpkg/man:/openpkg/local/man::/usr/share/man
OPENPKG_PKGGROUP => opkg
M4 => /openpkg/bin/m4
TEST_PHP_SRCDIR => /openpkg/RPM/TMP/php-5.4.0
OPENPKG_PKGUSER => opkg
SHELL => /openpkg/lib/openpkg/bash
TERM => vt220
MAKEFLAGS =>
OPENPKG_DOWNLOAD_CURL_FILTER => grep 'class="file"' | sed -e 's!.*td valign!!;s!img .*!!;s!.*href!!;s!.*"\(.*\)".*!\1!'
SSH_CLIENT => deleted
TMPDIR => /tmp
OPENPKG_SOURCE_URI_SUFFIX => -${OPENPKG_TAG}.src.rpm
SSH_TTY => deleted
OPENPKG_ROOT => /openpkg
USER => opkg
LD_LIBRARY_PATH => /openpkg/lib:/openpkg/local/lib::/lib:/usr/lib
SSH_AUTH_SOCK => deleted
OPENPKG_TAG => ${OPENPKG_REL}.${OPENPKG_SUBREL}
MAKELEVEL => 1
OPENPKG_REL => 2.5
MFLAGS =>
PATH => /openpkg/bin:/openpkg/sbin:/openpkg/local/bin:/openpkg/local/sbin:/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/ucb
_ => /openpkg/RPM/TMP/php-5.4.0/sapi/cli/php
LC_COLLATE => C
BLOCKSIZE => 1024
OPENPKG_PLATFORM => ix86-rhel4
PWD => /openpkg/RPM/TMP/php-5.4.0
TEST_PHP_EXECUTABLE => /openpkg/RPM/TMP/php-5.4.0/sapi/cli/php
OPENPKG_DOWNLOAD_URL_PREFIX => http://download.openpkg.org
HOME => /openpkg
SHLVL => 3
OPENPKG_SUBREL => 1
LOGNAME => opkg
SSH_CONNECTION => deleted
OPENPKG_DOWNLOAD_CURL_USER_PW => -u 804941a8-0525-11df-8345-000e0c4e71a6:anypw
INFOPATH => /openpkg/info:/openpkg/local/info::/usr/share/info
DISPLAY => localhost:10.0
CC => /openpkg/bin/gcc
OPENPKG_SOURCE_URI_PREFIX => http://download.openpkg.org/packages/current/source/
setpermlike => () { local FACILITY='setpermlike';
local USAGE="${FACILITY} Permissions_Source_Filespec Permissions_Destination_Filespec";
local permsource_file="${1}";
local permdest_file="${2}";
set +f;
if [ "${permsource_file}" = '' -o "${permdest_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
set -f;
ls -ald ${permsource_file} | head -1 | nawk -v filename=${permdest_file} '
{
#mod_dir=substr($1,1,1)
mod_owner=substr($1,2,3)
mod_group=substr($1,5,3)
mod_other=substr($1,8,3)
#gsub("-", "", mod_dir)
gsub("-", "", mod_owner)
gsub("-", "", mod_group)
gsub("-", "", mod_other)
owner_id=$3
group_id=$4
chmod_cmd="chmod u=" mod_owner ",g=" mod_group ",o=" mod_other " " filename
chown_cmd="chown " $3 ":" $4 " " filename
#print chmod_cmd
system(chmod_cmd)
#print chown_cmd
system(chown_cmd)
}
';
set +f;
return
}
tarcopy => () { local sourcedir="${1}";
local destdir="${2}";
local dirorfile="${3}";
if [ "${sourcedir}" = '' ]; then
echo "sourcedir not specified: ${sourcedir}";
return 1;
fi;
if [ "${destdir}" = '' ]; then
echo "destdir not specified: ${destdir}";
return 1;
fi;
if [ "${dirorfile}" = '' ]; then
echo "dirorfile not specified";
return 1;
fi;
if [ "${sourcedir}" = "${destdir}" ]; then
echo "destdir must not be same as sourcedir";
return 1;
fi;
if [ -d ${sourcedir} ]; then
:;
else
echo "sourcedir does not exist: ${sourcedir}";
return 1;
fi;
if [ -d ${destdir} ]; then
:;
else
echo "destdir does not exist: ${destdir}";
return 1;
fi;
if [ -e ${sourcedir}/${dirorfile} ]; then
:;
else
echo "sourcedir/dirorfile does not exist: ${sourcedir}/${dirorfile}";
return 1;
fi;
( cd ${sourcedir} && tar -cf - ${dirorfile} ) | ( cd ${destdir} && tar -xf - )
}
shswopnew => () { local FACILITY='shswopnew';
local USAGE="${FACILITY} [-adfloruv]";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local tempfile2="/tmp/${FACILITY}_${$}_2.tmp";
local tracefile1;
local tracefile2;
local joinoutput;
local OPT_a=0;
local OPT_d=0;
local OPT_f=0;
local OPT_l=0;
local OPT_o=0;
local OPT_r=0;
local OPT_u=0;
local OPT_v=0;
OPTIND=1;
while getopts ":adfloruv" OPTFLAG; do
case ${OPTFLAG} in
a)
OPT_a='1'
;;
d)
OPT_d='1'
;;
f)
OPT_f='1'
;;
l)
OPT_l='1'
;;
o)
OPT_o='1'
;;
r)
OPT_r='1'
;;
u)
OPT_u='1'
;;
v)
OPT_v='1'
;;
\?)
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1
;;
esac;
done;
shift $((${OPTIND} - 1));
tjmop -f no_package 2>/dev/null;
shswop | sort -u | sed -e 's;-\([0-9]\);\t\1;' >${tempfile1};
cat /tmp/tjmop_cache?.tmp | grep -Ev '^openpkg-[0-9].*\.src\.sh$' | sed -e 's/\.src\.rpm$//' | sort -u | sed -e 's;-\([0-9]\);\t\1;' | grep -v -f /home/openpkg_customizations/tjm_openpkg/tjmop_swinstall_openpkg_excludes.dat >${tempfile2};
join -j 1 -o 1.1,2.1,1.2,2.2 -e "*No_Match*" -a 1 ${tempfile1} ${tempfile2} | while read pkgID1 pkgID2 pkgver1 pkgver2; do
if [ "${pkgver1}" = "${pkgver2}" ]; then
return_status=0;
else
tjmcompare_versions "${pkgver1}" "${pkgver2}";
return_status=${?};
if [ "${OPT_o}" = '1' ]; then
if [ "${return_status}" = '2' ]; then
:;
else
return_status=0;
fi;
else
if [ "${return_status}" = '1' ]; then
:;
else
return_status=0;
fi;
fi;
fi;
pkgver_norel1="${pkgver1%-*}";
pkgver_norel2="${pkgver2%-*}";
if [ "${OPT_a}" = '1' -a "${pkgID2}" != '*No_Match*' ]; then
return_status=0;
else
if [ "${OPT_u}" = '1' -a "${pkgID2}" = '*No_Match*' ]; then
return_status=0;
else
if [ "${OPT_r}" = '1' ]; then
if [ "${pkgver_norel1}" != "${pkgver_norel2}" -o "${pkgID2}" = '*No_Match*' ]; then
return_status=0;
fi;
else
if [ "${OPT_v}" = '1' ]; then
if [ "${pkgver_norel1}" = "${pkgver_norel2}" -o "${pkgID2}" = '*No_Match*' ]; then
return_status=0;
fi;
fi;
fi;
fi;
fi;
if [ "${return_status}" != '0' ]; then
if [ "${OPT_f}" = '1' ]; then
echo "tjmop -fr ${pkgID1} # Upgrade from ${pkgver1} to ${pkgver2}";
else
if [ "${OPT_d}" = '1' -o "${OPT_l}" = '1' ]; then
echo "${pkgID1}";
else
echo "${pkgID1} ${pkgver1} ${pkgver2} ${return_status}";
fi;
fi;
fi;
done | if [ "${OPT_d}" = '1' ]; then
tr '\n' '|' | sed -e 's@|$@\n@';
else
if [ "${OPT_f}" = '1' -o "${OPT_l}" = '1' ]; then
cat;
else
nawk '
BEGIN {
printf "%17-s %21-s %21-s %20-s\n\n","Package","Installed","Available","Only Release Differs"
}
{
pkgID=$1
#if(pkgID == "*No_Match*") pkgID=$2
#pkgver1=$3
#pkgver2=$4
#vercompare=$5
pkgver1=$2
pkgver2=$3
vercompare=$4
pkgver1max=split(pkgver1,pkgver1array,"-")
pkgver2max=split(pkgver2,pkgver2array,"-")
if(pkgver1array[1] == pkgver2array[1]) {
only_release_differs="*New_Release_Only**"
}
else {
only_release_differs=""
}
#if(pkgver1 != pkgver2) printf "%17-s %21-s %21-s %20-s\n",pkgID,pkgver1,pkgver2,only_release_differs
# TJM 04/21/10 Do not list when installed version is newer than available version.
#if(vercompare == 1) printf "%17-s %21-s %21-s %20-s\n",pkgID,pkgver1,pkgver2,only_release_differs
printf "%17-s %21-s %21-s %20-s\n",pkgID,pkgver1,pkgver2,only_release_differs
#
}
';
fi;
fi;
rm ${tempfile1};
rm ${tempfile2};
return
}
tjmgethighseq => () { local FACILITY='tjmgethighseq';
local USAGE="${FACILITY} desired_name";
local desired_name="${1}";
local seq_num;
if [ "${desired_name}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
seq_num=$(ls -d ${desired_name}* 2>/dev/null | sed -ne "s;^${desired_name}\(_[0-9]\+\|\)$;0\1;p" | sed -e 's;^0_;;' | sort -nr | head -1);
echo "${seq_num}"
}
tjmoprediff_rpmnew => () { local FACILITY='tjmoprediff_rpmnew';
local USAGE="${FACILITY} full_path_to_openpkg_file";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local openpkg_vendor_file="${1}";
local dir_name;
local base_name;
local openpkg_file;
local backup_extension='.orig.bak';
local backup_filename;
if [ "${openpkg_vendor_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${openpkg_vendor_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_vendor_file}";
return 1;
fi;
dir_name=$(dirname ${openpkg_vendor_file});
base_name=$(basename ${openpkg_vendor_file});
openpkg_file=$(cd ${dir_name} && echo "${PWD}/${base_name}");
if [ -f ${openpkg_file}.rpmnew ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_file}.rpmnew";
return 1;
fi;
if [ -f ${openpkg_file}.orig.save ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_file}.orig.save";
return 1;
fi;
rm -f ${tempfile1};
tjmopkdiff3_merge ${openpkg_file}.orig.save ${openpkg_file} ${openpkg_file}.rpmnew ${tempfile1};
if [ -e ${tempfile1} ]; then
backup_filename="$(tjmgetudfn ${openpkg_file}${backup_extension})";
mv -i ${openpkg_file} ${backup_filename};
mv -i ${openpkg_file}.rpmnew ${openpkg_file}.orig.save;
mv -i ${tempfile1} ${openpkg_file};
fi
}
tjmopkdiff3_merge => () { local FACILITY='tjmopkdiff3_merge';
local USAGE="${FACILITY} base_original_vendor_file locally_customized_original_file vendor_changed_file [merged_output_file]";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local base_original_vendor_file="${1}";
local locally_customized_original_file="${2}";
local vendor_changed_file="${3}";
local merged_output_file="${4}";
if [ "${base_original_vendor_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${base_original_vendor_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${base_original_vendor_file}";
return 1;
fi;
if [ "${locally_customized_original_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${locally_customized_original_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${locally_customized_original_file}";
return 1;
fi;
if [ "${vendor_changed_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${vendor_changed_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${vendor_changed_file}";
return 1;
fi;
if [ "${merged_output_file}" = '' ]; then
merged_output_file="${vendor_changed_file}";
fi;
rm -f ${tempfile1};
kdiff3 -m ${base_original_vendor_file} ${locally_customized_original_file} ${vendor_changed_file} -o ${tempfile1};
if [ -e ${tempfile1} ]; then
if [ -f ${merged_output_file} ]; then
setpermlike ${merged_output_file} ${tempfile1};
else
setpermlike ${vendor_changed_file} ${tempfile1};
fi;
mv -i ${tempfile1} ${merged_output_file};
else
echo "No kdiff3 save detected--no changes made.";
return 1;
fi
}
tjmcustomize => () { local FACILITY='tjmcustomize';
local USAGE="${FACILITY} sourcedir destdir [filename]";
local sourcedir="${1%/}";
local destdir="${2%/}";
local filename="${3}";
local orig_save_extension='.orig.save';
local tempdir1="/tmp/${FACILITY}_${$}_1";
local highest_status;
local return_status;
set +f;
if [ "${sourcedir}" = '' -o "${destdir}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -d ${sourcedir} ]; then
:;
else
echo "${FACILITY}-E-NOEXISTS, directory does not exist: ${sourcedir}" 1>&2;
return 1;
fi;
if [ -d ${destdir} ]; then
:;
else
echo "${FACILITY}-E-NOEXISTS, directory does not exist: ${destdir}" 1>&2;
return 1;
fi;
if [ "${filename}" = '' ]; then
highest_status='0';
for filename in $(cd ${sourcedir} && find . | egrep -v '(\.orig$|tjmop_.*\.log|_TJMOLD|_NOINSTALL$|\.orig\.bak(_[0-9]+)*$)');
do
if [ "${filename}" = "." ]; then
:;
else
filename="${filename#./}";
tjmcustomizefile "${sourcedir}" "${destdir}" "${filename}";
return_status=${?};
if [ "${return_status}" -gt "${highest_status}" ]; then
highest_status="${return_status}";
fi;
fi;
done;
printf '\nChecking for *.rpm(new|orig|save) files in ${OPENPKG_ROOT}/etc... If any exist, please process them to avoid warning emails to root:\n';
( cd ${OPENPKG_ROOT}/etc;
find . -name '*.rpm*' ) | sed -e 's;^;\t;';
if [ "${highest_status}" != '0' ]; then
return ${highest_status};
fi;
else
tjmcustomizefile "${sourcedir}" "${destdir}" "${filename}";
fi
}
tjmopsvncust => () { local FACILITY='tjmopsvncust';
local USAGE="${FACILITY} relative_cust_path su_user svn_user svn_pw svncms_wc_filesystems_host_user_path";
local relative_cust_path="${1%/}";
local su_user="${2}";
local svn_user="${3}";
local svn_pw="${4}";
local svncms_wc_filesystems_host_user_path="${5}";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local reconcile_only_trigger_filename=reconcile.only;
local SVNCMS_ORIG_DIRNAME='orig';
local SVNCMS_CUST_DIRNAME='cust';
local return_status;
set +f;
if [ "${relative_cust_path}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ "${relative_cust_path}" = 'rootdir/home/openpkg' ]; then
echo "Checking for *.rpm(new|orig|save) files in ${OPENPKG_ROOT}/etc... They must be processed promptly to avoid warning emails to root.";
( highest_status='0';
cd ${OPENPKG_ROOT} && {
find etc -name '*.rpm*';
find .* -prune -name '.*.rpm*'
} | sed -e 's!^./!!' | while read cur_file; do
echo "${FACILITY}-I-PROCESSING, processing file: ${cur_file}" 1>&2;
fname="${cur_file%.*}";
ftype="${cur_file##*.}";
case "${ftype}" in
rpmsave)
if [ -e "${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/rootdir/home${OPENPKG_ROOT}/${fname}" ]; then
diff ${cur_file} ${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/rootdir/home${OPENPKG_ROOT}/${fname} >/dev/null 2>&1;
if [ ${?} = 0 ]; then
echo "${FACILITY}-I-RPMSAVE_DELETED, rpmsave deleted because it matches customized file: ${cur_file} " 1>&2;
rm ${cur_file};
return_status=${?};
else
echo "${FACILITY}-W-RPMSAVE_CUSTOM_DIFF, rpmsave and customized file are different. MANUALLY UPDATE SVNCMS'S CUSTOMIZED FILE, IF APPROPRIATE, AND DELETE THIS FILE: ${cur_file} " 1>&2;
return_status=1;
fi;
else
echo "${FACILITY}-W-RPMSAVE_WITH_NO_CUSTOM, rpmsave with no associated customized file. MANUALLY ADD SVNCMS'S CUSTOMIZED FILE, IF APPROPRIATE, AND DELETE THIS FILE: ${cur_file} " 1>&2;
return_status=1;
fi
;;
rpmnew)
if [ -e "${svncms_wc_filesystems_host_user_path}/${SVNCMS_ORIG_DIRNAME}/rootdir/home${OPENPKG_ROOT}/${fname}" ]; then
diff ${cur_file} ${svncms_wc_filesystems_host_user_path}/${SVNCMS_ORIG_DIRNAME}/rootdir/home${OPENPKG_ROOT}/${fname} >/dev/null 2>&1;
if [ ${?} = 0 ]; then
echo "${FACILITY}-I-RPMNEW_DELETED, rpmnew deleted because it matches original: ${cur_file} " 1>&2;
rm ${cur_file};
return_status=${?};
else
echo "${FACILITY}-W-RPMNEW_ORIGINAL_DIFF, rpmnew and original are different. MANUALLY UPDATE SVNCMS'S ORIGINAL, IF APPROPRIATE, AND DELETE THIS FILE: ${cur_file} " 1>&2;
return_status=1;
fi;
else
echo "${FACILITY}-W-RPMNEW_WITH_NO_ORIGINAL, rpmnew with no associated original file. MANUALLY ADD SVNCMS'S ORIGINAL FILE, IF APPROPRIATE, AND DELETE THIS FILE: ${cur_file} " 1>&2;
return_status=1;
fi
;;
*)
echo "${FACILITY}-E-UNKNOWN_RPM_FTYPE, unknown .rpm* file type: ${cur_file} " 1>&2;
return_status=1
;;
esac;
if [ "${return_status}" -gt "${highest_status}" ]; then
highest_status="${return_status}";
fi;
done;
exit ${highest_status} );
return_status=${?};
if [ "${return_status}" != '0' ]; then
return ${return_status};
fi;
fi;
( if [ ! -e "${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/${relative_cust_path}" ]; then
echo "${FACILITY}-I-NO_CUSTS, no customizations--svncms ${SVNCMS_CUST_DIRNAME} directory does not exist: ${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/${relative_cust_path}" 1>&2;
else
cd ${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/${relative_cust_path} || exit ${?};
if [ -e "${reconcile_only_trigger_filename}" ]; then
echo "${FACILITY}-W-RECONCILE_SKIP_ON_ACTIVE, reconcile is already active on path--skipping: path=${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/${relative_cust_path} info='$(cat ${reconcile_only_trigger_filename})'" 1>&2;
else
echo "Reconciling customizations with svncms for directory ${relative_cust_path}...";
echo "$(date +%EY%m%d%H%M%S) reconcile started by user $(whoami) pid ${$}" >${reconcile_only_trigger_filename};
svn add -q ${reconcile_only_trigger_filename};
svn commit --no-auth-cache --non-interactive --username "${svn_user}" --password "${svn_pw}" -m 'RECONCILE ONLY' ${reconcile_only_trigger_filename} >/dev/null 2>${tempfile1};
return_status=${?};
if [ "${return_status}" = '0' ]; then
echo "${FACILITY}-E-BAD_RTN_STATUS, svn commit for RECONCILE returned 0 instead of 1--unexpected result." 1>&2;
return_status=1;
else
return_status_precommit=$(sed -ne 's@^.*Commit blocked by pre-commit hook (exit code \([0-9]\+\)) with output:$@\1@p' < ${tempfile1} );
case "${return_status_precommit}" in
100)
return_status=0
;;
101)
grep -vE '^(svn: Commit failed .details follow.:|svn: Commit blocked by pre-commit hook .* with output:|%.*, returning status [0-9]+)$' ${tempfile1} 1>&2;
return_status=0
;;
102)
grep -vE '^(svn: Commit failed .details follow.:|svn: Commit blocked by pre-commit hook .* with output:|%.*, returning status [0-9]+)$' ${tempfile1} 1>&2;
return_status=${return_status_precommit}
;;
*)
cat ${tempfile1} 1>&2;
return_status=999
;;
esac;
fi;
svn revert -q ${reconcile_only_trigger_filename};
rm -f ${reconcile_only_trigger_filename};
exit ${return_status};
fi;
fi );
return_status=${?};
rm -f ${tempfile1};
return ${return_status}
}
tjmoprediff_rpmsave => () { local FACILITY='tjmoprediff_rpmsave';
local USAGE="${FACILITY} full_path_to_openpkg_file";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local openpkg_vendor_file="${1}";
local dir_name;
local base_name;
local openpkg_file;
local backup_extension='.orig.bak';
local backup_filename;
if [ "${openpkg_vendor_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${openpkg_vendor_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_vendor_file}";
return 1;
fi;
dir_name=$(dirname ${openpkg_vendor_file});
base_name=$(basename ${openpkg_vendor_file});
openpkg_file=$(cd ${dir_name} && echo "${PWD}/${base_name}");
if [ -f ${openpkg_file}.rpmsave ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_file}.rpmsave";
return 1;
fi;
if [ -f ${openpkg_file}.orig.save ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_file}.orig.save";
return 1;
fi;
rm -f ${tempfile1};
tjmopkdiff3_merge ${openpkg_file}.orig.save ${openpkg_file}.rpmsave ${openpkg_file} ${tempfile1};
if [ -e ${tempfile1} ]; then
backup_filename="$(tjmgetudfn ${openpkg_file}${backup_extension})";
mv -i ${openpkg_file}.rpmsave ${backup_filename};
mv -i ${openpkg_file} ${openpkg_file}.orig.save;
mv -i ${tempfile1} ${openpkg_file};
fi
}
tjmop => () { local FACILITY='tjmop';
local USAGE="${FACILITY} [-xfpctmblsdauvrzRkCeEV] [\"-U [URI_Prefix URI_Suffix]\"] [\"--{with|without}_xxx [yes|no]\"]... [--{any openpkg --switch}]... {package_id}";
local OPT_x=0;
local OPT_f=0;
local OPT_p=0;
local OPT_c=0;
local OPT_t=0;
local OPT_m=0;
local OPT_b=0;
local OPT_s=0;
local OPT_a=0;
local OPT_v=0;
local OPT_u=0;
local OPT_r=0;
local OPT_R=0;
local OPT_k=0;
local OPT_z=0;
local OPT_d=0;
local OPT_U=0;
local OPT_l=0;
local OPT_C=0;
local OPT_e=0;
local OPT_E=0;
local OPT_V=0;
local rpm_debug_sw='';
local ARG_dash='';
local ARG_force='';
local ARG_U='';
local PKGOPTCNT=0;
local package_id;
local swname;
local specfile;
local swname_filter;
local platform_filter;
local pkg_filter;
local pkg_build_dir;
local pkg_bin_file;
local curfilename;
local filenames_count;
local tempfile_prefix="/tmp/${FACILITY}_${$}_";
local cachefile_prefix="/tmp/${FACILITY}_";
local tjmop_all_status;
local tjmop_fetch_status='';
local tjmop_recustomize_src_status='';
local tjmop_recustomize_all_status='';
local tjmop_prepare_status='';
local tjmop_compile_status='';
local tjmop_test_status='';
local tjmop_makeinstall_status='';
local tjmop_binarypkg_status='';
local tjmop_listbinpkg_status='';
local tjmop_sourcepkg_status='';
local tjmop_delpkg_status='';
local tjmop_addpkg_status='';
local tjmop_updpkg_status='';
local tjmop_verpkg_status='';
local tjmop_highest_build_phase_status='0';
set +f;
OPTIND=1;
while getopts ":xfpctmblsdauvrzRk-:U:CeEV" OPTFLAG; do
case ${OPTFLAG} in
x)
OPT_x='1';
rpm_debug_sw=" -vv"
;;
C)
OPT_C='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
e)
OPT_e='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
E)
OPT_E='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
V)
OPT_V='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
f)
OPT_f='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
p)
OPT_p='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
c)
OPT_c='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
t)
OPT_t='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
m)
OPT_m='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
b)
OPT_b='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
l)
OPT_l='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
s)
OPT_s='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
a)
OPT_a='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
u)
OPT_u='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
r)
OPT_r='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
z)
OPT_z='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
R)
OPT_R='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
k)
OPT_k='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
d)
OPT_d='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
U)
OPT_U='1';
ARG_U="${OPTARG}"
;;
v)
OPT_v='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
-)
case ${OPTARG} in
with*)
ARG_dash="${ARG_dash} -D \"${OPTARG}\""
;;
force)
ARG_force=" --${OPTARG}"
;;
*)
ARG_dash="${ARG_dash} --${OPTARG}"
;;
esac
;;
\?)
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1
;;
esac;
done;
shift $((${OPTIND} - 1));
if [ "${PKGOPTCNT}" != '0' ]; then
if [ ${#} != '1' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
else
if [ "${OPT_U}" != '1' ]; then
echo "${FACILITY}-E-NOPKGACTION, no package action options specified: ${USAGE}" 1>&2;
return 1;
fi;
fi;
if [ "${OPT_x}" = '1' ]; then
set -xv;
else
set +xv;
fi;
package_id="${1}";
swname="${package_id%%-[0-9]*}";
if [ "${OPT_U}" = '1' ]; then
if [ "${ARG_U}" = '' ]; then
echo "${FACILITY}-I-INFO, OpenPKG source location is set to ${OPENPKG_SOURCE_URI_PREFIX}<my package>${OPENPKG_SOURCE_URI_SUFFIX}" 1>&2;
else
set -- ${ARG_U};
if [ ${#} != '2' ]; then
echo "${FACILITY}-E-INVURI, invalid URI syntax: ${USAGE}" 1>&2;
tjmop_finalize;
return 1;
else
export OPENPKG_SOURCE_URI_PREFIX="${1}";
export OPENPKG_SOURCE_URI_SUFFIX="${2}";
fi;
fi;
fi;
tjmop_build_phase f fetch || {
tjmop_finalize;
return ${?}
};
specfile='';
for curfilename in ${OPENPKG_ROOT}/RPM/SRC/${swname}/${swname}*.spec;
do
if [ -f ${curfilename} ]; then
if [ "${specfile}" = '' ]; then
specfile="${curfilename}";
else
echo "${FACILITY}-E-MULTSPEC, multiple spec files detected--cannot determine which one to use: " ${OPENPKG_ROOT}/RPM/SRC/${swname}/*.spec 1>&2;
tjmop_finalize;
return 1;
fi;
fi;
done;
case ${swname} in
config)
pkg_filter="${package_id}(-[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*)?"
;;
esvn)
pkg_filter="${package_id}(-[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*)?"
;;
ipfilter)
pkg_filter="(ipfilter-|ip_fil)[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
gcc3)
pkg_filter="(gcc3|gcc)-[3][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
gcc42)
pkg_filter="(gcc42|gcc)-[4][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
glib)
pkg_filter="glib-[1][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
glib2)
pkg_filter="(glib2|glib)-[2][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
gtk)
pkg_filter="(gtk[+]|gtk)-[1][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
gtk2)
pkg_filter="(gtk[+]|gtk2)-[2][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
mm_mod_auth_ldap)
pkg_filter="mm_mod_auth_ldap-*[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
mussh)
pkg_filter="${package_id}(-[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*)?"
;;
perl-[a-z]*)
pkg_filter="${package_id}-[0-9][0-9\.\-]*"
;;
php4)
pkg_filter="(php|php4)-[4][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
php5)
pkg_filter="(php|php5)-[5][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
php-jpgraph)
pkg_filter="(php-jpgraph|jpgraph)-[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
sqlite)
pkg_filter="(sqlite-src|sqlite)-[0-9][0-9\.\-]*.*"
;;
xz)
pkg_filter="(xz)-[0-9][0-9\.\-]*.*"
;;
"${package_id}")
case ${swname} in
apache)
swname_filter="(${swname}|httpd)"
;;
gcrypt)
swname_filter="(${swname}|libgcrypt)"
;;
gpg-error)
swname_filter="(${swname}|libgpg-error)"
;;
libpixman)
swname_filter="(${swname}|pixman)"
;;
libxml)
swname_filter="(${swname}|libxml2)"
;;
pkgconfig)
swname_filter="(${swname}|pkg-config)"
;;
png)
swname_filter="(${swname}|libpng)"
;;
python-setup)
swname_filter="(${swname}|setuptools)"
;;
pysvn-workbench)
swname_filter="(${swname}|WorkBench)"
;;
qt)
swname_filter="(${swname}|qt-x11-free)"
;;
qt4)
swname_filter="(${swname}|qt-(x11|everywhere)-opensource-src)"
;;
sasl)
swname_filter="(${swname}|cyrus-sasl)"
;;
snmp)
swname_filter="(${swname}|net-snmp)"
;;
tcpwrappers)
swname_filter="(${swname}|socket_wrappers)"
;;
tetex)
swname_filter="(${swname}|tetex-src)"
;;
xft)
swname_filter="(${swname}|libXft)"
;;
wx)
swname_filter="(${swname}|wxGTK|wxWidgets)"
;;
wxpython)
swname_filter="(${swname}|wxPython-src)"
;;
*)
swname_filter="${swname}"
;;
esac;
pkg_filter="${swname_filter}-[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
*)
pkg_filter="${package_id}.*"
;;
esac;
tjmop_build_phase r recustomize_src || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase p prepare || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase c compile || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase t test || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase m makeinstall || {
tjmop_finalize;
return ${?}
};
platform_filter="$(echo ${OPENPKG_PLATFORM} | sed -e 's;\.;\\.;g')";
pkg_bin_file=$(cd ${OPENPKG_ROOT}/RPM/PKG/ && find *.rpm -prune -type f 2>/dev/null | egrep "^${pkg_filter}\.${platform_filter}-openpkg\.rpm$");
filenames_count=$(echo "${pkg_bin_file}" | wc -w);
if [ ${filenames_count} -gt 1 ]; then
echo "${FACILITY}-E-DUPDIR, multiple binary files for specified package in directory ${OPENPKG_ROOT}/RPM/PKG--must select only one: ${pkg_bin_file}" 1>&2;
tjmop_finalize;
return 1;
fi;
tjmop_build_phase b binarypkg || {
tjmop_finalize;
return ${?}
};
pkg_bin_file=$(cd ${OPENPKG_ROOT}/RPM/PKG/ && find *.rpm -prune -type f 2>/dev/null | egrep "^${pkg_filter}\.${platform_filter}-openpkg\.rpm$");
filenames_count=$(echo "${pkg_bin_file}" | wc -w);
if [ ${filenames_count} -gt 1 ]; then
echo "${FACILITY}-E-DUPDIR, multiple binary files for specified package in directory ${OPENPKG_ROOT}/RPM/PKG--must select only one: ${pkg_bin_file}" 1>&2;
tjmop_finalize;
return 1;
fi;
tjmop_build_phase l listbinpkg || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase s sourcepkg || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase d delpkg || {
tjmop_finalize;
return ${?}
};
hash -r;
tjmop_build_phase a addpkg || {
tjmop_finalize;
return ${?}
};
hash -r;
tjmop_build_phase u updpkg || {
tjmop_finalize;
return ${?}
};
hash -r;
tjmop_build_phase v verpkg || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase z zap || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase R recustomize_all || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase k compare_src || {
tjmop_finalize;
return ${?}
};
if [ "${OPT_V}" = '1' ]; then
printf "Verify parsing: ";
printf "swname=%-17s" "${swname}";
printf "package_id=%-17s" "${package_id}";
printf "pkg_build_dir=%-25s" "${pkg_build_dir}";
printf "pkg_bin_file=%-s" "${pkg_bin_file}";
printf "\n";
fi;
tjmop_all_status=0;
if [ "${OPT_e}" = '1' ]; then
if [ "${tjmop_fetch_status}" '>' '0' -o "${tjmop_recustomize_src_status}" '>' '0' -o "${tjmop_prepare_status}" '>' '0' -o "${tjmop_compile_status}" '>' '0' -o "${tjmop_makeinstall_status}" '>' '0' -o "${tjmop_binarypkg_status}" '>' '0' -o "${tjmop_listbinpkg_status}" '>' '0' -o "${tjmop_sourcepkg_status}" '>' '0' -o "${tjmop_delpkg_status}" '>' '0' -o "${tjmop_addpkg_status}" '>' '0' -o "${tjmop_updpkg_status}" '>' '0' -o "${tjmop_recustomize_all_status}" '>' '0' -o '0' '>' '0' ]; then
tjmop_all_status=1;
fi;
fi;
if [ "${OPT_E}" = '1' ]; then
tjmop_all_status=1;
fi;
if [ "${tjmop_all_status}" = '1' ]; then
printf "Exit status: ";
printf "%-17s" "${swname}";
printf " fetch=%-1s" "${tjmop_fetch_status}";
printf " recustomize_src=%-1s" "${tjmop_recustomize_src_status}";
printf " prepare=%-1s" "${tjmop_prepare_status}";
printf " compile=%-1s" "${tjmop_compile_status}";
printf " test=%-1s" "${tjmop_test_status}";
printf " makeinstall=%-1s" "${tjmop_makeinstall_status}";
printf " binarypkg=%-1s" "${tjmop_binarypkg_status}";
printf " listbinpkg=%-1s" "${tjmop_listbinpkg_status}";
printf " sourcepkg=%-1s" "${tjmop_sourcepkg_status}";
printf " delpkg=%-1s" "${tjmop_delpkg_status}";
printf " addpkg=%-1s" "${tjmop_addpkg_status}";
printf " updpkg=%-1s" "${tjmop_updpkg_status}";
printf " verpkg=%-1s" "${tjmop_verpkg_status}";
printf " recustomize_all=%-1s" "${tjmop_recustomize_all_status}";
printf "\n";
fi;
tjmop_finalize;
find ${tempfile_prefix}cache*.tmp -prune -type f -mtime +1 -exec rm {} \; 2>/dev/null;
return 0
}
tjmopapplytjmsavecust => () { local FACILITY='tjmopapplytjmsavecust';
local USAGE="${FACILITY} full_path_to_customized_openpkg_file [customization_directory]";
local openpkg_customized_file="${1}";
local openpkg_cust_dir="${2}";
local prior_to_cust_suffix="_tjmsave";
local dir_name;
local base_name;
local openpkg_file;
local openpkg_file_prior_to_cust;
local openpkg_cust_root_def="/home/openpkg_customizations";
local backup_extension='.orig.bak';
local backup_filename;
if [ "${openpkg_customized_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${openpkg_customized_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_customized_file}";
return 1;
fi;
dir_name=$(dirname ${openpkg_customized_file});
base_name=$(basename ${openpkg_customized_file});
openpkg_file=$(cd ${dir_name} && echo "${PWD}/${base_name}");
openpkg_file_prior_to_cust="${openpkg_file}${prior_to_cust_suffix}";
if [ -f ${openpkg_file_prior_to_cust} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_file_prior_to_cust}";
return 1;
fi;
if [ "${openpkg_cust_dir}" = '' ]; then
openpkg_cust_dir="${openpkg_cust_root_def}${dir_name}";
fi;
openpkg_cust_dir="${openpkg_cust_dir%/}";
if [ -d ${openpkg_cust_dir} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, customization directory does not exist: ${openpkg_cust_dir}";
return 1;
fi;
if [ -f ${openpkg_cust_dir}/${base_name} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_cust_dir}/${base_name}";
return 1;
fi;
diff ${openpkg_file_prior_to_cust} ${openpkg_cust_dir}/${base_name} >/dev/null 2>&1;
if [ ${?} != 0 ]; then
echo "${FACILITY}-F-DIFFERENT, file prior to customization and file in the customization directory differ--changes shown here:" 1>&2;
diff ${openpkg_file_prior_to_cust} ${openpkg_cust_dir}/${base_name} | sed -e "$(echo -e 's;^;\t;')";
return 1;
fi;
backup_filename="$(tjmgetudfn ${openpkg_cust_dir}/${base_name}${backup_extension})" && mv ${openpkg_cust_dir}/${base_name} ${backup_filename} && mv ${openpkg_file} ${openpkg_cust_dir}/${base_name} && mv ${openpkg_file_prior_to_cust} ${openpkg_file} && echo -e "${FACILITY}-I-CUSTAPPLIED, applied customized file ${openpkg_file} to ${openpkg_cust_dir}/${base_name}, previous version saved. These changes were applied:" 1>&2 && diff ${openpkg_cust_dir}/${base_name} ${backup_filename} | sed -e "$(echo -e 's;^;\t;')"
}
diffpermfile => () { local sourcedir="${1}";
local destdir="${2}";
local dirorfile="${3}";
local difflist;
local perm;
local owner_id;
local group_id;
local perm2;
local owner_id2;
local group_id2;
find ${sourcedir}/${dirorfile} ${FIND_LS} -prune | sed -e 's;^ *[^ ]* *[^ ]* \(..........\) *[^ ]* \(.........\)\(.........\) *[^ ]* [A-Z].. .. ....[0-9] \([^ ]*\)\( -> .*\)*$;\1 \2 \3;' | while read perm owner_id group_id; do
if [ -e ${destdir}/${dirorfile} ]; then
find ${destdir}/${dirorfile} ${FIND_LS} -prune | sed -e 's;^ *[^ ]* *[^ ]* \(..........\) *[^ ]* \(.........\)\(.........\) *[^ ]* [A-Z].. .. ....[0-9] \([^ ]*\)\( -> .*\)*$;\1 \2 \3;' | while read perm2 owner_id2 group_id2; do
perm_formatted=$(echo "${perm}" |
nawk '
{
mod_owner=substr($1,2,3)
mod_group=substr($1,5,3)
mod_other=substr($1,8,3)
gsub("-", "", mod_owner)
gsub("-", "", mod_group)
gsub("-", "", mod_other)
print "u=" mod_owner ",g=" mod_group ",o=" mod_other
}
'
);
difflist="";
if [ "${perm}" != "${perm2}" ]; then
difflist="${difflist}P";
fi;
if [ "${owner_id}" != "${owner_id2}" ]; then
difflist="${difflist}O";
fi;
if [ "${group_id}" != "${group_id2}" ]; then
difflist="${difflist}G";
fi;
if [ "${difflist}" != '' -a "${perm}" = "${perm##l*}" -a "${perm2}" = "${perm2##l*}" ]; then
printf "\n";
printf "Permissions differ (%s). Execute the commands below to correct:\n" $difflist;
printf "%-10s %-9s %-9s %-10s %-9s %-9s " ${perm} ${owner_id} ${group_id} ${perm2} ${owner_id2} ${group_id2};
printf "f=%-70s; chmod %s \$f; chown %s:%s \$f" ${destdir}/$dirorfile ${perm_formatted} ${owner_id} ${group_id};
printf "\n";
printf "\n";
fi;
done;
fi;
done
}
tjmopdo => () { local FACILITY='tjmopdo';
local USAGE="${FACILITY} swlist_file swname_RSE tjmop_switches tjmop_package_options";
local swlist_file;
local swname_RSE;
local tjmop_switches;
local tjmop_options;
local swname;
local reverse_cmd;
local return_status;
set +f;
swlist_file="${1}";
shift;
swname_RSE="${1}";
shift;
tjmop_switches="${1}";
shift;
tjmop_options="${*}";
if [ -f ${swlist_file} ]; then
:;
else
echo "${FACILITY}-E-FNF, file not found: ${swlist_file}" 1>&2;
return 1;
fi;
if [ "${tjmop_switches}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ "${tjmop_switches}" = "-d" -o "${tjmop_switches}" = "-dC" -o "${tjmop_switches}" = "-Cd" -o "${tjmop_switches}" = "-dCS" ]; then
reverse_cmd="revlines";
else
reverse_cmd="cat";
fi;
grep -E "^${swname_RSE}([[:space:]]|$)" ${swlist_file} | eval "${reverse_cmd}" | while read package_id package_options; do
if [ "${package_id###*}" = '' ]; then
:;
else
swname="${package_id%%-[0-9]*}";
printf "Doing %-17s %-25s %s\n" "${swname}" "${package_id}" "${package_options}" 1>&2;
eval "tjmop ${tjmop_switches} ${tjmop_options} ${package_options} ${swname}" </dev/null;
return_status=${?};
if [ "${return_status}" = "130" -o "${build_phase_cur_status}" = "999" ]; then
echo "${FACILITY}-F-STOP, stopping due to previous error" 1>&2;
return ${return_status};
fi;
fi;
done
}
tjmgetudfn => () { local FACILITY='tjmgetudfn';
local USAGE="${FACILITY} desired_name";
local desired_name="${1}";
local unique_name;
local seq_num;
if [ "${desired_name}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
seq_num=$(tjmgethighseq "${desired_name}");
if [ "${seq_num}" = '' ]; then
unique_name="${desired_name}";
else
unique_name="${desired_name}_$((${seq_num} + 1))";
fi;
echo "${unique_name}"
}
tjmoprediff => () { local FACILITY='tjmoprediff';
local USAGE="${FACILITY} full_path_to_openpkg_file [customization_directory]";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local openpkg_vendor_file="${1}";
local openpkg_cust_dir="${2}";
local dir_name;
local base_name;
local openpkg_file;
local openpkg_cust_root_def="/home/openpkg_customizations";
if [ "${openpkg_vendor_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${openpkg_vendor_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_vendor_file}";
return 1;
fi;
dir_name=$(dirname ${openpkg_vendor_file});
base_name=$(basename ${openpkg_vendor_file});
openpkg_file=$(cd ${dir_name} && echo "${PWD}/${base_name}");
if [ "${openpkg_cust_dir}" = '' ]; then
openpkg_cust_dir="${openpkg_cust_root_def}${dir_name}";
fi;
openpkg_cust_dir="${openpkg_cust_dir%/}";
if [ -d ${openpkg_cust_dir} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, customization directory does not exist: ${openpkg_cust_dir}";
return 1;
fi;
if [ -f ${openpkg_cust_dir}/${base_name}.orig.save ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_cust_dir}/${base_name}.orig.save";
return 1;
fi;
if [ -f ${openpkg_cust_dir}/${base_name} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_cust_dir}/${base_name}";
return 1;
fi;
if [ -e ${openpkg_file}.rpmsave ]; then
diff ${openpkg_cust_dir}/${base_name} ${openpkg_file}.rpmsave >/dev/null 2>&1;
if [ ${?} = 0 ]; then
rm ${openpkg_file}.rpmsave;
else
echo -e "${openpkg_file}.rpmsave exists. Use tjmoprediff_rpmsave to retain customizations.";
return 1;
fi;
fi;
if [ -e ${openpkg_file}.rpmnew ]; then
echo -e "${openpkg_file}.rpmnew exists. Use tjmoprediff_rpmnew to retain customizations.";
return 1;
fi;
rm -f ${tempfile1};
tjmopkdiff3_merge ${openpkg_cust_dir}/${base_name}.orig.save ${openpkg_cust_dir}/${base_name} ${openpkg_file} ${tempfile1};
if [ -e ${tempfile1} ]; then
mv -i ${openpkg_file} ${openpkg_file}.orig.save;
mv -i ${tempfile1} ${openpkg_file};
cp -ip ${openpkg_file}.orig.save ${openpkg_cust_dir}/${base_name}.orig.save;
cp -ip ${openpkg_file} ${openpkg_cust_dir}/${base_name};
fi
}
PHP Variables
Variable => Value
_SERVER["MANPATH"] => /openpkg/man:/openpkg/local/man::/usr/share/man
_SERVER["OPENPKG_PKGGROUP"] => opkg
_SERVER["M4"] => /openpkg/bin/m4
_SERVER["TEST_PHP_SRCDIR"] => /openpkg/RPM/TMP/php-5.4.0
_SERVER["OPENPKG_PKGUSER"] => opkg
_SERVER["SHELL"] => /openpkg/lib/openpkg/bash
_SERVER["TERM"] => vt220
_SERVER["MAKEFLAGS"] =>
_SERVER["OPENPKG_DOWNLOAD_CURL_FILTER"] => grep 'class="file"' | sed -e 's!.*td valign!!;s!img .*!!;s!.*href!!;s!.*"\(.*\)".*!\1!'
_SERVER["SSH_CLIENT"] => deleted
_SERVER["TMPDIR"] => /tmp
_SERVER["OPENPKG_SOURCE_URI_SUFFIX"] => -${OPENPKG_TAG}.src.rpm
_SERVER["SSH_TTY"] => deleted
_SERVER["OPENPKG_ROOT"] => /openpkg
_SERVER["USER"] => opkg
_SERVER["LD_LIBRARY_PATH"] => /openpkg/lib:/openpkg/local/lib::/lib:/usr/lib
_SERVER["SSH_AUTH_SOCK"] => deleted
_SERVER["OPENPKG_TAG"] => ${OPENPKG_REL}.${OPENPKG_SUBREL}
_SERVER["MAKELEVEL"] => 1
_SERVER["OPENPKG_REL"] => 2.5
_SERVER["MFLAGS"] =>
_SERVER["PATH"] => /openpkg/bin:/openpkg/sbin:/openpkg/local/bin:/openpkg/local/sbin:/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/ucb
_SERVER["_"] => /openpkg/RPM/TMP/php-5.4.0/sapi/cli/php
_SERVER["LC_COLLATE"] => C
_SERVER["BLOCKSIZE"] => 1024
_SERVER["OPENPKG_PLATFORM"] => ix86-rhel4
_SERVER["PWD"] => /openpkg/RPM/TMP/php-5.4.0
_SERVER["TEST_PHP_EXECUTABLE"] => /openpkg/RPM/TMP/php-5.4.0/sapi/cli/php
_SERVER["OPENPKG_DOWNLOAD_URL_PREFIX"] => http://download.openpkg.org
_SERVER["HOME"] => /openpkg
_SERVER["SHLVL"] => 3
_SERVER["OPENPKG_SUBREL"] => 1
_SERVER["LOGNAME"] => opkg
_SERVER["SSH_CONNECTION"] => deleted
_SERVER["OPENPKG_DOWNLOAD_CURL_USER_PW"] => -u 804941a8-0525-11df-8345-000e0c4e71a6:anypw
_SERVER["INFOPATH"] => /openpkg/info:/openpkg/local/info::/usr/share/info
_SERVER["DISPLAY"] => localhost:10.0
_SERVER["CC"] => /openpkg/bin/gcc
_SERVER["OPENPKG_SOURCE_URI_PREFIX"] => http://download.openpkg.org/packages/current/source/
_SERVER["setpermlike"] => () { local FACILITY='setpermlike';
local USAGE="${FACILITY} Permissions_Source_Filespec Permissions_Destination_Filespec";
local permsource_file="${1}";
local permdest_file="${2}";
set +f;
if [ "${permsource_file}" = '' -o "${permdest_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
set -f;
ls -ald ${permsource_file} | head -1 | nawk -v filename=${permdest_file} '
{
#mod_dir=substr($1,1,1)
mod_owner=substr($1,2,3)
mod_group=substr($1,5,3)
mod_other=substr($1,8,3)
#gsub("-", "", mod_dir)
gsub("-", "", mod_owner)
gsub("-", "", mod_group)
gsub("-", "", mod_other)
owner_id=$3
group_id=$4
chmod_cmd="chmod u=" mod_owner ",g=" mod_group ",o=" mod_other " " filename
chown_cmd="chown " $3 ":" $4 " " filename
#print chmod_cmd
system(chmod_cmd)
#print chown_cmd
system(chown_cmd)
}
';
set +f;
return
}
_SERVER["tarcopy"] => () { local sourcedir="${1}";
local destdir="${2}";
local dirorfile="${3}";
if [ "${sourcedir}" = '' ]; then
echo "sourcedir not specified: ${sourcedir}";
return 1;
fi;
if [ "${destdir}" = '' ]; then
echo "destdir not specified: ${destdir}";
return 1;
fi;
if [ "${dirorfile}" = '' ]; then
echo "dirorfile not specified";
return 1;
fi;
if [ "${sourcedir}" = "${destdir}" ]; then
echo "destdir must not be same as sourcedir";
return 1;
fi;
if [ -d ${sourcedir} ]; then
:;
else
echo "sourcedir does not exist: ${sourcedir}";
return 1;
fi;
if [ -d ${destdir} ]; then
:;
else
echo "destdir does not exist: ${destdir}";
return 1;
fi;
if [ -e ${sourcedir}/${dirorfile} ]; then
:;
else
echo "sourcedir/dirorfile does not exist: ${sourcedir}/${dirorfile}";
return 1;
fi;
( cd ${sourcedir} && tar -cf - ${dirorfile} ) | ( cd ${destdir} && tar -xf - )
}
_SERVER["shswopnew"] => () { local FACILITY='shswopnew';
local USAGE="${FACILITY} [-adfloruv]";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local tempfile2="/tmp/${FACILITY}_${$}_2.tmp";
local tracefile1;
local tracefile2;
local joinoutput;
local OPT_a=0;
local OPT_d=0;
local OPT_f=0;
local OPT_l=0;
local OPT_o=0;
local OPT_r=0;
local OPT_u=0;
local OPT_v=0;
OPTIND=1;
while getopts ":adfloruv" OPTFLAG; do
case ${OPTFLAG} in
a)
OPT_a='1'
;;
d)
OPT_d='1'
;;
f)
OPT_f='1'
;;
l)
OPT_l='1'
;;
o)
OPT_o='1'
;;
r)
OPT_r='1'
;;
u)
OPT_u='1'
;;
v)
OPT_v='1'
;;
\?)
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1
;;
esac;
done;
shift $((${OPTIND} - 1));
tjmop -f no_package 2>/dev/null;
shswop | sort -u | sed -e 's;-\([0-9]\);\t\1;' >${tempfile1};
cat /tmp/tjmop_cache?.tmp | grep -Ev '^openpkg-[0-9].*\.src\.sh$' | sed -e 's/\.src\.rpm$//' | sort -u | sed -e 's;-\([0-9]\);\t\1;' | grep -v -f /home/openpkg_customizations/tjm_openpkg/tjmop_swinstall_openpkg_excludes.dat >${tempfile2};
join -j 1 -o 1.1,2.1,1.2,2.2 -e "*No_Match*" -a 1 ${tempfile1} ${tempfile2} | while read pkgID1 pkgID2 pkgver1 pkgver2; do
if [ "${pkgver1}" = "${pkgver2}" ]; then
return_status=0;
else
tjmcompare_versions "${pkgver1}" "${pkgver2}";
return_status=${?};
if [ "${OPT_o}" = '1' ]; then
if [ "${return_status}" = '2' ]; then
:;
else
return_status=0;
fi;
else
if [ "${return_status}" = '1' ]; then
:;
else
return_status=0;
fi;
fi;
fi;
pkgver_norel1="${pkgver1%-*}";
pkgver_norel2="${pkgver2%-*}";
if [ "${OPT_a}" = '1' -a "${pkgID2}" != '*No_Match*' ]; then
return_status=0;
else
if [ "${OPT_u}" = '1' -a "${pkgID2}" = '*No_Match*' ]; then
return_status=0;
else
if [ "${OPT_r}" = '1' ]; then
if [ "${pkgver_norel1}" != "${pkgver_norel2}" -o "${pkgID2}" = '*No_Match*' ]; then
return_status=0;
fi;
else
if [ "${OPT_v}" = '1' ]; then
if [ "${pkgver_norel1}" = "${pkgver_norel2}" -o "${pkgID2}" = '*No_Match*' ]; then
return_status=0;
fi;
fi;
fi;
fi;
fi;
if [ "${return_status}" != '0' ]; then
if [ "${OPT_f}" = '1' ]; then
echo "tjmop -fr ${pkgID1} # Upgrade from ${pkgver1} to ${pkgver2}";
else
if [ "${OPT_d}" = '1' -o "${OPT_l}" = '1' ]; then
echo "${pkgID1}";
else
echo "${pkgID1} ${pkgver1} ${pkgver2} ${return_status}";
fi;
fi;
fi;
done | if [ "${OPT_d}" = '1' ]; then
tr '\n' '|' | sed -e 's@|$@\n@';
else
if [ "${OPT_f}" = '1' -o "${OPT_l}" = '1' ]; then
cat;
else
nawk '
BEGIN {
printf "%17-s %21-s %21-s %20-s\n\n","Package","Installed","Available","Only Release Differs"
}
{
pkgID=$1
#if(pkgID == "*No_Match*") pkgID=$2
#pkgver1=$3
#pkgver2=$4
#vercompare=$5
pkgver1=$2
pkgver2=$3
vercompare=$4
pkgver1max=split(pkgver1,pkgver1array,"-")
pkgver2max=split(pkgver2,pkgver2array,"-")
if(pkgver1array[1] == pkgver2array[1]) {
only_release_differs="*New_Release_Only**"
}
else {
only_release_differs=""
}
#if(pkgver1 != pkgver2) printf "%17-s %21-s %21-s %20-s\n",pkgID,pkgver1,pkgver2,only_release_differs
# TJM 04/21/10 Do not list when installed version is newer than available version.
#if(vercompare == 1) printf "%17-s %21-s %21-s %20-s\n",pkgID,pkgver1,pkgver2,only_release_differs
printf "%17-s %21-s %21-s %20-s\n",pkgID,pkgver1,pkgver2,only_release_differs
#
}
';
fi;
fi;
rm ${tempfile1};
rm ${tempfile2};
return
}
_SERVER["tjmgethighseq"] => () { local FACILITY='tjmgethighseq';
local USAGE="${FACILITY} desired_name";
local desired_name="${1}";
local seq_num;
if [ "${desired_name}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
seq_num=$(ls -d ${desired_name}* 2>/dev/null | sed -ne "s;^${desired_name}\(_[0-9]\+\|\)$;0\1;p" | sed -e 's;^0_;;' | sort -nr | head -1);
echo "${seq_num}"
}
_SERVER["tjmoprediff_rpmnew"] => () { local FACILITY='tjmoprediff_rpmnew';
local USAGE="${FACILITY} full_path_to_openpkg_file";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local openpkg_vendor_file="${1}";
local dir_name;
local base_name;
local openpkg_file;
local backup_extension='.orig.bak';
local backup_filename;
if [ "${openpkg_vendor_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${openpkg_vendor_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_vendor_file}";
return 1;
fi;
dir_name=$(dirname ${openpkg_vendor_file});
base_name=$(basename ${openpkg_vendor_file});
openpkg_file=$(cd ${dir_name} && echo "${PWD}/${base_name}");
if [ -f ${openpkg_file}.rpmnew ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_file}.rpmnew";
return 1;
fi;
if [ -f ${openpkg_file}.orig.save ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_file}.orig.save";
return 1;
fi;
rm -f ${tempfile1};
tjmopkdiff3_merge ${openpkg_file}.orig.save ${openpkg_file} ${openpkg_file}.rpmnew ${tempfile1};
if [ -e ${tempfile1} ]; then
backup_filename="$(tjmgetudfn ${openpkg_file}${backup_extension})";
mv -i ${openpkg_file} ${backup_filename};
mv -i ${openpkg_file}.rpmnew ${openpkg_file}.orig.save;
mv -i ${tempfile1} ${openpkg_file};
fi
}
_SERVER["tjmopkdiff3_merge"] => () { local FACILITY='tjmopkdiff3_merge';
local USAGE="${FACILITY} base_original_vendor_file locally_customized_original_file vendor_changed_file [merged_output_file]";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local base_original_vendor_file="${1}";
local locally_customized_original_file="${2}";
local vendor_changed_file="${3}";
local merged_output_file="${4}";
if [ "${base_original_vendor_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${base_original_vendor_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${base_original_vendor_file}";
return 1;
fi;
if [ "${locally_customized_original_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${locally_customized_original_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${locally_customized_original_file}";
return 1;
fi;
if [ "${vendor_changed_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${vendor_changed_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${vendor_changed_file}";
return 1;
fi;
if [ "${merged_output_file}" = '' ]; then
merged_output_file="${vendor_changed_file}";
fi;
rm -f ${tempfile1};
kdiff3 -m ${base_original_vendor_file} ${locally_customized_original_file} ${vendor_changed_file} -o ${tempfile1};
if [ -e ${tempfile1} ]; then
if [ -f ${merged_output_file} ]; then
setpermlike ${merged_output_file} ${tempfile1};
else
setpermlike ${vendor_changed_file} ${tempfile1};
fi;
mv -i ${tempfile1} ${merged_output_file};
else
echo "No kdiff3 save detected--no changes made.";
return 1;
fi
}
_SERVER["tjmcustomize"] => () { local FACILITY='tjmcustomize';
local USAGE="${FACILITY} sourcedir destdir [filename]";
local sourcedir="${1%/}";
local destdir="${2%/}";
local filename="${3}";
local orig_save_extension='.orig.save';
local tempdir1="/tmp/${FACILITY}_${$}_1";
local highest_status;
local return_status;
set +f;
if [ "${sourcedir}" = '' -o "${destdir}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -d ${sourcedir} ]; then
:;
else
echo "${FACILITY}-E-NOEXISTS, directory does not exist: ${sourcedir}" 1>&2;
return 1;
fi;
if [ -d ${destdir} ]; then
:;
else
echo "${FACILITY}-E-NOEXISTS, directory does not exist: ${destdir}" 1>&2;
return 1;
fi;
if [ "${filename}" = '' ]; then
highest_status='0';
for filename in $(cd ${sourcedir} && find . | egrep -v '(\.orig$|tjmop_.*\.log|_TJMOLD|_NOINSTALL$|\.orig\.bak(_[0-9]+)*$)');
do
if [ "${filename}" = "." ]; then
:;
else
filename="${filename#./}";
tjmcustomizefile "${sourcedir}" "${destdir}" "${filename}";
return_status=${?};
if [ "${return_status}" -gt "${highest_status}" ]; then
highest_status="${return_status}";
fi;
fi;
done;
printf '\nChecking for *.rpm(new|orig|save) files in ${OPENPKG_ROOT}/etc... If any exist, please process them to avoid warning emails to root:\n';
( cd ${OPENPKG_ROOT}/etc;
find . -name '*.rpm*' ) | sed -e 's;^;\t;';
if [ "${highest_status}" != '0' ]; then
return ${highest_status};
fi;
else
tjmcustomizefile "${sourcedir}" "${destdir}" "${filename}";
fi
}
_SERVER["tjmopsvncust"] => () { local FACILITY='tjmopsvncust';
local USAGE="${FACILITY} relative_cust_path su_user svn_user svn_pw svncms_wc_filesystems_host_user_path";
local relative_cust_path="${1%/}";
local su_user="${2}";
local svn_user="${3}";
local svn_pw="${4}";
local svncms_wc_filesystems_host_user_path="${5}";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local reconcile_only_trigger_filename=reconcile.only;
local SVNCMS_ORIG_DIRNAME='orig';
local SVNCMS_CUST_DIRNAME='cust';
local return_status;
set +f;
if [ "${relative_cust_path}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ "${relative_cust_path}" = 'rootdir/home/openpkg' ]; then
echo "Checking for *.rpm(new|orig|save) files in ${OPENPKG_ROOT}/etc... They must be processed promptly to avoid warning emails to root.";
( highest_status='0';
cd ${OPENPKG_ROOT} && {
find etc -name '*.rpm*';
find .* -prune -name '.*.rpm*'
} | sed -e 's!^./!!' | while read cur_file; do
echo "${FACILITY}-I-PROCESSING, processing file: ${cur_file}" 1>&2;
fname="${cur_file%.*}";
ftype="${cur_file##*.}";
case "${ftype}" in
rpmsave)
if [ -e "${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/rootdir/home${OPENPKG_ROOT}/${fname}" ]; then
diff ${cur_file} ${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/rootdir/home${OPENPKG_ROOT}/${fname} >/dev/null 2>&1;
if [ ${?} = 0 ]; then
echo "${FACILITY}-I-RPMSAVE_DELETED, rpmsave deleted because it matches customized file: ${cur_file} " 1>&2;
rm ${cur_file};
return_status=${?};
else
echo "${FACILITY}-W-RPMSAVE_CUSTOM_DIFF, rpmsave and customized file are different. MANUALLY UPDATE SVNCMS'S CUSTOMIZED FILE, IF APPROPRIATE, AND DELETE THIS FILE: ${cur_file} " 1>&2;
return_status=1;
fi;
else
echo "${FACILITY}-W-RPMSAVE_WITH_NO_CUSTOM, rpmsave with no associated customized file. MANUALLY ADD SVNCMS'S CUSTOMIZED FILE, IF APPROPRIATE, AND DELETE THIS FILE: ${cur_file} " 1>&2;
return_status=1;
fi
;;
rpmnew)
if [ -e "${svncms_wc_filesystems_host_user_path}/${SVNCMS_ORIG_DIRNAME}/rootdir/home${OPENPKG_ROOT}/${fname}" ]; then
diff ${cur_file} ${svncms_wc_filesystems_host_user_path}/${SVNCMS_ORIG_DIRNAME}/rootdir/home${OPENPKG_ROOT}/${fname} >/dev/null 2>&1;
if [ ${?} = 0 ]; then
echo "${FACILITY}-I-RPMNEW_DELETED, rpmnew deleted because it matches original: ${cur_file} " 1>&2;
rm ${cur_file};
return_status=${?};
else
echo "${FACILITY}-W-RPMNEW_ORIGINAL_DIFF, rpmnew and original are different. MANUALLY UPDATE SVNCMS'S ORIGINAL, IF APPROPRIATE, AND DELETE THIS FILE: ${cur_file} " 1>&2;
return_status=1;
fi;
else
echo "${FACILITY}-W-RPMNEW_WITH_NO_ORIGINAL, rpmnew with no associated original file. MANUALLY ADD SVNCMS'S ORIGINAL FILE, IF APPROPRIATE, AND DELETE THIS FILE: ${cur_file} " 1>&2;
return_status=1;
fi
;;
*)
echo "${FACILITY}-E-UNKNOWN_RPM_FTYPE, unknown .rpm* file type: ${cur_file} " 1>&2;
return_status=1
;;
esac;
if [ "${return_status}" -gt "${highest_status}" ]; then
highest_status="${return_status}";
fi;
done;
exit ${highest_status} );
return_status=${?};
if [ "${return_status}" != '0' ]; then
return ${return_status};
fi;
fi;
( if [ ! -e "${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/${relative_cust_path}" ]; then
echo "${FACILITY}-I-NO_CUSTS, no customizations--svncms ${SVNCMS_CUST_DIRNAME} directory does not exist: ${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/${relative_cust_path}" 1>&2;
else
cd ${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/${relative_cust_path} || exit ${?};
if [ -e "${reconcile_only_trigger_filename}" ]; then
echo "${FACILITY}-W-RECONCILE_SKIP_ON_ACTIVE, reconcile is already active on path--skipping: path=${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/${relative_cust_path} info='$(cat ${reconcile_only_trigger_filename})'" 1>&2;
else
echo "Reconciling customizations with svncms for directory ${relative_cust_path}...";
echo "$(date +%EY%m%d%H%M%S) reconcile started by user $(whoami) pid ${$}" >${reconcile_only_trigger_filename};
svn add -q ${reconcile_only_trigger_filename};
svn commit --no-auth-cache --non-interactive --username "${svn_user}" --password "${svn_pw}" -m 'RECONCILE ONLY' ${reconcile_only_trigger_filename} >/dev/null 2>${tempfile1};
return_status=${?};
if [ "${return_status}" = '0' ]; then
echo "${FACILITY}-E-BAD_RTN_STATUS, svn commit for RECONCILE returned 0 instead of 1--unexpected result." 1>&2;
return_status=1;
else
return_status_precommit=$(sed -ne 's@^.*Commit blocked by pre-commit hook (exit code \([0-9]\+\)) with output:$@\1@p' < ${tempfile1} );
case "${return_status_precommit}" in
100)
return_status=0
;;
101)
grep -vE '^(svn: Commit failed .details follow.:|svn: Commit blocked by pre-commit hook .* with output:|%.*, returning status [0-9]+)$' ${tempfile1} 1>&2;
return_status=0
;;
102)
grep -vE '^(svn: Commit failed .details follow.:|svn: Commit blocked by pre-commit hook .* with output:|%.*, returning status [0-9]+)$' ${tempfile1} 1>&2;
return_status=${return_status_precommit}
;;
*)
cat ${tempfile1} 1>&2;
return_status=999
;;
esac;
fi;
svn revert -q ${reconcile_only_trigger_filename};
rm -f ${reconcile_only_trigger_filename};
exit ${return_status};
fi;
fi );
return_status=${?};
rm -f ${tempfile1};
return ${return_status}
}
_SERVER["tjmoprediff_rpmsave"] => () { local FACILITY='tjmoprediff_rpmsave';
local USAGE="${FACILITY} full_path_to_openpkg_file";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local openpkg_vendor_file="${1}";
local dir_name;
local base_name;
local openpkg_file;
local backup_extension='.orig.bak';
local backup_filename;
if [ "${openpkg_vendor_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${openpkg_vendor_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_vendor_file}";
return 1;
fi;
dir_name=$(dirname ${openpkg_vendor_file});
base_name=$(basename ${openpkg_vendor_file});
openpkg_file=$(cd ${dir_name} && echo "${PWD}/${base_name}");
if [ -f ${openpkg_file}.rpmsave ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_file}.rpmsave";
return 1;
fi;
if [ -f ${openpkg_file}.orig.save ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_file}.orig.save";
return 1;
fi;
rm -f ${tempfile1};
tjmopkdiff3_merge ${openpkg_file}.orig.save ${openpkg_file}.rpmsave ${openpkg_file} ${tempfile1};
if [ -e ${tempfile1} ]; then
backup_filename="$(tjmgetudfn ${openpkg_file}${backup_extension})";
mv -i ${openpkg_file}.rpmsave ${backup_filename};
mv -i ${openpkg_file} ${openpkg_file}.orig.save;
mv -i ${tempfile1} ${openpkg_file};
fi
}
_SERVER["tjmop"] => () { local FACILITY='tjmop';
local USAGE="${FACILITY} [-xfpctmblsdauvrzRkCeEV] [\"-U [URI_Prefix URI_Suffix]\"] [\"--{with|without}_xxx [yes|no]\"]... [--{any openpkg --switch}]... {package_id}";
local OPT_x=0;
local OPT_f=0;
local OPT_p=0;
local OPT_c=0;
local OPT_t=0;
local OPT_m=0;
local OPT_b=0;
local OPT_s=0;
local OPT_a=0;
local OPT_v=0;
local OPT_u=0;
local OPT_r=0;
local OPT_R=0;
local OPT_k=0;
local OPT_z=0;
local OPT_d=0;
local OPT_U=0;
local OPT_l=0;
local OPT_C=0;
local OPT_e=0;
local OPT_E=0;
local OPT_V=0;
local rpm_debug_sw='';
local ARG_dash='';
local ARG_force='';
local ARG_U='';
local PKGOPTCNT=0;
local package_id;
local swname;
local specfile;
local swname_filter;
local platform_filter;
local pkg_filter;
local pkg_build_dir;
local pkg_bin_file;
local curfilename;
local filenames_count;
local tempfile_prefix="/tmp/${FACILITY}_${$}_";
local cachefile_prefix="/tmp/${FACILITY}_";
local tjmop_all_status;
local tjmop_fetch_status='';
local tjmop_recustomize_src_status='';
local tjmop_recustomize_all_status='';
local tjmop_prepare_status='';
local tjmop_compile_status='';
local tjmop_test_status='';
local tjmop_makeinstall_status='';
local tjmop_binarypkg_status='';
local tjmop_listbinpkg_status='';
local tjmop_sourcepkg_status='';
local tjmop_delpkg_status='';
local tjmop_addpkg_status='';
local tjmop_updpkg_status='';
local tjmop_verpkg_status='';
local tjmop_highest_build_phase_status='0';
set +f;
OPTIND=1;
while getopts ":xfpctmblsdauvrzRk-:U:CeEV" OPTFLAG; do
case ${OPTFLAG} in
x)
OPT_x='1';
rpm_debug_sw=" -vv"
;;
C)
OPT_C='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
e)
OPT_e='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
E)
OPT_E='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
V)
OPT_V='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
f)
OPT_f='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
p)
OPT_p='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
c)
OPT_c='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
t)
OPT_t='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
m)
OPT_m='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
b)
OPT_b='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
l)
OPT_l='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
s)
OPT_s='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
a)
OPT_a='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
u)
OPT_u='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
r)
OPT_r='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
z)
OPT_z='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
R)
OPT_R='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
k)
OPT_k='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
d)
OPT_d='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
U)
OPT_U='1';
ARG_U="${OPTARG}"
;;
v)
OPT_v='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
-)
case ${OPTARG} in
with*)
ARG_dash="${ARG_dash} -D \"${OPTARG}\""
;;
force)
ARG_force=" --${OPTARG}"
;;
*)
ARG_dash="${ARG_dash} --${OPTARG}"
;;
esac
;;
\?)
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1
;;
esac;
done;
shift $((${OPTIND} - 1));
if [ "${PKGOPTCNT}" != '0' ]; then
if [ ${#} != '1' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
else
if [ "${OPT_U}" != '1' ]; then
echo "${FACILITY}-E-NOPKGACTION, no package action options specified: ${USAGE}" 1>&2;
return 1;
fi;
fi;
if [ "${OPT_x}" = '1' ]; then
set -xv;
else
set +xv;
fi;
package_id="${1}";
swname="${package_id%%-[0-9]*}";
if [ "${OPT_U}" = '1' ]; then
if [ "${ARG_U}" = '' ]; then
echo "${FACILITY}-I-INFO, OpenPKG source location is set to ${OPENPKG_SOURCE_URI_PREFIX}<my package>${OPENPKG_SOURCE_URI_SUFFIX}" 1>&2;
else
set -- ${ARG_U};
if [ ${#} != '2' ]; then
echo "${FACILITY}-E-INVURI, invalid URI syntax: ${USAGE}" 1>&2;
tjmop_finalize;
return 1;
else
export OPENPKG_SOURCE_URI_PREFIX="${1}";
export OPENPKG_SOURCE_URI_SUFFIX="${2}";
fi;
fi;
fi;
tjmop_build_phase f fetch || {
tjmop_finalize;
return ${?}
};
specfile='';
for curfilename in ${OPENPKG_ROOT}/RPM/SRC/${swname}/${swname}*.spec;
do
if [ -f ${curfilename} ]; then
if [ "${specfile}" = '' ]; then
specfile="${curfilename}";
else
echo "${FACILITY}-E-MULTSPEC, multiple spec files detected--cannot determine which one to use: " ${OPENPKG_ROOT}/RPM/SRC/${swname}/*.spec 1>&2;
tjmop_finalize;
return 1;
fi;
fi;
done;
case ${swname} in
config)
pkg_filter="${package_id}(-[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*)?"
;;
esvn)
pkg_filter="${package_id}(-[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*)?"
;;
ipfilter)
pkg_filter="(ipfilter-|ip_fil)[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
gcc3)
pkg_filter="(gcc3|gcc)-[3][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
gcc42)
pkg_filter="(gcc42|gcc)-[4][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
glib)
pkg_filter="glib-[1][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
glib2)
pkg_filter="(glib2|glib)-[2][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
gtk)
pkg_filter="(gtk[+]|gtk)-[1][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
gtk2)
pkg_filter="(gtk[+]|gtk2)-[2][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
mm_mod_auth_ldap)
pkg_filter="mm_mod_auth_ldap-*[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
mussh)
pkg_filter="${package_id}(-[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*)?"
;;
perl-[a-z]*)
pkg_filter="${package_id}-[0-9][0-9\.\-]*"
;;
php4)
pkg_filter="(php|php4)-[4][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
php5)
pkg_filter="(php|php5)-[5][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
php-jpgraph)
pkg_filter="(php-jpgraph|jpgraph)-[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
sqlite)
pkg_filter="(sqlite-src|sqlite)-[0-9][0-9\.\-]*.*"
;;
xz)
pkg_filter="(xz)-[0-9][0-9\.\-]*.*"
;;
"${package_id}")
case ${swname} in
apache)
swname_filter="(${swname}|httpd)"
;;
gcrypt)
swname_filter="(${swname}|libgcrypt)"
;;
gpg-error)
swname_filter="(${swname}|libgpg-error)"
;;
libpixman)
swname_filter="(${swname}|pixman)"
;;
libxml)
swname_filter="(${swname}|libxml2)"
;;
pkgconfig)
swname_filter="(${swname}|pkg-config)"
;;
png)
swname_filter="(${swname}|libpng)"
;;
python-setup)
swname_filter="(${swname}|setuptools)"
;;
pysvn-workbench)
swname_filter="(${swname}|WorkBench)"
;;
qt)
swname_filter="(${swname}|qt-x11-free)"
;;
qt4)
swname_filter="(${swname}|qt-(x11|everywhere)-opensource-src)"
;;
sasl)
swname_filter="(${swname}|cyrus-sasl)"
;;
snmp)
swname_filter="(${swname}|net-snmp)"
;;
tcpwrappers)
swname_filter="(${swname}|socket_wrappers)"
;;
tetex)
swname_filter="(${swname}|tetex-src)"
;;
xft)
swname_filter="(${swname}|libXft)"
;;
wx)
swname_filter="(${swname}|wxGTK|wxWidgets)"
;;
wxpython)
swname_filter="(${swname}|wxPython-src)"
;;
*)
swname_filter="${swname}"
;;
esac;
pkg_filter="${swname_filter}-[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
*)
pkg_filter="${package_id}.*"
;;
esac;
tjmop_build_phase r recustomize_src || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase p prepare || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase c compile || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase t test || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase m makeinstall || {
tjmop_finalize;
return ${?}
};
platform_filter="$(echo ${OPENPKG_PLATFORM} | sed -e 's;\.;\\.;g')";
pkg_bin_file=$(cd ${OPENPKG_ROOT}/RPM/PKG/ && find *.rpm -prune -type f 2>/dev/null | egrep "^${pkg_filter}\.${platform_filter}-openpkg\.rpm$");
filenames_count=$(echo "${pkg_bin_file}" | wc -w);
if [ ${filenames_count} -gt 1 ]; then
echo "${FACILITY}-E-DUPDIR, multiple binary files for specified package in directory ${OPENPKG_ROOT}/RPM/PKG--must select only one: ${pkg_bin_file}" 1>&2;
tjmop_finalize;
return 1;
fi;
tjmop_build_phase b binarypkg || {
tjmop_finalize;
return ${?}
};
pkg_bin_file=$(cd ${OPENPKG_ROOT}/RPM/PKG/ && find *.rpm -prune -type f 2>/dev/null | egrep "^${pkg_filter}\.${platform_filter}-openpkg\.rpm$");
filenames_count=$(echo "${pkg_bin_file}" | wc -w);
if [ ${filenames_count} -gt 1 ]; then
echo "${FACILITY}-E-DUPDIR, multiple binary files for specified package in directory ${OPENPKG_ROOT}/RPM/PKG--must select only one: ${pkg_bin_file}" 1>&2;
tjmop_finalize;
return 1;
fi;
tjmop_build_phase l listbinpkg || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase s sourcepkg || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase d delpkg || {
tjmop_finalize;
return ${?}
};
hash -r;
tjmop_build_phase a addpkg || {
tjmop_finalize;
return ${?}
};
hash -r;
tjmop_build_phase u updpkg || {
tjmop_finalize;
return ${?}
};
hash -r;
tjmop_build_phase v verpkg || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase z zap || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase R recustomize_all || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase k compare_src || {
tjmop_finalize;
return ${?}
};
if [ "${OPT_V}" = '1' ]; then
printf "Verify parsing: ";
printf "swname=%-17s" "${swname}";
printf "package_id=%-17s" "${package_id}";
printf "pkg_build_dir=%-25s" "${pkg_build_dir}";
printf "pkg_bin_file=%-s" "${pkg_bin_file}";
printf "\n";
fi;
tjmop_all_status=0;
if [ "${OPT_e}" = '1' ]; then
if [ "${tjmop_fetch_status}" '>' '0' -o "${tjmop_recustomize_src_status}" '>' '0' -o "${tjmop_prepare_status}" '>' '0' -o "${tjmop_compile_status}" '>' '0' -o "${tjmop_makeinstall_status}" '>' '0' -o "${tjmop_binarypkg_status}" '>' '0' -o "${tjmop_listbinpkg_status}" '>' '0' -o "${tjmop_sourcepkg_status}" '>' '0' -o "${tjmop_delpkg_status}" '>' '0' -o "${tjmop_addpkg_status}" '>' '0' -o "${tjmop_updpkg_status}" '>' '0' -o "${tjmop_recustomize_all_status}" '>' '0' -o '0' '>' '0' ]; then
tjmop_all_status=1;
fi;
fi;
if [ "${OPT_E}" = '1' ]; then
tjmop_all_status=1;
fi;
if [ "${tjmop_all_status}" = '1' ]; then
printf "Exit status: ";
printf "%-17s" "${swname}";
printf " fetch=%-1s" "${tjmop_fetch_status}";
printf " recustomize_src=%-1s" "${tjmop_recustomize_src_status}";
printf " prepare=%-1s" "${tjmop_prepare_status}";
printf " compile=%-1s" "${tjmop_compile_status}";
printf " test=%-1s" "${tjmop_test_status}";
printf " makeinstall=%-1s" "${tjmop_makeinstall_status}";
printf " binarypkg=%-1s" "${tjmop_binarypkg_status}";
printf " listbinpkg=%-1s" "${tjmop_listbinpkg_status}";
printf " sourcepkg=%-1s" "${tjmop_sourcepkg_status}";
printf " delpkg=%-1s" "${tjmop_delpkg_status}";
printf " addpkg=%-1s" "${tjmop_addpkg_status}";
printf " updpkg=%-1s" "${tjmop_updpkg_status}";
printf " verpkg=%-1s" "${tjmop_verpkg_status}";
printf " recustomize_all=%-1s" "${tjmop_recustomize_all_status}";
printf "\n";
fi;
tjmop_finalize;
find ${tempfile_prefix}cache*.tmp -prune -type f -mtime +1 -exec rm {} \; 2>/dev/null;
return 0
}
_SERVER["tjmopapplytjmsavecust"] => () { local FACILITY='tjmopapplytjmsavecust';
local USAGE="${FACILITY} full_path_to_customized_openpkg_file [customization_directory]";
local openpkg_customized_file="${1}";
local openpkg_cust_dir="${2}";
local prior_to_cust_suffix="_tjmsave";
local dir_name;
local base_name;
local openpkg_file;
local openpkg_file_prior_to_cust;
local openpkg_cust_root_def="/home/openpkg_customizations";
local backup_extension='.orig.bak';
local backup_filename;
if [ "${openpkg_customized_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${openpkg_customized_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_customized_file}";
return 1;
fi;
dir_name=$(dirname ${openpkg_customized_file});
base_name=$(basename ${openpkg_customized_file});
openpkg_file=$(cd ${dir_name} && echo "${PWD}/${base_name}");
openpkg_file_prior_to_cust="${openpkg_file}${prior_to_cust_suffix}";
if [ -f ${openpkg_file_prior_to_cust} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_file_prior_to_cust}";
return 1;
fi;
if [ "${openpkg_cust_dir}" = '' ]; then
openpkg_cust_dir="${openpkg_cust_root_def}${dir_name}";
fi;
openpkg_cust_dir="${openpkg_cust_dir%/}";
if [ -d ${openpkg_cust_dir} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, customization directory does not exist: ${openpkg_cust_dir}";
return 1;
fi;
if [ -f ${openpkg_cust_dir}/${base_name} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_cust_dir}/${base_name}";
return 1;
fi;
diff ${openpkg_file_prior_to_cust} ${openpkg_cust_dir}/${base_name} >/dev/null 2>&1;
if [ ${?} != 0 ]; then
echo "${FACILITY}-F-DIFFERENT, file prior to customization and file in the customization directory differ--changes shown here:" 1>&2;
diff ${openpkg_file_prior_to_cust} ${openpkg_cust_dir}/${base_name} | sed -e "$(echo -e 's;^;\t;')";
return 1;
fi;
backup_filename="$(tjmgetudfn ${openpkg_cust_dir}/${base_name}${backup_extension})" && mv ${openpkg_cust_dir}/${base_name} ${backup_filename} && mv ${openpkg_file} ${openpkg_cust_dir}/${base_name} && mv ${openpkg_file_prior_to_cust} ${openpkg_file} && echo -e "${FACILITY}-I-CUSTAPPLIED, applied customized file ${openpkg_file} to ${openpkg_cust_dir}/${base_name}, previous version saved. These changes were applied:" 1>&2 && diff ${openpkg_cust_dir}/${base_name} ${backup_filename} | sed -e "$(echo -e 's;^;\t;')"
}
_SERVER["diffpermfile"] => () { local sourcedir="${1}";
local destdir="${2}";
local dirorfile="${3}";
local difflist;
local perm;
local owner_id;
local group_id;
local perm2;
local owner_id2;
local group_id2;
find ${sourcedir}/${dirorfile} ${FIND_LS} -prune | sed -e 's;^ *[^ ]* *[^ ]* \(..........\) *[^ ]* \(.........\)\(.........\) *[^ ]* [A-Z].. .. ....[0-9] \([^ ]*\)\( -> .*\)*$;\1 \2 \3;' | while read perm owner_id group_id; do
if [ -e ${destdir}/${dirorfile} ]; then
find ${destdir}/${dirorfile} ${FIND_LS} -prune | sed -e 's;^ *[^ ]* *[^ ]* \(..........\) *[^ ]* \(.........\)\(.........\) *[^ ]* [A-Z].. .. ....[0-9] \([^ ]*\)\( -> .*\)*$;\1 \2 \3;' | while read perm2 owner_id2 group_id2; do
perm_formatted=$(echo "${perm}" |
nawk '
{
mod_owner=substr($1,2,3)
mod_group=substr($1,5,3)
mod_other=substr($1,8,3)
gsub("-", "", mod_owner)
gsub("-", "", mod_group)
gsub("-", "", mod_other)
print "u=" mod_owner ",g=" mod_group ",o=" mod_other
}
'
);
difflist="";
if [ "${perm}" != "${perm2}" ]; then
difflist="${difflist}P";
fi;
if [ "${owner_id}" != "${owner_id2}" ]; then
difflist="${difflist}O";
fi;
if [ "${group_id}" != "${group_id2}" ]; then
difflist="${difflist}G";
fi;
if [ "${difflist}" != '' -a "${perm}" = "${perm##l*}" -a "${perm2}" = "${perm2##l*}" ]; then
printf "\n";
printf "Permissions differ (%s). Execute the commands below to correct:\n" $difflist;
printf "%-10s %-9s %-9s %-10s %-9s %-9s " ${perm} ${owner_id} ${group_id} ${perm2} ${owner_id2} ${group_id2};
printf "f=%-70s; chmod %s \$f; chown %s:%s \$f" ${destdir}/$dirorfile ${perm_formatted} ${owner_id} ${group_id};
printf "\n";
printf "\n";
fi;
done;
fi;
done
}
_SERVER["tjmopdo"] => () { local FACILITY='tjmopdo';
local USAGE="${FACILITY} swlist_file swname_RSE tjmop_switches tjmop_package_options";
local swlist_file;
local swname_RSE;
local tjmop_switches;
local tjmop_options;
local swname;
local reverse_cmd;
local return_status;
set +f;
swlist_file="${1}";
shift;
swname_RSE="${1}";
shift;
tjmop_switches="${1}";
shift;
tjmop_options="${*}";
if [ -f ${swlist_file} ]; then
:;
else
echo "${FACILITY}-E-FNF, file not found: ${swlist_file}" 1>&2;
return 1;
fi;
if [ "${tjmop_switches}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ "${tjmop_switches}" = "-d" -o "${tjmop_switches}" = "-dC" -o "${tjmop_switches}" = "-Cd" -o "${tjmop_switches}" = "-dCS" ]; then
reverse_cmd="revlines";
else
reverse_cmd="cat";
fi;
grep -E "^${swname_RSE}([[:space:]]|$)" ${swlist_file} | eval "${reverse_cmd}" | while read package_id package_options; do
if [ "${package_id###*}" = '' ]; then
:;
else
swname="${package_id%%-[0-9]*}";
printf "Doing %-17s %-25s %s\n" "${swname}" "${package_id}" "${package_options}" 1>&2;
eval "tjmop ${tjmop_switches} ${tjmop_options} ${package_options} ${swname}" </dev/null;
return_status=${?};
if [ "${return_status}" = "130" -o "${build_phase_cur_status}" = "999" ]; then
echo "${FACILITY}-F-STOP, stopping due to previous error" 1>&2;
return ${return_status};
fi;
fi;
done
}
_SERVER["tjmgetudfn"] => () { local FACILITY='tjmgetudfn';
local USAGE="${FACILITY} desired_name";
local desired_name="${1}";
local unique_name;
local seq_num;
if [ "${desired_name}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
seq_num=$(tjmgethighseq "${desired_name}");
if [ "${seq_num}" = '' ]; then
unique_name="${desired_name}";
else
unique_name="${desired_name}_$((${seq_num} + 1))";
fi;
echo "${unique_name}"
}
_SERVER["tjmoprediff"] => () { local FACILITY='tjmoprediff';
local USAGE="${FACILITY} full_path_to_openpkg_file [customization_directory]";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local openpkg_vendor_file="${1}";
local openpkg_cust_dir="${2}";
local dir_name;
local base_name;
local openpkg_file;
local openpkg_cust_root_def="/home/openpkg_customizations";
if [ "${openpkg_vendor_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${openpkg_vendor_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_vendor_file}";
return 1;
fi;
dir_name=$(dirname ${openpkg_vendor_file});
base_name=$(basename ${openpkg_vendor_file});
openpkg_file=$(cd ${dir_name} && echo "${PWD}/${base_name}");
if [ "${openpkg_cust_dir}" = '' ]; then
openpkg_cust_dir="${openpkg_cust_root_def}${dir_name}";
fi;
openpkg_cust_dir="${openpkg_cust_dir%/}";
if [ -d ${openpkg_cust_dir} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, customization directory does not exist: ${openpkg_cust_dir}";
return 1;
fi;
if [ -f ${openpkg_cust_dir}/${base_name}.orig.save ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_cust_dir}/${base_name}.orig.save";
return 1;
fi;
if [ -f ${openpkg_cust_dir}/${base_name} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_cust_dir}/${base_name}";
return 1;
fi;
if [ -e ${openpkg_file}.rpmsave ]; then
diff ${openpkg_cust_dir}/${base_name} ${openpkg_file}.rpmsave >/dev/null 2>&1;
if [ ${?} = 0 ]; then
rm ${openpkg_file}.rpmsave;
else
echo -e "${openpkg_file}.rpmsave exists. Use tjmoprediff_rpmsave to retain customizations.";
return 1;
fi;
fi;
if [ -e ${openpkg_file}.rpmnew ]; then
echo -e "${openpkg_file}.rpmnew exists. Use tjmoprediff_rpmnew to retain customizations.";
return 1;
fi;
rm -f ${tempfile1};
tjmopkdiff3_merge ${openpkg_cust_dir}/${base_name}.orig.save ${openpkg_cust_dir}/${base_name} ${openpkg_file} ${tempfile1};
if [ -e ${tempfile1} ]; then
mv -i ${openpkg_file} ${openpkg_file}.orig.save;
mv -i ${tempfile1} ${openpkg_file};
cp -ip ${openpkg_file}.orig.save ${openpkg_cust_dir}/${base_name}.orig.save;
cp -ip ${openpkg_file} ${openpkg_cust_dir}/${base_name};
fi
}
_SERVER["PHP_SELF"] =>
_SERVER["SCRIPT_NAME"] =>
_SERVER["SCRIPT_FILENAME"] =>
_SERVER["PATH_TRANSLATED"] =>
_SERVER["DOCUMENT_ROOT"] =>
_SERVER["REQUEST_TIME_FLOAT"] => 1332860169.5047
_SERVER["REQUEST_TIME"] => 1332860169
_SERVER["argv"] => Array
(
)
_SERVER["argc"] => 0
_ENV["MANPATH"] => /openpkg/man:/openpkg/local/man::/usr/share/man
_ENV["OPENPKG_PKGGROUP"] => opkg
_ENV["M4"] => /openpkg/bin/m4
_ENV["TEST_PHP_SRCDIR"] => /openpkg/RPM/TMP/php-5.4.0
_ENV["OPENPKG_PKGUSER"] => opkg
_ENV["SHELL"] => /openpkg/lib/openpkg/bash
_ENV["TERM"] => vt220
_ENV["MAKEFLAGS"] =>
_ENV["OPENPKG_DOWNLOAD_CURL_FILTER"] => grep 'class="file"' | sed -e 's!.*td valign!!;s!img .*!!;s!.*href!!;s!.*"\(.*\)".*!\1!'
_ENV["SSH_CLIENT"] => deleted
_ENV["TMPDIR"] => /tmp
_ENV["OPENPKG_SOURCE_URI_SUFFIX"] => -${OPENPKG_TAG}.src.rpm
_ENV["SSH_TTY"] => deleted
_ENV["OPENPKG_ROOT"] => /openpkg
_ENV["USER"] => opkg
_ENV["LD_LIBRARY_PATH"] => /openpkg/lib:/openpkg/local/lib::/lib:/usr/lib
_ENV["SSH_AUTH_SOCK"] => deleted
_ENV["OPENPKG_TAG"] => ${OPENPKG_REL}.${OPENPKG_SUBREL}
_ENV["MAKELEVEL"] => 1
_ENV["OPENPKG_REL"] => 2.5
_ENV["MFLAGS"] =>
_ENV["PATH"] => /openpkg/bin:/openpkg/sbin:/openpkg/local/bin:/openpkg/local/sbin:/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/ucb
_ENV["_"] => /openpkg/RPM/TMP/php-5.4.0/sapi/cli/php
_ENV["LC_COLLATE"] => C
_ENV["BLOCKSIZE"] => 1024
_ENV["OPENPKG_PLATFORM"] => ix86-rhel4
_ENV["PWD"] => /openpkg/RPM/TMP/php-5.4.0
_ENV["TEST_PHP_EXECUTABLE"] => /openpkg/RPM/TMP/php-5.4.0/sapi/cli/php
_ENV["OPENPKG_DOWNLOAD_URL_PREFIX"] => http://download.openpkg.org
_ENV["HOME"] => /openpkg
_ENV["SHLVL"] => 3
_ENV["OPENPKG_SUBREL"] => 1
_ENV["LOGNAME"] => opkg
_ENV["SSH_CONNECTION"] => deleted
_ENV["OPENPKG_DOWNLOAD_CURL_USER_PW"] => -u 804941a8-0525-11df-8345-000e0c4e71a6:anypw
_ENV["INFOPATH"] => /openpkg/info:/openpkg/local/info::/usr/share/info
_ENV["DISPLAY"] => localhost:10.0
_ENV["CC"] => /openpkg/bin/gcc
_ENV["OPENPKG_SOURCE_URI_PREFIX"] => http://download.openpkg.org/packages/current/source/
_ENV["setpermlike"] => () { local FACILITY='setpermlike';
local USAGE="${FACILITY} Permissions_Source_Filespec Permissions_Destination_Filespec";
local permsource_file="${1}";
local permdest_file="${2}";
set +f;
if [ "${permsource_file}" = '' -o "${permdest_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
set -f;
ls -ald ${permsource_file} | head -1 | nawk -v filename=${permdest_file} '
{
#mod_dir=substr($1,1,1)
mod_owner=substr($1,2,3)
mod_group=substr($1,5,3)
mod_other=substr($1,8,3)
#gsub("-", "", mod_dir)
gsub("-", "", mod_owner)
gsub("-", "", mod_group)
gsub("-", "", mod_other)
owner_id=$3
group_id=$4
chmod_cmd="chmod u=" mod_owner ",g=" mod_group ",o=" mod_other " " filename
chown_cmd="chown " $3 ":" $4 " " filename
#print chmod_cmd
system(chmod_cmd)
#print chown_cmd
system(chown_cmd)
}
';
set +f;
return
}
_ENV["tarcopy"] => () { local sourcedir="${1}";
local destdir="${2}";
local dirorfile="${3}";
if [ "${sourcedir}" = '' ]; then
echo "sourcedir not specified: ${sourcedir}";
return 1;
fi;
if [ "${destdir}" = '' ]; then
echo "destdir not specified: ${destdir}";
return 1;
fi;
if [ "${dirorfile}" = '' ]; then
echo "dirorfile not specified";
return 1;
fi;
if [ "${sourcedir}" = "${destdir}" ]; then
echo "destdir must not be same as sourcedir";
return 1;
fi;
if [ -d ${sourcedir} ]; then
:;
else
echo "sourcedir does not exist: ${sourcedir}";
return 1;
fi;
if [ -d ${destdir} ]; then
:;
else
echo "destdir does not exist: ${destdir}";
return 1;
fi;
if [ -e ${sourcedir}/${dirorfile} ]; then
:;
else
echo "sourcedir/dirorfile does not exist: ${sourcedir}/${dirorfile}";
return 1;
fi;
( cd ${sourcedir} && tar -cf - ${dirorfile} ) | ( cd ${destdir} && tar -xf - )
}
_ENV["shswopnew"] => () { local FACILITY='shswopnew';
local USAGE="${FACILITY} [-adfloruv]";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local tempfile2="/tmp/${FACILITY}_${$}_2.tmp";
local tracefile1;
local tracefile2;
local joinoutput;
local OPT_a=0;
local OPT_d=0;
local OPT_f=0;
local OPT_l=0;
local OPT_o=0;
local OPT_r=0;
local OPT_u=0;
local OPT_v=0;
OPTIND=1;
while getopts ":adfloruv" OPTFLAG; do
case ${OPTFLAG} in
a)
OPT_a='1'
;;
d)
OPT_d='1'
;;
f)
OPT_f='1'
;;
l)
OPT_l='1'
;;
o)
OPT_o='1'
;;
r)
OPT_r='1'
;;
u)
OPT_u='1'
;;
v)
OPT_v='1'
;;
\?)
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1
;;
esac;
done;
shift $((${OPTIND} - 1));
tjmop -f no_package 2>/dev/null;
shswop | sort -u | sed -e 's;-\([0-9]\);\t\1;' >${tempfile1};
cat /tmp/tjmop_cache?.tmp | grep -Ev '^openpkg-[0-9].*\.src\.sh$' | sed -e 's/\.src\.rpm$//' | sort -u | sed -e 's;-\([0-9]\);\t\1;' | grep -v -f /home/openpkg_customizations/tjm_openpkg/tjmop_swinstall_openpkg_excludes.dat >${tempfile2};
join -j 1 -o 1.1,2.1,1.2,2.2 -e "*No_Match*" -a 1 ${tempfile1} ${tempfile2} | while read pkgID1 pkgID2 pkgver1 pkgver2; do
if [ "${pkgver1}" = "${pkgver2}" ]; then
return_status=0;
else
tjmcompare_versions "${pkgver1}" "${pkgver2}";
return_status=${?};
if [ "${OPT_o}" = '1' ]; then
if [ "${return_status}" = '2' ]; then
:;
else
return_status=0;
fi;
else
if [ "${return_status}" = '1' ]; then
:;
else
return_status=0;
fi;
fi;
fi;
pkgver_norel1="${pkgver1%-*}";
pkgver_norel2="${pkgver2%-*}";
if [ "${OPT_a}" = '1' -a "${pkgID2}" != '*No_Match*' ]; then
return_status=0;
else
if [ "${OPT_u}" = '1' -a "${pkgID2}" = '*No_Match*' ]; then
return_status=0;
else
if [ "${OPT_r}" = '1' ]; then
if [ "${pkgver_norel1}" != "${pkgver_norel2}" -o "${pkgID2}" = '*No_Match*' ]; then
return_status=0;
fi;
else
if [ "${OPT_v}" = '1' ]; then
if [ "${pkgver_norel1}" = "${pkgver_norel2}" -o "${pkgID2}" = '*No_Match*' ]; then
return_status=0;
fi;
fi;
fi;
fi;
fi;
if [ "${return_status}" != '0' ]; then
if [ "${OPT_f}" = '1' ]; then
echo "tjmop -fr ${pkgID1} # Upgrade from ${pkgver1} to ${pkgver2}";
else
if [ "${OPT_d}" = '1' -o "${OPT_l}" = '1' ]; then
echo "${pkgID1}";
else
echo "${pkgID1} ${pkgver1} ${pkgver2} ${return_status}";
fi;
fi;
fi;
done | if [ "${OPT_d}" = '1' ]; then
tr '\n' '|' | sed -e 's@|$@\n@';
else
if [ "${OPT_f}" = '1' -o "${OPT_l}" = '1' ]; then
cat;
else
nawk '
BEGIN {
printf "%17-s %21-s %21-s %20-s\n\n","Package","Installed","Available","Only Release Differs"
}
{
pkgID=$1
#if(pkgID == "*No_Match*") pkgID=$2
#pkgver1=$3
#pkgver2=$4
#vercompare=$5
pkgver1=$2
pkgver2=$3
vercompare=$4
pkgver1max=split(pkgver1,pkgver1array,"-")
pkgver2max=split(pkgver2,pkgver2array,"-")
if(pkgver1array[1] == pkgver2array[1]) {
only_release_differs="*New_Release_Only**"
}
else {
only_release_differs=""
}
#if(pkgver1 != pkgver2) printf "%17-s %21-s %21-s %20-s\n",pkgID,pkgver1,pkgver2,only_release_differs
# TJM 04/21/10 Do not list when installed version is newer than available version.
#if(vercompare == 1) printf "%17-s %21-s %21-s %20-s\n",pkgID,pkgver1,pkgver2,only_release_differs
printf "%17-s %21-s %21-s %20-s\n",pkgID,pkgver1,pkgver2,only_release_differs
#
}
';
fi;
fi;
rm ${tempfile1};
rm ${tempfile2};
return
}
_ENV["tjmgethighseq"] => () { local FACILITY='tjmgethighseq';
local USAGE="${FACILITY} desired_name";
local desired_name="${1}";
local seq_num;
if [ "${desired_name}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
seq_num=$(ls -d ${desired_name}* 2>/dev/null | sed -ne "s;^${desired_name}\(_[0-9]\+\|\)$;0\1;p" | sed -e 's;^0_;;' | sort -nr | head -1);
echo "${seq_num}"
}
_ENV["tjmoprediff_rpmnew"] => () { local FACILITY='tjmoprediff_rpmnew';
local USAGE="${FACILITY} full_path_to_openpkg_file";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local openpkg_vendor_file="${1}";
local dir_name;
local base_name;
local openpkg_file;
local backup_extension='.orig.bak';
local backup_filename;
if [ "${openpkg_vendor_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${openpkg_vendor_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_vendor_file}";
return 1;
fi;
dir_name=$(dirname ${openpkg_vendor_file});
base_name=$(basename ${openpkg_vendor_file});
openpkg_file=$(cd ${dir_name} && echo "${PWD}/${base_name}");
if [ -f ${openpkg_file}.rpmnew ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_file}.rpmnew";
return 1;
fi;
if [ -f ${openpkg_file}.orig.save ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_file}.orig.save";
return 1;
fi;
rm -f ${tempfile1};
tjmopkdiff3_merge ${openpkg_file}.orig.save ${openpkg_file} ${openpkg_file}.rpmnew ${tempfile1};
if [ -e ${tempfile1} ]; then
backup_filename="$(tjmgetudfn ${openpkg_file}${backup_extension})";
mv -i ${openpkg_file} ${backup_filename};
mv -i ${openpkg_file}.rpmnew ${openpkg_file}.orig.save;
mv -i ${tempfile1} ${openpkg_file};
fi
}
_ENV["tjmopkdiff3_merge"] => () { local FACILITY='tjmopkdiff3_merge';
local USAGE="${FACILITY} base_original_vendor_file locally_customized_original_file vendor_changed_file [merged_output_file]";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local base_original_vendor_file="${1}";
local locally_customized_original_file="${2}";
local vendor_changed_file="${3}";
local merged_output_file="${4}";
if [ "${base_original_vendor_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${base_original_vendor_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${base_original_vendor_file}";
return 1;
fi;
if [ "${locally_customized_original_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${locally_customized_original_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${locally_customized_original_file}";
return 1;
fi;
if [ "${vendor_changed_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${vendor_changed_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${vendor_changed_file}";
return 1;
fi;
if [ "${merged_output_file}" = '' ]; then
merged_output_file="${vendor_changed_file}";
fi;
rm -f ${tempfile1};
kdiff3 -m ${base_original_vendor_file} ${locally_customized_original_file} ${vendor_changed_file} -o ${tempfile1};
if [ -e ${tempfile1} ]; then
if [ -f ${merged_output_file} ]; then
setpermlike ${merged_output_file} ${tempfile1};
else
setpermlike ${vendor_changed_file} ${tempfile1};
fi;
mv -i ${tempfile1} ${merged_output_file};
else
echo "No kdiff3 save detected--no changes made.";
return 1;
fi
}
_ENV["tjmcustomize"] => () { local FACILITY='tjmcustomize';
local USAGE="${FACILITY} sourcedir destdir [filename]";
local sourcedir="${1%/}";
local destdir="${2%/}";
local filename="${3}";
local orig_save_extension='.orig.save';
local tempdir1="/tmp/${FACILITY}_${$}_1";
local highest_status;
local return_status;
set +f;
if [ "${sourcedir}" = '' -o "${destdir}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -d ${sourcedir} ]; then
:;
else
echo "${FACILITY}-E-NOEXISTS, directory does not exist: ${sourcedir}" 1>&2;
return 1;
fi;
if [ -d ${destdir} ]; then
:;
else
echo "${FACILITY}-E-NOEXISTS, directory does not exist: ${destdir}" 1>&2;
return 1;
fi;
if [ "${filename}" = '' ]; then
highest_status='0';
for filename in $(cd ${sourcedir} && find . | egrep -v '(\.orig$|tjmop_.*\.log|_TJMOLD|_NOINSTALL$|\.orig\.bak(_[0-9]+)*$)');
do
if [ "${filename}" = "." ]; then
:;
else
filename="${filename#./}";
tjmcustomizefile "${sourcedir}" "${destdir}" "${filename}";
return_status=${?};
if [ "${return_status}" -gt "${highest_status}" ]; then
highest_status="${return_status}";
fi;
fi;
done;
printf '\nChecking for *.rpm(new|orig|save) files in ${OPENPKG_ROOT}/etc... If any exist, please process them to avoid warning emails to root:\n';
( cd ${OPENPKG_ROOT}/etc;
find . -name '*.rpm*' ) | sed -e 's;^;\t;';
if [ "${highest_status}" != '0' ]; then
return ${highest_status};
fi;
else
tjmcustomizefile "${sourcedir}" "${destdir}" "${filename}";
fi
}
_ENV["tjmopsvncust"] => () { local FACILITY='tjmopsvncust';
local USAGE="${FACILITY} relative_cust_path su_user svn_user svn_pw svncms_wc_filesystems_host_user_path";
local relative_cust_path="${1%/}";
local su_user="${2}";
local svn_user="${3}";
local svn_pw="${4}";
local svncms_wc_filesystems_host_user_path="${5}";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local reconcile_only_trigger_filename=reconcile.only;
local SVNCMS_ORIG_DIRNAME='orig';
local SVNCMS_CUST_DIRNAME='cust';
local return_status;
set +f;
if [ "${relative_cust_path}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ "${relative_cust_path}" = 'rootdir/home/openpkg' ]; then
echo "Checking for *.rpm(new|orig|save) files in ${OPENPKG_ROOT}/etc... They must be processed promptly to avoid warning emails to root.";
( highest_status='0';
cd ${OPENPKG_ROOT} && {
find etc -name '*.rpm*';
find .* -prune -name '.*.rpm*'
} | sed -e 's!^./!!' | while read cur_file; do
echo "${FACILITY}-I-PROCESSING, processing file: ${cur_file}" 1>&2;
fname="${cur_file%.*}";
ftype="${cur_file##*.}";
case "${ftype}" in
rpmsave)
if [ -e "${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/rootdir/home${OPENPKG_ROOT}/${fname}" ]; then
diff ${cur_file} ${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/rootdir/home${OPENPKG_ROOT}/${fname} >/dev/null 2>&1;
if [ ${?} = 0 ]; then
echo "${FACILITY}-I-RPMSAVE_DELETED, rpmsave deleted because it matches customized file: ${cur_file} " 1>&2;
rm ${cur_file};
return_status=${?};
else
echo "${FACILITY}-W-RPMSAVE_CUSTOM_DIFF, rpmsave and customized file are different. MANUALLY UPDATE SVNCMS'S CUSTOMIZED FILE, IF APPROPRIATE, AND DELETE THIS FILE: ${cur_file} " 1>&2;
return_status=1;
fi;
else
echo "${FACILITY}-W-RPMSAVE_WITH_NO_CUSTOM, rpmsave with no associated customized file. MANUALLY ADD SVNCMS'S CUSTOMIZED FILE, IF APPROPRIATE, AND DELETE THIS FILE: ${cur_file} " 1>&2;
return_status=1;
fi
;;
rpmnew)
if [ -e "${svncms_wc_filesystems_host_user_path}/${SVNCMS_ORIG_DIRNAME}/rootdir/home${OPENPKG_ROOT}/${fname}" ]; then
diff ${cur_file} ${svncms_wc_filesystems_host_user_path}/${SVNCMS_ORIG_DIRNAME}/rootdir/home${OPENPKG_ROOT}/${fname} >/dev/null 2>&1;
if [ ${?} = 0 ]; then
echo "${FACILITY}-I-RPMNEW_DELETED, rpmnew deleted because it matches original: ${cur_file} " 1>&2;
rm ${cur_file};
return_status=${?};
else
echo "${FACILITY}-W-RPMNEW_ORIGINAL_DIFF, rpmnew and original are different. MANUALLY UPDATE SVNCMS'S ORIGINAL, IF APPROPRIATE, AND DELETE THIS FILE: ${cur_file} " 1>&2;
return_status=1;
fi;
else
echo "${FACILITY}-W-RPMNEW_WITH_NO_ORIGINAL, rpmnew with no associated original file. MANUALLY ADD SVNCMS'S ORIGINAL FILE, IF APPROPRIATE, AND DELETE THIS FILE: ${cur_file} " 1>&2;
return_status=1;
fi
;;
*)
echo "${FACILITY}-E-UNKNOWN_RPM_FTYPE, unknown .rpm* file type: ${cur_file} " 1>&2;
return_status=1
;;
esac;
if [ "${return_status}" -gt "${highest_status}" ]; then
highest_status="${return_status}";
fi;
done;
exit ${highest_status} );
return_status=${?};
if [ "${return_status}" != '0' ]; then
return ${return_status};
fi;
fi;
( if [ ! -e "${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/${relative_cust_path}" ]; then
echo "${FACILITY}-I-NO_CUSTS, no customizations--svncms ${SVNCMS_CUST_DIRNAME} directory does not exist: ${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/${relative_cust_path}" 1>&2;
else
cd ${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/${relative_cust_path} || exit ${?};
if [ -e "${reconcile_only_trigger_filename}" ]; then
echo "${FACILITY}-W-RECONCILE_SKIP_ON_ACTIVE, reconcile is already active on path--skipping: path=${svncms_wc_filesystems_host_user_path}/${SVNCMS_CUST_DIRNAME}/${relative_cust_path} info='$(cat ${reconcile_only_trigger_filename})'" 1>&2;
else
echo "Reconciling customizations with svncms for directory ${relative_cust_path}...";
echo "$(date +%EY%m%d%H%M%S) reconcile started by user $(whoami) pid ${$}" >${reconcile_only_trigger_filename};
svn add -q ${reconcile_only_trigger_filename};
svn commit --no-auth-cache --non-interactive --username "${svn_user}" --password "${svn_pw}" -m 'RECONCILE ONLY' ${reconcile_only_trigger_filename} >/dev/null 2>${tempfile1};
return_status=${?};
if [ "${return_status}" = '0' ]; then
echo "${FACILITY}-E-BAD_RTN_STATUS, svn commit for RECONCILE returned 0 instead of 1--unexpected result." 1>&2;
return_status=1;
else
return_status_precommit=$(sed -ne 's@^.*Commit blocked by pre-commit hook (exit code \([0-9]\+\)) with output:$@\1@p' < ${tempfile1} );
case "${return_status_precommit}" in
100)
return_status=0
;;
101)
grep -vE '^(svn: Commit failed .details follow.:|svn: Commit blocked by pre-commit hook .* with output:|%.*, returning status [0-9]+)$' ${tempfile1} 1>&2;
return_status=0
;;
102)
grep -vE '^(svn: Commit failed .details follow.:|svn: Commit blocked by pre-commit hook .* with output:|%.*, returning status [0-9]+)$' ${tempfile1} 1>&2;
return_status=${return_status_precommit}
;;
*)
cat ${tempfile1} 1>&2;
return_status=999
;;
esac;
fi;
svn revert -q ${reconcile_only_trigger_filename};
rm -f ${reconcile_only_trigger_filename};
exit ${return_status};
fi;
fi );
return_status=${?};
rm -f ${tempfile1};
return ${return_status}
}
_ENV["tjmoprediff_rpmsave"] => () { local FACILITY='tjmoprediff_rpmsave';
local USAGE="${FACILITY} full_path_to_openpkg_file";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local openpkg_vendor_file="${1}";
local dir_name;
local base_name;
local openpkg_file;
local backup_extension='.orig.bak';
local backup_filename;
if [ "${openpkg_vendor_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${openpkg_vendor_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_vendor_file}";
return 1;
fi;
dir_name=$(dirname ${openpkg_vendor_file});
base_name=$(basename ${openpkg_vendor_file});
openpkg_file=$(cd ${dir_name} && echo "${PWD}/${base_name}");
if [ -f ${openpkg_file}.rpmsave ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_file}.rpmsave";
return 1;
fi;
if [ -f ${openpkg_file}.orig.save ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_file}.orig.save";
return 1;
fi;
rm -f ${tempfile1};
tjmopkdiff3_merge ${openpkg_file}.orig.save ${openpkg_file}.rpmsave ${openpkg_file} ${tempfile1};
if [ -e ${tempfile1} ]; then
backup_filename="$(tjmgetudfn ${openpkg_file}${backup_extension})";
mv -i ${openpkg_file}.rpmsave ${backup_filename};
mv -i ${openpkg_file} ${openpkg_file}.orig.save;
mv -i ${tempfile1} ${openpkg_file};
fi
}
_ENV["tjmop"] => () { local FACILITY='tjmop';
local USAGE="${FACILITY} [-xfpctmblsdauvrzRkCeEV] [\"-U [URI_Prefix URI_Suffix]\"] [\"--{with|without}_xxx [yes|no]\"]... [--{any openpkg --switch}]... {package_id}";
local OPT_x=0;
local OPT_f=0;
local OPT_p=0;
local OPT_c=0;
local OPT_t=0;
local OPT_m=0;
local OPT_b=0;
local OPT_s=0;
local OPT_a=0;
local OPT_v=0;
local OPT_u=0;
local OPT_r=0;
local OPT_R=0;
local OPT_k=0;
local OPT_z=0;
local OPT_d=0;
local OPT_U=0;
local OPT_l=0;
local OPT_C=0;
local OPT_e=0;
local OPT_E=0;
local OPT_V=0;
local rpm_debug_sw='';
local ARG_dash='';
local ARG_force='';
local ARG_U='';
local PKGOPTCNT=0;
local package_id;
local swname;
local specfile;
local swname_filter;
local platform_filter;
local pkg_filter;
local pkg_build_dir;
local pkg_bin_file;
local curfilename;
local filenames_count;
local tempfile_prefix="/tmp/${FACILITY}_${$}_";
local cachefile_prefix="/tmp/${FACILITY}_";
local tjmop_all_status;
local tjmop_fetch_status='';
local tjmop_recustomize_src_status='';
local tjmop_recustomize_all_status='';
local tjmop_prepare_status='';
local tjmop_compile_status='';
local tjmop_test_status='';
local tjmop_makeinstall_status='';
local tjmop_binarypkg_status='';
local tjmop_listbinpkg_status='';
local tjmop_sourcepkg_status='';
local tjmop_delpkg_status='';
local tjmop_addpkg_status='';
local tjmop_updpkg_status='';
local tjmop_verpkg_status='';
local tjmop_highest_build_phase_status='0';
set +f;
OPTIND=1;
while getopts ":xfpctmblsdauvrzRk-:U:CeEV" OPTFLAG; do
case ${OPTFLAG} in
x)
OPT_x='1';
rpm_debug_sw=" -vv"
;;
C)
OPT_C='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
e)
OPT_e='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
E)
OPT_E='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
V)
OPT_V='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
f)
OPT_f='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
p)
OPT_p='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
c)
OPT_c='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
t)
OPT_t='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
m)
OPT_m='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
b)
OPT_b='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
l)
OPT_l='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
s)
OPT_s='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
a)
OPT_a='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
u)
OPT_u='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
r)
OPT_r='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
z)
OPT_z='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
R)
OPT_R='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
k)
OPT_k='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
d)
OPT_d='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
U)
OPT_U='1';
ARG_U="${OPTARG}"
;;
v)
OPT_v='1';
PKGOPTCNT=$((${PKGOPTCNT} + 1))
;;
-)
case ${OPTARG} in
with*)
ARG_dash="${ARG_dash} -D \"${OPTARG}\""
;;
force)
ARG_force=" --${OPTARG}"
;;
*)
ARG_dash="${ARG_dash} --${OPTARG}"
;;
esac
;;
\?)
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1
;;
esac;
done;
shift $((${OPTIND} - 1));
if [ "${PKGOPTCNT}" != '0' ]; then
if [ ${#} != '1' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
else
if [ "${OPT_U}" != '1' ]; then
echo "${FACILITY}-E-NOPKGACTION, no package action options specified: ${USAGE}" 1>&2;
return 1;
fi;
fi;
if [ "${OPT_x}" = '1' ]; then
set -xv;
else
set +xv;
fi;
package_id="${1}";
swname="${package_id%%-[0-9]*}";
if [ "${OPT_U}" = '1' ]; then
if [ "${ARG_U}" = '' ]; then
echo "${FACILITY}-I-INFO, OpenPKG source location is set to ${OPENPKG_SOURCE_URI_PREFIX}<my package>${OPENPKG_SOURCE_URI_SUFFIX}" 1>&2;
else
set -- ${ARG_U};
if [ ${#} != '2' ]; then
echo "${FACILITY}-E-INVURI, invalid URI syntax: ${USAGE}" 1>&2;
tjmop_finalize;
return 1;
else
export OPENPKG_SOURCE_URI_PREFIX="${1}";
export OPENPKG_SOURCE_URI_SUFFIX="${2}";
fi;
fi;
fi;
tjmop_build_phase f fetch || {
tjmop_finalize;
return ${?}
};
specfile='';
for curfilename in ${OPENPKG_ROOT}/RPM/SRC/${swname}/${swname}*.spec;
do
if [ -f ${curfilename} ]; then
if [ "${specfile}" = '' ]; then
specfile="${curfilename}";
else
echo "${FACILITY}-E-MULTSPEC, multiple spec files detected--cannot determine which one to use: " ${OPENPKG_ROOT}/RPM/SRC/${swname}/*.spec 1>&2;
tjmop_finalize;
return 1;
fi;
fi;
done;
case ${swname} in
config)
pkg_filter="${package_id}(-[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*)?"
;;
esvn)
pkg_filter="${package_id}(-[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*)?"
;;
ipfilter)
pkg_filter="(ipfilter-|ip_fil)[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
gcc3)
pkg_filter="(gcc3|gcc)-[3][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
gcc42)
pkg_filter="(gcc42|gcc)-[4][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
glib)
pkg_filter="glib-[1][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
glib2)
pkg_filter="(glib2|glib)-[2][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
gtk)
pkg_filter="(gtk[+]|gtk)-[1][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
gtk2)
pkg_filter="(gtk[+]|gtk2)-[2][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
mm_mod_auth_ldap)
pkg_filter="mm_mod_auth_ldap-*[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
mussh)
pkg_filter="${package_id}(-[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*)?"
;;
perl-[a-z]*)
pkg_filter="${package_id}-[0-9][0-9\.\-]*"
;;
php4)
pkg_filter="(php|php4)-[4][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
php5)
pkg_filter="(php|php5)-[5][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
php-jpgraph)
pkg_filter="(php-jpgraph|jpgraph)-[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
sqlite)
pkg_filter="(sqlite-src|sqlite)-[0-9][0-9\.\-]*.*"
;;
xz)
pkg_filter="(xz)-[0-9][0-9\.\-]*.*"
;;
"${package_id}")
case ${swname} in
apache)
swname_filter="(${swname}|httpd)"
;;
gcrypt)
swname_filter="(${swname}|libgcrypt)"
;;
gpg-error)
swname_filter="(${swname}|libgpg-error)"
;;
libpixman)
swname_filter="(${swname}|pixman)"
;;
libxml)
swname_filter="(${swname}|libxml2)"
;;
pkgconfig)
swname_filter="(${swname}|pkg-config)"
;;
png)
swname_filter="(${swname}|libpng)"
;;
python-setup)
swname_filter="(${swname}|setuptools)"
;;
pysvn-workbench)
swname_filter="(${swname}|WorkBench)"
;;
qt)
swname_filter="(${swname}|qt-x11-free)"
;;
qt4)
swname_filter="(${swname}|qt-(x11|everywhere)-opensource-src)"
;;
sasl)
swname_filter="(${swname}|cyrus-sasl)"
;;
snmp)
swname_filter="(${swname}|net-snmp)"
;;
tcpwrappers)
swname_filter="(${swname}|socket_wrappers)"
;;
tetex)
swname_filter="(${swname}|tetex-src)"
;;
xft)
swname_filter="(${swname}|libXft)"
;;
wx)
swname_filter="(${swname}|wxGTK|wxWidgets)"
;;
wxpython)
swname_filter="(${swname}|wxPython-src)"
;;
*)
swname_filter="${swname}"
;;
esac;
pkg_filter="${swname_filter}-[0-9][0-9\.\-]*[a-z]*[0-9\.\-]*"
;;
*)
pkg_filter="${package_id}.*"
;;
esac;
tjmop_build_phase r recustomize_src || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase p prepare || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase c compile || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase t test || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase m makeinstall || {
tjmop_finalize;
return ${?}
};
platform_filter="$(echo ${OPENPKG_PLATFORM} | sed -e 's;\.;\\.;g')";
pkg_bin_file=$(cd ${OPENPKG_ROOT}/RPM/PKG/ && find *.rpm -prune -type f 2>/dev/null | egrep "^${pkg_filter}\.${platform_filter}-openpkg\.rpm$");
filenames_count=$(echo "${pkg_bin_file}" | wc -w);
if [ ${filenames_count} -gt 1 ]; then
echo "${FACILITY}-E-DUPDIR, multiple binary files for specified package in directory ${OPENPKG_ROOT}/RPM/PKG--must select only one: ${pkg_bin_file}" 1>&2;
tjmop_finalize;
return 1;
fi;
tjmop_build_phase b binarypkg || {
tjmop_finalize;
return ${?}
};
pkg_bin_file=$(cd ${OPENPKG_ROOT}/RPM/PKG/ && find *.rpm -prune -type f 2>/dev/null | egrep "^${pkg_filter}\.${platform_filter}-openpkg\.rpm$");
filenames_count=$(echo "${pkg_bin_file}" | wc -w);
if [ ${filenames_count} -gt 1 ]; then
echo "${FACILITY}-E-DUPDIR, multiple binary files for specified package in directory ${OPENPKG_ROOT}/RPM/PKG--must select only one: ${pkg_bin_file}" 1>&2;
tjmop_finalize;
return 1;
fi;
tjmop_build_phase l listbinpkg || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase s sourcepkg || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase d delpkg || {
tjmop_finalize;
return ${?}
};
hash -r;
tjmop_build_phase a addpkg || {
tjmop_finalize;
return ${?}
};
hash -r;
tjmop_build_phase u updpkg || {
tjmop_finalize;
return ${?}
};
hash -r;
tjmop_build_phase v verpkg || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase z zap || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase R recustomize_all || {
tjmop_finalize;
return ${?}
};
tjmop_build_phase k compare_src || {
tjmop_finalize;
return ${?}
};
if [ "${OPT_V}" = '1' ]; then
printf "Verify parsing: ";
printf "swname=%-17s" "${swname}";
printf "package_id=%-17s" "${package_id}";
printf "pkg_build_dir=%-25s" "${pkg_build_dir}";
printf "pkg_bin_file=%-s" "${pkg_bin_file}";
printf "\n";
fi;
tjmop_all_status=0;
if [ "${OPT_e}" = '1' ]; then
if [ "${tjmop_fetch_status}" '>' '0' -o "${tjmop_recustomize_src_status}" '>' '0' -o "${tjmop_prepare_status}" '>' '0' -o "${tjmop_compile_status}" '>' '0' -o "${tjmop_makeinstall_status}" '>' '0' -o "${tjmop_binarypkg_status}" '>' '0' -o "${tjmop_listbinpkg_status}" '>' '0' -o "${tjmop_sourcepkg_status}" '>' '0' -o "${tjmop_delpkg_status}" '>' '0' -o "${tjmop_addpkg_status}" '>' '0' -o "${tjmop_updpkg_status}" '>' '0' -o "${tjmop_recustomize_all_status}" '>' '0' -o '0' '>' '0' ]; then
tjmop_all_status=1;
fi;
fi;
if [ "${OPT_E}" = '1' ]; then
tjmop_all_status=1;
fi;
if [ "${tjmop_all_status}" = '1' ]; then
printf "Exit status: ";
printf "%-17s" "${swname}";
printf " fetch=%-1s" "${tjmop_fetch_status}";
printf " recustomize_src=%-1s" "${tjmop_recustomize_src_status}";
printf " prepare=%-1s" "${tjmop_prepare_status}";
printf " compile=%-1s" "${tjmop_compile_status}";
printf " test=%-1s" "${tjmop_test_status}";
printf " makeinstall=%-1s" "${tjmop_makeinstall_status}";
printf " binarypkg=%-1s" "${tjmop_binarypkg_status}";
printf " listbinpkg=%-1s" "${tjmop_listbinpkg_status}";
printf " sourcepkg=%-1s" "${tjmop_sourcepkg_status}";
printf " delpkg=%-1s" "${tjmop_delpkg_status}";
printf " addpkg=%-1s" "${tjmop_addpkg_status}";
printf " updpkg=%-1s" "${tjmop_updpkg_status}";
printf " verpkg=%-1s" "${tjmop_verpkg_status}";
printf " recustomize_all=%-1s" "${tjmop_recustomize_all_status}";
printf "\n";
fi;
tjmop_finalize;
find ${tempfile_prefix}cache*.tmp -prune -type f -mtime +1 -exec rm {} \; 2>/dev/null;
return 0
}
_ENV["tjmopapplytjmsavecust"] => () { local FACILITY='tjmopapplytjmsavecust';
local USAGE="${FACILITY} full_path_to_customized_openpkg_file [customization_directory]";
local openpkg_customized_file="${1}";
local openpkg_cust_dir="${2}";
local prior_to_cust_suffix="_tjmsave";
local dir_name;
local base_name;
local openpkg_file;
local openpkg_file_prior_to_cust;
local openpkg_cust_root_def="/home/openpkg_customizations";
local backup_extension='.orig.bak';
local backup_filename;
if [ "${openpkg_customized_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${openpkg_customized_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_customized_file}";
return 1;
fi;
dir_name=$(dirname ${openpkg_customized_file});
base_name=$(basename ${openpkg_customized_file});
openpkg_file=$(cd ${dir_name} && echo "${PWD}/${base_name}");
openpkg_file_prior_to_cust="${openpkg_file}${prior_to_cust_suffix}";
if [ -f ${openpkg_file_prior_to_cust} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_file_prior_to_cust}";
return 1;
fi;
if [ "${openpkg_cust_dir}" = '' ]; then
openpkg_cust_dir="${openpkg_cust_root_def}${dir_name}";
fi;
openpkg_cust_dir="${openpkg_cust_dir%/}";
if [ -d ${openpkg_cust_dir} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, customization directory does not exist: ${openpkg_cust_dir}";
return 1;
fi;
if [ -f ${openpkg_cust_dir}/${base_name} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_cust_dir}/${base_name}";
return 1;
fi;
diff ${openpkg_file_prior_to_cust} ${openpkg_cust_dir}/${base_name} >/dev/null 2>&1;
if [ ${?} != 0 ]; then
echo "${FACILITY}-F-DIFFERENT, file prior to customization and file in the customization directory differ--changes shown here:" 1>&2;
diff ${openpkg_file_prior_to_cust} ${openpkg_cust_dir}/${base_name} | sed -e "$(echo -e 's;^;\t;')";
return 1;
fi;
backup_filename="$(tjmgetudfn ${openpkg_cust_dir}/${base_name}${backup_extension})" && mv ${openpkg_cust_dir}/${base_name} ${backup_filename} && mv ${openpkg_file} ${openpkg_cust_dir}/${base_name} && mv ${openpkg_file_prior_to_cust} ${openpkg_file} && echo -e "${FACILITY}-I-CUSTAPPLIED, applied customized file ${openpkg_file} to ${openpkg_cust_dir}/${base_name}, previous version saved. These changes were applied:" 1>&2 && diff ${openpkg_cust_dir}/${base_name} ${backup_filename} | sed -e "$(echo -e 's;^;\t;')"
}
_ENV["diffpermfile"] => () { local sourcedir="${1}";
local destdir="${2}";
local dirorfile="${3}";
local difflist;
local perm;
local owner_id;
local group_id;
local perm2;
local owner_id2;
local group_id2;
find ${sourcedir}/${dirorfile} ${FIND_LS} -prune | sed -e 's;^ *[^ ]* *[^ ]* \(..........\) *[^ ]* \(.........\)\(.........\) *[^ ]* [A-Z].. .. ....[0-9] \([^ ]*\)\( -> .*\)*$;\1 \2 \3;' | while read perm owner_id group_id; do
if [ -e ${destdir}/${dirorfile} ]; then
find ${destdir}/${dirorfile} ${FIND_LS} -prune | sed -e 's;^ *[^ ]* *[^ ]* \(..........\) *[^ ]* \(.........\)\(.........\) *[^ ]* [A-Z].. .. ....[0-9] \([^ ]*\)\( -> .*\)*$;\1 \2 \3;' | while read perm2 owner_id2 group_id2; do
perm_formatted=$(echo "${perm}" |
nawk '
{
mod_owner=substr($1,2,3)
mod_group=substr($1,5,3)
mod_other=substr($1,8,3)
gsub("-", "", mod_owner)
gsub("-", "", mod_group)
gsub("-", "", mod_other)
print "u=" mod_owner ",g=" mod_group ",o=" mod_other
}
'
);
difflist="";
if [ "${perm}" != "${perm2}" ]; then
difflist="${difflist}P";
fi;
if [ "${owner_id}" != "${owner_id2}" ]; then
difflist="${difflist}O";
fi;
if [ "${group_id}" != "${group_id2}" ]; then
difflist="${difflist}G";
fi;
if [ "${difflist}" != '' -a "${perm}" = "${perm##l*}" -a "${perm2}" = "${perm2##l*}" ]; then
printf "\n";
printf "Permissions differ (%s). Execute the commands below to correct:\n" $difflist;
printf "%-10s %-9s %-9s %-10s %-9s %-9s " ${perm} ${owner_id} ${group_id} ${perm2} ${owner_id2} ${group_id2};
printf "f=%-70s; chmod %s \$f; chown %s:%s \$f" ${destdir}/$dirorfile ${perm_formatted} ${owner_id} ${group_id};
printf "\n";
printf "\n";
fi;
done;
fi;
done
}
_ENV["tjmopdo"] => () { local FACILITY='tjmopdo';
local USAGE="${FACILITY} swlist_file swname_RSE tjmop_switches tjmop_package_options";
local swlist_file;
local swname_RSE;
local tjmop_switches;
local tjmop_options;
local swname;
local reverse_cmd;
local return_status;
set +f;
swlist_file="${1}";
shift;
swname_RSE="${1}";
shift;
tjmop_switches="${1}";
shift;
tjmop_options="${*}";
if [ -f ${swlist_file} ]; then
:;
else
echo "${FACILITY}-E-FNF, file not found: ${swlist_file}" 1>&2;
return 1;
fi;
if [ "${tjmop_switches}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ "${tjmop_switches}" = "-d" -o "${tjmop_switches}" = "-dC" -o "${tjmop_switches}" = "-Cd" -o "${tjmop_switches}" = "-dCS" ]; then
reverse_cmd="revlines";
else
reverse_cmd="cat";
fi;
grep -E "^${swname_RSE}([[:space:]]|$)" ${swlist_file} | eval "${reverse_cmd}" | while read package_id package_options; do
if [ "${package_id###*}" = '' ]; then
:;
else
swname="${package_id%%-[0-9]*}";
printf "Doing %-17s %-25s %s\n" "${swname}" "${package_id}" "${package_options}" 1>&2;
eval "tjmop ${tjmop_switches} ${tjmop_options} ${package_options} ${swname}" </dev/null;
return_status=${?};
if [ "${return_status}" = "130" -o "${build_phase_cur_status}" = "999" ]; then
echo "${FACILITY}-F-STOP, stopping due to previous error" 1>&2;
return ${return_status};
fi;
fi;
done
}
_ENV["tjmgetudfn"] => () { local FACILITY='tjmgetudfn';
local USAGE="${FACILITY} desired_name";
local desired_name="${1}";
local unique_name;
local seq_num;
if [ "${desired_name}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
seq_num=$(tjmgethighseq "${desired_name}");
if [ "${seq_num}" = '' ]; then
unique_name="${desired_name}";
else
unique_name="${desired_name}_$((${seq_num} + 1))";
fi;
echo "${unique_name}"
}
_ENV["tjmoprediff"] => () { local FACILITY='tjmoprediff';
local USAGE="${FACILITY} full_path_to_openpkg_file [customization_directory]";
local tempfile1="/tmp/${FACILITY}_${$}_1.tmp";
local openpkg_vendor_file="${1}";
local openpkg_cust_dir="${2}";
local dir_name;
local base_name;
local openpkg_file;
local openpkg_cust_root_def="/home/openpkg_customizations";
if [ "${openpkg_vendor_file}" = '' ]; then
echo "${FACILITY}-E-SYNTAX, invalid syntax: ${USAGE}" 1>&2;
return 1;
fi;
if [ -f ${openpkg_vendor_file} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_vendor_file}";
return 1;
fi;
dir_name=$(dirname ${openpkg_vendor_file});
base_name=$(basename ${openpkg_vendor_file});
openpkg_file=$(cd ${dir_name} && echo "${PWD}/${base_name}");
if [ "${openpkg_cust_dir}" = '' ]; then
openpkg_cust_dir="${openpkg_cust_root_def}${dir_name}";
fi;
openpkg_cust_dir="${openpkg_cust_dir%/}";
if [ -d ${openpkg_cust_dir} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, customization directory does not exist: ${openpkg_cust_dir}";
return 1;
fi;
if [ -f ${openpkg_cust_dir}/${base_name}.orig.save ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_cust_dir}/${base_name}.orig.save";
return 1;
fi;
if [ -f ${openpkg_cust_dir}/${base_name} ]; then
:;
else
echo "${FACILITY}-F-NOEXISTS, file does not exist: ${openpkg_cust_dir}/${base_name}";
return 1;
fi;
if [ -e ${openpkg_file}.rpmsave ]; then
diff ${openpkg_cust_dir}/${base_name} ${openpkg_file}.rpmsave >/dev/null 2>&1;
if [ ${?} = 0 ]; then
rm ${openpkg_file}.rpmsave;
else
echo -e "${openpkg_file}.rpmsave exists. Use tjmoprediff_rpmsave to retain customizations.";
return 1;
fi;
fi;
if [ -e ${openpkg_file}.rpmnew ]; then
echo -e "${openpkg_file}.rpmnew exists. Use tjmoprediff_rpmnew to retain customizations.";
return 1;
fi;
rm -f ${tempfile1};
tjmopkdiff3_merge ${openpkg_cust_dir}/${base_name}.orig.save ${openpkg_cust_dir}/${base_name} ${openpkg_file} ${tempfile1};
if [ -e ${tempfile1} ]; then
mv -i ${openpkg_file} ${openpkg_file}.orig.save;
mv -i ${tempfile1} ${openpkg_file};
cp -ip ${openpkg_file}.orig.save ${openpkg_cust_dir}/${base_name}.orig.save;
cp -ip ${openpkg_file} ${openpkg_cust_dir}/${base_name};
fi
}
PHP License
This program is free software; you can redistribute it and/or modify
it under the terms of the PHP License as published by the PHP Group
and included in the distribution in the file: LICENSE
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
If you did not receive a copy of the PHP license, or have any
questions about PHP licensing, please contact license@php.net.
Build environment
OS:
Linux - Linux mee-v3 2.6.9-103.ELsmp #1 SMP Fri Nov 11 14:34:02 EST 2011 i686
Autoconf:
autoconf (GNU Autoconf) 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+/Autoconf: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by David J. MacKenzie and Akim Demaille.
Bundled Libtool:
ltmain.sh (GNU libtool) 1.5.26 (1.1220.2.492 2008/01/30 06:40:56)
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
System Libtool:
libtool (GNU libtool) 2.4.2
Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compiler:
Using built-in specs.
COLLECT_GCC=/openpkg/bin/gcc
COLLECT_LTO_WRAPPER=/home/openpkg/bin/../libexec/gcc/gcc/i686-pc-linux-gnu/4.6.3/lto-wrapper
Target: i686-pc-linux-gnu
Configured with: ../configure --with-bugurl=http://openpkg.org/ --with-pkgversion=OpenPKG-CURRENT --cache-file=./config.cache --srcdir=/openpkg/RPM/TMP/gcc-4.6.3/obj/.. --prefix=/openpkg --exec-prefix=/openpkg --mandir=/openpkg/man --infodir=/openpkg/info --includedir=/openpkg/include/gcc --libexecdir=/openpkg/libexec/gcc --with-gxx-include-dir=/openpkg/include/g++ --with-local-prefix=/openpkg/lib/gcc --enable-languages=c,c++,f95 --enable-threads=posix --disable-maintainer-mode --disable-shared --disable-nls --disable-multilib --with-libiconv-prefix=/openpkg --with-gmp=/openpkg --with-mpfr=/openpkg --with-mpc=/openpkg --with-ld=/openpkg/bin/ld --with-as=/openpkg/bin/as --with-gnu-ld --with-gnu-as
Thread model: posix
gcc version 4.6.3 (OpenPKG-CURRENT)
Bison:
bison (GNU Bison) 2.5
Written by Robert Corbett and Richard Stallman.
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Libraries:
libcrypt.so.1 => /lib/libcrypt.so.1 (0x00708000)
libresolv.so.2 => /lib/libresolv.so.2 (0x00977000)
librt.so.1 => /lib/tls/librt.so.1 (0x002a9000)
libdl.so.2 => /lib/libdl.so.2 (0x009ae000)
libnsl.so.1 => /lib/libnsl.so.1 (0x00111000)
libm.so.6 => /lib/tls/libm.so.6 (0x00630000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00fe7000)
libc.so.6 => /lib/tls/libc.so.6 (0x00128000)
/lib/ld-linux.so.2 (0x00b9c000)
User's E-mail: