Browse Source

Clifford Wolf:


			
			
				rocklinux
			
			
		
Clifford Wolf 21 years ago
parent
commit
e9afc43e42
12 changed files with 387 additions and 63 deletions
  1. +257
    -0
      misc/tools-source/config_helper.c
  2. +1
    -0
      package/base/dietlibc/config-350.in
  3. +4
    -0
      package/base/gcc3/config-300.in
  4. +1
    -1
      package/base/linux24/config-500.in
  5. +1
    -1
      package/base/lprng/config.in
  6. +1
    -0
      package/base/sendmail/config.in
  7. +1
    -1
      package/gnome14/gtk+12/config.in
  8. +1
    -0
      package/mnemoc/boehm-gc/subconfig-libs.in
  9. +1
    -0
      package/rene/apache/config.in
  10. +26
    -7
      scripts/Config
  11. +89
    -48
      scripts/config.func
  12. +4
    -5
      scripts/config.in

+ 257
- 0
misc/tools-source/config_helper.c

@ -0,0 +1,257 @@
/* Bash (wallclock-time) profiler. Written by Clifford Wolf.
*
* Usage:
* gcc -shared -fPIC -Wall -o config_helper.so config_helper.c
* enable -f ./config_helper.so cfghlp
*
* Note: This builtin trusts that it is called correctly. If it is
* called the wrong way, segfaults etc. are possible.
*/
/* Some declarations copied from bash-2.05b headers */
#include <stdint.h>
typedef struct word_desc {
char *word;
int flags;
} WORD_DESC;
typedef struct word_list {
struct word_list *next;
WORD_DESC *word;
} WORD_LIST;
typedef int sh_builtin_func_t(WORD_LIST *);
#define BUILTIN_ENABLED 0x1
struct builtin {
char *name;
sh_builtin_func_t *function;
int flags;
char * const *long_doc;
const char *short_doc;
char *handle;
};
/* my hellobash builtin */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/time.h>
struct package;
struct package {
int status;
int stages[10];
char *prio;
char *repository;
char *name;
char *alias;
char *version;
char *prefix;
char *flags;
struct package *next;
};
struct package *package_list = 0;
int read_pkg_list(const char *file) {
FILE *f = fopen(file, "r");
struct package *pkg = package_list;
struct package *pkg_tmp;
char line[1024], *tok;
int i;
while (pkg) {
free(pkg->prio);
free(pkg->repository);
free(pkg->name);
free(pkg->alias);
free(pkg->version);
free(pkg->prefix);
free(pkg->flags);
pkg = (pkg_tmp=pkg)->next;
free(pkg_tmp);
}
pkg = package_list = 0;
while (fgets(line, 1024, f)) {
pkg_tmp = calloc(1, sizeof(struct package));
tok = strtok(line, " ");
pkg_tmp->status = line[0] == 'X';
tok = strtok(0, " ");
for (i=0; i<10; i++)
pkg_tmp->stages[i] = tok[i] != '-';
tok = strtok(0, " ");
pkg_tmp->prio = strdup(tok);
tok = strtok(0, " ");
pkg_tmp->repository = strdup(tok);
tok = strtok(0, " ");
pkg_tmp->name = strdup(tok);
pkg_tmp->alias = strdup(tok);
tok = strtok(0, " ");
pkg_tmp->version = strdup(tok);
tok = strtok(0, " ");
pkg_tmp->prefix = strdup(tok);
tok = strtok(0, "\n");
tok[strlen(tok)-2] = 0;
pkg_tmp->flags = strdup(tok);
if ( !package_list )
pkg=package_list=pkg_tmp;
else
pkg=pkg->next=pkg_tmp;
}
fclose(f);
return 0;
}
int write_pkg_list(const char *file) {
FILE *f = fopen(file, "w");
struct package *pkg = package_list;
int i;
while (pkg) {
fprintf(f, "%c ", pkg->status ? 'X' : 'O');
for (i=0; i<10; i++)
fprintf(f, "%c", pkg->stages[i] ? '0'+i : '-');
fprintf(f, " %s %s %s", pkg->prio, pkg->repository, pkg->name);
if (strcmp(pkg->name, pkg->alias))
fprintf(f, "=%s", pkg->alias);
fprintf(f, " %s %s %s 0\n", pkg->version, pkg->prefix, pkg->flags);
pkg = pkg->next;
}
fclose(f);
return 0;
}
int pkgcheck(const char *pattern, const char *mode)
{
struct package *pkg = package_list;
char *pattern_copy = strdup(pattern);
char *pat_list[10];
int i;
pat_list[0] = strtok(pattern_copy, "|");
for (i=1; i<10; i++)
if ( !(pat_list[1] = strtok(0, "|")) ) break;
while (pkg) {
for (i=0; i<10 && pat_list[i]; i++)
if (!strcmp(pkg->alias, pat_list[i]))
switch (mode[0]) {
case 'X':
if (pkg->status) goto found;
break;
case 'O':
if (!pkg->status) goto found;
break;
case '.':
goto found;
}
pkg = pkg->next;
}
free(pattern_copy);
return 1;
found:
free(pattern_copy);
return 0;
}
int pkgswitch(int mode, char **args)
{
struct package *pkg = package_list;
struct package *last_pkg = 0;
struct package *pkg_tmp = 0;
int i;
while (pkg) {
for (i=0; *args[i]; i++)
if (!strcmp(pkg->alias, args[i])) {
if ( !mode ) {
*(last_pkg ? &(last_pkg->next) : &package_list) = pkg->next;
free(pkg->prio);
free(pkg->repository);
free(pkg->name);
free(pkg->alias);
free(pkg->version);
free(pkg->prefix);
free(pkg->flags);
pkg = (pkg_tmp=pkg)->next;
free(pkg_tmp);
continue;
} else
pkg->status = mode == 1;
}
pkg = (last_pkg=pkg)->next;
}
return 0;
}
int cfghlp_builtin(WORD_LIST *list)
{
char *args[10];
int i;
for (i=0; i<10 && list; i++) {
args[i] = list->word->word;
list = list->next;
}
for (; i<10 && list; i++)
args[i] = "";
if (!strcmp(args[0],"pkg_in"))
return read_pkg_list(args[1]);
if (!strcmp(args[0],"pkg_out"))
return write_pkg_list(args[1]);
if (!strcmp(args[0],"pkgcheck"))
return pkgcheck(args[1], args[2]);
if (!strcmp(args[0],"pkgremove"))
return pkgswitch(0, args+1);
if (!strcmp(args[0],"pkgenable"))
return pkgswitch(1, args+1);
if (!strcmp(args[0],"pkgdisable"))
return pkgswitch(2, args+1);
return 1;
}
char *cfghlp_doc[] = {
"ROCK Linux Config Helper",
0
};
struct builtin cfghlp_struct = {
"cfghlp",
&cfghlp_builtin,
BUILTIN_ENABLED,
cfghlp_doc,
"ROCK Linux Config Helper",
0
};

