Changeset librcc,53

Show
Ignore:
Timestamp:
10/10/09 04:16:23 (1 month ago)
Author:
Suren A. Chilingaryan <csa@dside.dyndns.org>
branch-nick:
librcc
Message:

Support systems without lockf (OpenSolaris?), check GTK1 headers in configure.in, complain on missing macros in autogen.sh, patches by Ivan Borzenkov and Colin Watson for eglibc compatibility

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • librcc/.bzrignore

    r52 r53  
    3333lt~obsolete.m4 
    3434external/rccexternal 
     35stamp-h.in 
  • librcc/autogen.sh

    r49 r53  
    44 
    55KEYFILE=src/librcc.c 
     6 
    67 
    78# Some OS's have multiple versions (autoconf259, etc.) and don't have an  
     
    1213then 
    1314    AUTOCONF=autoconf 
    14     AUTOMAKE=automake 
    15     ACLOCAL=aclocal 
    1615    LIBTOOLIZE=libtoolize 
    1716    AUTOHEADER=autoheader 
     
    1918    FINDPATH=`echo ${PATH}|sed -e 's,:, ,g'`  
    2019    AUTOCONF=`find ${FINDPATH} -name "autoconf*"|sort -r|head -1` 
    21     AUTOMAKE=`find ${FINDPATH} -name "automake*"|sort -r|head -1` 
    22     ACLOCAL=`find ${FINDPATH} -name "aclocal*"|sort -r|head -1` 
    2320    LIBTOOLIZE=`find ${FINDPATH} -name "libtoolize*"|sort -r|head -1` 
    2421    AUTOHEADER=`find /usr/bin /usr/local/bin -name "autoheader*"|sort -r|head -1` 
    2522    echo "$0: autoconf: using ${AUTOCONF}" 
     23    echo "$0: libtoolize: using ${LIBTOOLIZE}" 
     24    echo "$0: autoheader: using ${AUTOHEADER}" 
     25fi 
     26 
     27AUTOMAKE=`which automake` 
     28if test x"${AUTOMAKE}" != x -a -f "${AUTOMAKE}" 
     29then 
     30    AUTOMAKE=automake 
     31    ACLOCAL=aclocal 
     32else 
     33    FINDPATH=`echo ${PATH}|sed -e 's,:, ,g'`  
     34    AUTOMAKE=`find ${FINDPATH} -name "automake*"|sort -r|head -1` 
     35    ACLOCAL=`find ${FINDPATH} -name "aclocal*"|sort -r|head -1` 
    2636    echo "$0: automake: using ${AUTOMAKE}" 
    2737    echo "$0: aclocal: using ${ACLOCAL}" 
    28     echo "$0: libtoolize: using ${LIBTOOLIZE}" 
    29     echo "$0: autoheader: using ${AUTOHEADER}" 
    3038fi 
    3139 
     
    4654AUTOCONF_FLAGS=-Wno-obsolete 
    4755 
    48 die() 
    49 
     56 
     57if [ ! -f $KEYFILE ] 
     58then 
     59    echo "$PROG: key-file \`$KEYFILE' not found, exiting." >&2 
     60    echo "$PROG: hint: you should run $PROG from top-level sourse directory." >&2 
     61    exit 1 
     62fi 
     63 
     64 
     65boldface="`tput bold 2>/dev/null`" 
     66normal="`tput sgr0 2>/dev/null`" 
     67 
     68printbold() { 
     69    echo $ECHO_N "$boldface" 
     70    echo "$@" 
     71    echo $ECHO_N "$normal" 
     72}     
     73 
     74printerr() { 
     75    echo "$@" >&2 
     76
     77 
     78die() { 
    5079    err=$? 
    5180    echo "$PROG: exited by previous error(s), return code was $err" >&2 
     
    5382} 
    5483 
    55 if [ ! -f $KEYFILE ] 
    56 then 
    57     echo "$PROG: key-file \`$KEYFILE' not found, exiting." >&2 
    58     echo "$PROG: hint: you should run $PROG from top-level sourse directory." >&2 
    59     exit 1 
    60 fi 
     84REQUIRED_M4MACROS=${REQUIRED_M4MACROS:-} 
     85FORBIDDEN_M4MACROS=${FORBIDDEN_M4MACROS:-} 
     86require_m4macro() { 
     87    case "$REQUIRED_M4MACROS" in 
     88        $1\ * | *\ $1\ * | *\ $1) ;; 
     89        *) REQUIRED_M4MACROS="$REQUIRED_M4MACROS $1" ;; 
     90    esac 
     91
     92 
     93forbid_m4macro() { 
     94    case "$FORBIDDEN_M4MACROS" in 
     95        $1\ * | *\ $1\ * | *\ $1) ;; 
     96        *) FORBIDDEN_M4MACROS="$FORBIDDEN_M4MACROS $1" ;; 
     97    esac 
     98
     99 
     100add_to_cm_macrodirs() { 
     101    case $cm_macrodirs in 
     102    "$1 "* | *" $1 "* | *" $1") ;; 
     103    *) cm_macrodirs="$cm_macrodirs $1";; 
     104    esac 
     105
     106 
     107check_m4macros() { 
     108    # construct list of macro directories 
     109    cm_macrodirs=`$ACLOCAL --print-ac-dir` 
     110    # aclocal also searches a version specific dir, eg. /usr/share/aclocal-1.9 
     111    # but it contains only Automake's own macros, so we can ignore it. 
     112 
     113    # Read the dirlist file, supported by Automake >= 1.7. 
     114    if compare_versions 1.7 $AUTOMAKE_VERSION && [ -s $cm_macrodirs/dirlist ]; then 
     115        cm_dirlist=`sed 's/[    ]*#.*//;/^$/d' $cm_macrodirs/dirlist` 
     116        if [ -n "$cm_dirlist" ] ; then 
     117            for cm_dir in $cm_dirlist; do 
     118                if [ -d $cm_dir ]; then 
     119                    add_to_cm_macrodirs $cm_dir 
     120                fi 
     121            done 
     122        fi 
     123    fi 
     124 
     125    # Parse $ACLOCAL_FLAGS 
     126    set - $ACLOCAL_FLAGS 
     127    while [ $# -gt 0 ]; do 
     128        if [ "$1" = "-I" ]; then 
     129            add_to_cm_macrodirs "$2" 
     130            shift 
     131        fi 
     132        shift 
     133    done 
     134 
     135    cm_status=0 
     136    if [ -n "$REQUIRED_M4MACROS" ]; then 
     137        printbold "Checking for required M4 macros..." 
     138        # check that each macro file is in one of the macro dirs 
     139        for cm_macro in $REQUIRED_M4MACROS; do 
     140            cm_macrofound=false 
     141            for cm_dir in $cm_macrodirs; do 
     142                if [ -f "$cm_dir/$cm_macro" ]; then 
     143                    cm_macrofound=true 
     144                    break 
     145                fi 
     146                # The macro dir in Cygwin environments may contain a file 
     147                # called dirlist containing other directories to look in. 
     148                if [ -f "$cm_dir/dirlist" ]; then 
     149                    for cm_otherdir in `cat $cm_dir/dirlist`; do 
     150                        if [ -f "$cm_otherdir/$cm_macro" ]; then 
     151                            cm_macrofound=true 
     152                            break 
     153                        fi 
     154                    done 
     155                fi 
     156            done 
     157            if $cm_macrofound; then 
     158                : 
     159            else 
     160                printerr "  $cm_macro not found" 
     161                cm_status=1 
     162            fi 
     163        done 
     164    fi 
     165    if [ -n "$FORBIDDEN_M4MACROS" ]; then 
     166        printbold "Checking for forbidden M4 macros..." 
     167        # check that each macro file is in one of the macro dirs 
     168        for cm_macro in $FORBIDDEN_M4MACROS; do 
     169            cm_macrofound=false 
     170            for cm_dir in $cm_macrodirs; do 
     171                if [ -f "$cm_dir/$cm_macro" ]; then 
     172                    cm_macrofound=true 
     173                    break 
     174                fi 
     175            done 
     176            if $cm_macrofound; then 
     177                printerr "  $cm_macro found (should be cleared from macros dir)" 
     178                cm_status=1 
     179            fi 
     180        done 
     181    fi 
     182    if [ "$cm_status" != 0 ]; then 
     183        printerr "***Error***: some autoconf macros required to build $PKG_NAME" 
     184        printerr "  were not found in your aclocal path, or some forbidden" 
     185        printerr "  macros were found.  Perhaps you need to adjust your" 
     186        printerr "  ACLOCAL_FLAGS?" 
     187        printerr 
     188    fi 
     189    return $cm_status 
     190
     191 
     192 
     193# PKG_CONFIG 
     194require_m4macro pkg.m4 
     195check_m4macros || die 
     196 
     197 
    61198 
    62199# gettextize ${GETTEXTIZE_FLAGS} 
  • librcc/configure.in

    r46 r53  
    2929 
    3030AM_INIT_AUTOMAKE($PACKAGE, $VERSION) 
    31  
     31AC_CONFIG_MACRO_DIR([m4]) 
    3232 
    3333AC_PROG_CC 
     
    5454AC_PATH_PROG(MV, mv, /bin/mv) 
    5555AC_PATH_PROG(TAR, tar, /bin/tar) 
     56 
     57dnl Fixing ugly libtool, see for details 
     58dnl http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523750 
     59RM="$RM -f" 
    5660 
    5761dnl Checks for header files. 
     
    8286dnl *** 
    8387AC_PATH_PROG(GTK_CONFIG, gtk-config, no) 
    84 AM_CONDITIONAL(HAVE_GTK, [ test $GTK_CONFIG != no ]) 
    8588if test $GTK_CONFIG = no; then 
     89    HAVE_GTK=no 
     90else 
     91    GTK1_LIBS="\`gtk-config --libs\`" 
     92    GTK1_INCLUDES="\`gtk-config --cflags\`" 
     93     
     94    saved_CFLAGS="$CFLAGS" 
     95    CFLAGS="$CFLAGS `gtk-config --cflags`" 
     96    AC_CHECK_HEADER([gtk/gtk.h], [HAVE_GTK=yes], [HAVE_GTK=no]) 
     97    CFLAGS=$saved_CFLAGS 
     98fi 
     99 
     100AM_CONDITIONAL(HAVE_GTK, [ test $HAVE_GTK = yes ]) 
     101 
     102if test $HAVE_GTK = no; then 
    86103    GTK1_LIBS="" 
    87104    GTK1_INCLUDES="" 
    88     HAVE_GTK=no 
    89 else 
    90     GTK1_LIBS="\`gtk-config --libs\`" 
    91     GTK1_INCLUDES="\`gtk-config --cflags\`" 
    92     HAVE_GTK=yes 
    93 fi 
     105fi 
     106 
    94107AC_SUBST(GTK1_LIBS) 
    95108AC_SUBST(GTK1_INCLUDES) 
     
    362375 
    363376dnl Checks for library functions. 
    364 AC_CHECK_FUNCS(strcasecmp strncasecmp strdup strnlen
     377AC_CHECK_FUNCS(strcasecmp strncasecmp strdup strnlen flock lockf
    365378 
    366379AC_OUTPUT(src/Makefile engines/Makefile external/Makefile ui/Makefile examples/Makefile Makefile librcc.spec) 
  • librcc/engines/Makefile.am

    r42 r53  
    11lib_LTLIBRARIES = western_engine.la 
    22 
    3 libdir = $(pkgdatadir)/engines 
     3libdir = $(pkgdatadir)engines 
    44 
    55if HAVE_RCD 
  • librcc/src/rcclock.c

    r50 r53  
    4141# include <sys/stat.h> 
    4242#endif /* HAVE_SYS_STAT_H */ 
     43#ifdef HAVE_FCNTL_H 
     44# include <fcntl.h> 
     45#endif /* HAVE_FCNTL_H */ 
    4346 
    4447#include "rcchome.h" 
     
    7174    if (lockfd >= 0) { 
    7275        for (err = -1, i = 0; i < (LIBRCC_LOCK_WAIT/10); i++) { 
     76#if defined(HAVE_FLOCK) 
    7377            err = flock(lockfd, LOCK_EX|LOCK_NB); 
     78#elif defined(HAVE_LOCKF) 
     79            err = lockf(lockfd, F_TLOCK, 1); 
     80#else 
     81# warning "No file locking mechanism is detected" 
     82            err = 0; // We must believe in best 
     83#endif 
    7484            if ((err)&&(errno == EWOULDBLOCK)) nanosleep(&wait, NULL); 
    7585            else break; 
     
    8696                if (lockfd >= 0) { 
    8797                    for (err = -1, i = 0; i < (LIBRCC_LOCK_WAIT/10); i++) { 
     98#if defined(HAVE_FLOCK) 
    8899                        err = flock(lockfd, LOCK_EX|LOCK_NB); 
     100#elif defined(HAVE_LOCKF) 
     101                        err = lockf(lockfd, F_TLOCK, 1); 
     102#endif 
    89103                        if ((err)&&(errno == EWOULDBLOCK)) nanosleep(&wait, NULL); 
    90104                        else break; 
     
    122136    sprintf(stmp,"%s/.rcc/locks/rcc.lock", rcc_home_dir); 
    123137 
     138#if defined(HAVE_FLOCK) 
    124139    flock(lockfd, LOCK_UN); 
     140#elif defined(HAVE_LOCKF) 
     141    lockf(lockfd, F_ULOCK, 1); 
     142#endif 
     143 
    125144    close(lockfd); 
    126145    lockfd = -1; 
  • librcc/src/rccstring.h

    r51 r53  
    3939int rccStringChangeID(rcc_string string, rcc_language_id language_id); 
    4040 
    41 #ifdef HAVE_STRNLEN 
    42 # ifndef strnlen 
    43 size_t strnlen(const char *str, size_t size); 
    44 # endif /* !strnlen */ 
    45 #else 
     41#ifndef HAVE_STRNLEN 
    4642int rccStrnlen(const char *str, size_t size); 
    47 #endif /* HAVE_STRNLEN */ 
     43#endif /* !HAVE_STRNLEN */ 
    4844int rccIsASCII(const char *str); 
    4945size_t rccStringSizedGetChars(const char *str, size_t size); 
  • librcc/src/rccxml.c

    r50 r53  
    341341    fd = open(config, O_CREAT|O_RDWR,00644); 
    342342    if (fd == -1) goto clear; 
     343 
     344#if defined(HAVE_FLOCK) 
    343345    flock(fd, LOCK_EX); 
     346#elif defined(HAVE_LOCKF) 
     347    lockf(fd, F_LOCK, 1); 
     348#endif 
    344349     
    345350    if ((!fstat(fd, &st))&&(st.st_size)) { 
     
    464469            } 
    465470            fsync(fd); 
    466             flock(fd, LOCK_UN); 
     471 
     472#if defined(HAVE_FLOCK) 
     473            flock(fd, LOCK_UN); 
     474#elif defined(HAVE_LOCKF) 
     475            lockf(fd, F_ULOCK, 1); 
     476#endif 
     477 
    467478            close(fd); 
    468479        } 
     
    517528 
    518529    if (fd != -1) { 
     530#if defined(HAVE_FLOCK) 
    519531        flock(fd, LOCK_EX); 
     532#elif defined(HAVE_LOCKF) 
     533        lockf(fd, F_LOCK, 1); 
     534#endif 
     535 
    520536        if ((!fstat(fd, &st))&&(st.st_size)) { 
    521537            doc = xmlReadFd(fd, name, NULL, 0); 
    522538        }  
     539 
     540#if defined(HAVE_FLOCK) 
    523541        flock(fd, LOCK_UN); 
     542#elif defined(HAVE_LOCKF) 
     543        lockf(fd, F_ULOCK, 1); 
     544#endif 
     545 
    524546        close(fd); 
    525547     
     
    534556 
    535557    if (sysfd != -1) { 
     558#if defined(HAVE_FLOCK) 
    536559        flock(sysfd, LOCK_EX); 
     560#elif defined(HAVE_LOCKF) 
     561        lockf(sysfd, F_LOCK, 1); 
     562#endif 
     563 
    537564        if ((!fstat(sysfd, &st))&&(st.st_size)) { 
    538565            sysdoc = xmlReadFd(sysfd, name, NULL, 0); 
    539566        }  
     567 
     568#if defined(HAVE_FLOCK) 
    540569        flock(sysfd, LOCK_UN); 
     570#elif defined(HAVE_LOCKF) 
     571        lockf(sysfd, F_ULOCK, 1); 
     572#endif 
     573 
    541574        close(sysfd); 
    542575