+ 1
- 0
package/base/dietlibc/config-350.in

@ -31,6 +31,7 @@ then
bool 'Build all with dietlibc' ROCKCFG_DIETLIBC_ALL 1
if [ $ROCKCFG_DIETLIBC_ALL = 0 ]; then
block_begin 2
pkgout
for i in `grep " DIETLIBC " config/$config/packages | \
cut -f5 -d" " | sort`
do

+ 4
- 0
package/base/gcc3/config-300.in

@ -21,6 +21,7 @@
# --- ROCK-COPYRIGHT-NOTE-END ---
menu_begin MENU_COMPILER 'Selecting compiler'
pkgout
default='' ; list=''
while read pkg ver ; do
default=${default:-$pkg} ; [ $pkg = gcc3 ] && default=gcc3
@ -45,6 +46,7 @@ menu_begin MENU_COMPILER 'Selecting compiler'
pkgfilter sed -e '/ gccx / s/^\(..\)../\1--/'
fi
pkgout
default='' ; list=''
while read pkg ver ; do
default=${default:-$pkg} ; [ $pkg = gcc3 ] && default=gcc3
@ -55,6 +57,7 @@ menu_begin MENU_COMPILER 'Selecting compiler'
fi
choice ROCKCFG_DEFAULT_KCC $default $list
pkgout
default='' ; list=''
while read pkg ver ; do
default=${default:-$pkg} ; [ $pkg = gcc3 ] && default=gcc3
@ -65,6 +68,7 @@ menu_begin MENU_COMPILER 'Selecting compiler'
fi
choice ROCKCFG_DEFAULT_CXX $default $list
pkgout
default='' ; list=''
while read pkg ver ; do
default=${default:-$pkg} ; [ $pkg = gcc3 ] && default=gcc3

+ 1
- 1
package/base/linux24/config-500.in

@ -21,7 +21,7 @@
# --- ROCK-COPYRIGHT-NOTE-END ---
menu_begin MENU_PKG_LINUX 'Linux Kernel Options'
default='' ; list=''
pkgout; default='' ; list=''
kernels=$( grep KERNEL config/$config/packages | cut -d' ' -f5 | tr '\n' '|' )
while read pkg ver ; do
default=${default:-$pkg} ; [ $pkg = linux24 ] && default=linux24

+ 1
- 1
package/base/lprng/config.in

@ -21,7 +21,7 @@
# --- ROCK-COPYRIGHT-NOTE-END ---
menu_begin MENU_PRINTER 'Selecting Print System'
list=''
pkgout; list=''
while read pkg ver ; do
list="$list $pkg Use_${pkg}_($ver)_as_standard_printer"
done < <(grep "^X .* PRINTER " config/$config/packages | cut -f5,6 -d' ')

+ 1
- 0
package/base/sendmail/config.in

@ -21,6 +21,7 @@
# --- ROCK-COPYRIGHT-NOTE-END ---
menu_begin MENU_MAILER 'Selecting MTA (mail transfer agent)'
pkgout
default=''; list=''
while read pkg ver ; do
default=${default:-$pkg}

+ 1
- 1
package/gnome14/gtk+12/config.in

@ -20,7 +20,7 @@
#
# --- ROCK-COPYRIGHT-NOTE-END ---
if pkgcheck "gtk\+12" X
if pkgcheck "gtk+12" X
then
menu_begin MENU_PKG_GTK12 'Gtk+1.2 Package Options'
bool 'Use locale fonts on input only' \

+ 1
- 0
package/mnemoc/boehm-gc/subconfig-libs.in

@ -24,6 +24,7 @@ if pkgcheck boehm-gc X
then
comment '--- Boehm-Demers-Weiser conservative garbage collector'
pkgout
while read x y; do
bool "Use it in Objective-C (gcc-$y)" ROCKCFG_PKG_BOEHMGC_OBJC${x#gcc} 0
bool "Use it in Java (gcc-$y)" ROCKCFG_PKG_BOEHMGC_JAVA${x#gcc} 0

+ 1
- 0
package/rene/apache/config.in

@ -26,6 +26,7 @@ then
text 'Install prefix for apache packages' \
ROCKCFG_PKG_APACHE_PREFIX "opt/apache"
pkgout
list="" ; default=""
while read pkg ver ; do
if [ "$pkg" = "bdb42" ] ; then

+ 26
- 7
scripts/Config

@ -37,6 +37,7 @@ config=default
do_config_cycle=0
delete_mode=0
oldconfig=''
nobashmod=''
profile=""
while [ "$1" ] ; do
@ -45,10 +46,17 @@ while [ "$1" ] ; do
-delete) delete_mode=1 ; shift ;;
-profile) profile='-profile' ; shift ;;
-oldconfig) oldconfig='-oldconfig' ; shift ;;
-nobashmod) nobashmod='-nobashmod' ; shift ;;
-cfg) config="$2" ; shift ; shift ;;
*)
echo
echo "Usage: $0 [ -delete | -oldconfig ] [ -cfg <config> ]"
echo
echo "Other options:"
echo " -profile create a config.profile with profiling data"
echo " -nobashmod don't use the bash config helper plugin"
echo
exit 1 ;;
esac
done
@ -66,14 +74,14 @@ if [ $do_config_cycle = 0 ] ; then
mkdir -p src
if [ -z "$oldconfig" -a ! -f src/rockdialog.bin ] ; then
echo "Creating rockdialog tool ..."
echo "Creating rockdialog tool."
command="gcc misc/rockdialog/*.c `
`-Imisc/rockdialog -lncurses -o src/rockdialog.bin"
echo "$command" ; eval "$command.$$"
mv src/rockdialog.bin.$$ src/rockdialog.bin
fi
echo "Creating configuration script ..."
echo "Creating configuration script."
cat << "EOT" > src/rockconfig.awk.$$
#!/usr/bin/awk -f
@ -103,17 +111,25 @@ EOT
mv src/rockconfig.in.$$ src/rockconfig.in
echo "Running ROCK Linux $rockver configuration ..."
while "$0" -cfg $config $oldconfig $profile -cycle ; do : ; done
while "$0" -cfg $config $oldconfig $profile $nobashmod -cycle ; do : ; done
exit 0
fi
if [ -z "$nobashmod" ]; then
if [ ! -f src/config_helper.so -o misc/tools-source/config_helper.c -nt src/config_helper.so ]; then
echo "Building src/config_helper.so."
gcc -shared -fPIC -Wall -o src/config_helper.so misc/tools-source/config_helper.c || exit 1
fi
enable -f src/config_helper.so cfghlp || exit 1
fi
if [ -z "$profile" ]; then
bprof() { :; }
bprof_print() { :; }
else
if [ ! -f src/bash_profiler.so ]; then
echo "Building src/bash_profiler.so ..."
if [ ! -f src/bash_profiler.so -o misc/tools-source/bash_profiler.c -nt src/bash_profiler.so ]; then
echo "Building src/bash_profiler.so."
gcc -shared -fPIC -Wall -o src/bash_profiler.so misc/tools-source/bash_profiler.c || exit 1
fi
enable -f src/bash_profiler.so bprof || exit 1
@ -143,7 +159,7 @@ if expr "`uname -m`" : "ppc" > /dev/null ; then arch=powerpc ; fi
if expr "`uname -m`" : "powerpc" > /dev/null ; then arch=powerpc ; fi
current="" ; export ROCKCFG_ARCH="$arch" ; export ROCKCFG_EXPERT=0
menu_this=0 ; menu_current=0 ; menu_counter=0
menu_stack=-1 ; menu_back=-1 ; menu_backpos=-1
menu_stack=x ; menu_back=-1 ; menu_backpos=-1
mkdir -p config/$config
touch config/$config/config config/$config/packages
@ -162,6 +178,7 @@ echo -e "#\n# ROCK Linux $rockver Config File\n#" > config/$config/config
spacer="" ; expert=0 ; tabspace="5" ; tabspace_list=""
commentnr=0 ; editfilenr=0
bprof mkpkglist start
cmd="./scripts/Create-PkgList"
[ "$ROCKCFG_DISABLE_BROKEN" = 1 ] && cmd="$cmd -nobroken"
cmd="$cmd $ROCKCFG_ARCH"
@ -172,9 +189,11 @@ if [ "$cmd" != "`cat config.pcache.cmd 2> /dev/null`" ] ; then
else
cat config.pcache.data > config/$config/packages
fi
bprof mkpkglist stop
export ROCKCFG_ID="$rockver" ; . src/rockconfig.in
export ROCKCFG_ID="$rockver"; pkgin; . src/rockconfig.in; pkgout
echo "export ROCKCFG_ID='$ROCKCFG_ID'" >> config/$config/config
rm -f config/$config/*.tmp
cut -f1,2,4,5,8- -d' ' config/$config/packages | sed 's, [^ ]*$,,' | \
tr ' ' '\t' | expand -t2,15,35, > config/$config/packages.txt

+ 89
- 48
scripts/config.func

@ -42,51 +42,92 @@ var_insert() {
# pkgcheck pattern [XO]
# pkgfilter cmd arg1 ...
#
pkgfilter() {
bprof pkgfilter start
"$@" < config/$config/packages > config/$config/packages.new
mv config/$config/packages.new config/$config/packages
bprof pkgfilter stop
}
pkgenable() {
bprof pkgenable start
local pattern patterns
for pattern; do
patterns="$patterns -e '/ $pattern / s/^./X/'"
done
if [ "$patterns" ]; then
eval "pkgfilter sed $patterns"
fi
bprof pkgenable stop
}
pkgdisable() {
bprof pkgdisable start
local pattern patterns
for pattern; do
patterns="$patterns -e '/ $pattern / s/^./O/'"
done
if [ "$patterns" ]; then
eval "pkgfilter sed $patterns"
fi
bprof pkgdisable stop
}
pkgremove() {
bprof pkgremove start
local pattern patterns
if [ "$1" ]; then
patterns=" $1 "; shift
if [ -n "$nobashmod" ]
then
pkgin() { :; }
pkgout() { :; }
__pkgfilter() {
"$@" < config/$config/packages > config/$config/packages.new
mv config/$config/packages.new config/$config/packages
}
pkgfilter() {
bprof pkgfilter start
__pkgfilter "$@"
bprof pkgfilter stop
}
pkgenable() {
bprof pkgenable start
local pattern patterns
for pattern; do
patterns="$patterns| $pattern "
patterns="$patterns -e '/ $pattern / s/^./X/'"
done
pkgfilter egrep -v "$patterns"
fi
bprof pkgremove stop
}
pkgcheck() {
bprof pkgcheck start
egrep -q "^$2.* ($1) " config/$config/packages
bprof pkgcheck stop
}
if [ "$patterns" ]; then
eval "__pkgfilter sed $patterns"
fi
bprof pkgenable stop
}
pkgdisable() {
bprof pkgdisable start
local pattern patterns
for pattern; do
patterns="$patterns -e '/ $pattern / s/^./O/'"
done
if [ "$patterns" ]; then
eval "__pkgfilter sed $patterns"
fi
bprof pkgdisable stop
}
pkgremove() {
bprof pkgremove start
local pattern patterns
if [ "$1" ]; then
patterns=" $1 "; shift
for pattern; do
patterns="$patterns| $pattern "
done
__pkgfilter egrep -v "$patterns"
fi
bprof pkgremove stop
}
pkgcheck() {
bprof pkgcheck start
local pattern="$1"; pattern="${pattern//+/\\+}"
egrep -q "^$2.*[ =]($pattern) " config/$config/packages; local ret=$?
bprof pkgcheck stop
return $ret
}
else
pkgin() { cfghlp pkg_in config/$config/packages; }
pkgout() { cfghlp pkg_out config/$config/packages ; }
pkgfilter() {
bprof pkgfilter start
cfghlp pkg_out config/$config/packages.tmp
"$@" < config/$config/packages.tmp > config/$config/packages
cfghlp pkg_in config/$config/packages
bprof pkgfilter stop
}
pkgenable() {
bprof pkgenable start
cfghlp pkgenable "$@"
bprof pkgenable stop
}
pkgdisable() {
bprof pkgdisable start
cfghlp pkgdisable "$@"
bprof pkgdisable stop
}
pkgremove() {
bprof pkgremove start
cfghlp pkgremove "$@"
bprof pkgremove stop
}
pkgcheck() {
bprof pkgcheck start
cfghlp pkgcheck "$1" "$2"; local ret=$?
bprof pkgcheck stop
return $ret
}
fi
comment() {
bprof comment start
@ -359,9 +400,9 @@ block_begin() {
block_end() {
bprof block_end start
if [ $menu_current = $menu_this ] ; then
spacer="`echo "$spacer" | sed 's,..$,,'`" ;
tabspace="`echo $tabspace_list | cut -f1 -d' '`"
tabspace_list="`echo $tabspace_list | cut -s -f2- -d' '`"
spacer="${spacer%??}"
tabspace="${tabspace_list%% *}"
tabspace_list="${tabspace_list#* }"
fi
bprof block_end stop
}
@ -405,8 +446,8 @@ menu_begin() {
menu_end() {
bprof menu_end start
block_end
menu_this="`echo $menu_stack | cut -f1 -d' '`"
menu_stack="`echo $menu_stack | cut -s -f2- -d' '`"
menu_this="${menu_stack%% *}"
menu_stack="${menu_stack#* }"
bprof menu_end stop
}

+ 4
- 5
scripts/config.in

@ -81,10 +81,7 @@ block_begin 7
then . architecture/$ROCKCFG_ARCH/config.in ; fi
bool 'This is a cross-build between architectures' ROCKCFG_CROSSBUILD 0
if [ "$ROCKCFG_CROSSBUILD" = 1 ] ; then
sed -e 's,^\(. ..\)[^ ]*,\1--------,' \
< config/$config/packages \
> config/$config/packages.new
mv config/$config/packages.new config/$config/packages
pkgfilter sed -e 's,^\(. ..\)[^ ]*,\1--------,'
ROCKCFG_ID="$ROCKCFG_ID-cross" ; ROCKCFGSET_USE_CROSSCC=1
fi
block_end
@ -221,6 +218,7 @@ expert_begin
done < config/$config/pkgsel >> config/$config/pkgsel.awk
echo '{ print; }' >> config/$config/pkgsel.awk
pkgout
gawk -f config/$config/pkgsel.awk < config/$config/packages \
> config/$config/packages.new 2> /dev/null
if [ -s config/$config/packages.new ] ; then
@ -229,6 +227,7 @@ expert_begin
rm -f config/$config/packages.new
comment '---- Syntax error(s) in rule set!'
fi
pkgin
menu_end
else
rm -f config/$config/pkgsel
@ -311,7 +310,7 @@ break packages!'
bool 'Disable National Language Support' ROCKCFG_DISABLE_NLS 0
if [ "$ROCKCFG_DISABLE_NLS" = 1 ] ; then
pkgremove ' gettext '
pkgremove gettext
fi
bool 'Automatic documentation creation' ROCKCFG_CREATE_DOCS 1

Loading…
Cancel
Save