diff options
-rw-r--r-- | .gitignore | 21 | ||||
-rw-r--r-- | Make.am | 41 | ||||
-rw-r--r-- | Makefile | 103 | ||||
-rw-r--r-- | configure.ac | 15 | ||||
-rw-r--r-- | install.am | 7 | ||||
-rw-r--r-- | runcap.3 | 4 | ||||
-rw-r--r-- | runcap.m4 | 39 | ||||
-rw-r--r-- | shared.am | 6 | ||||
-rw-r--r-- | static.am | 6 | ||||
-rw-r--r-- | t/Makefile.am (renamed from t/Makefile) | 27 | ||||
-rwxr-xr-x | t/testsuite | 16 |
11 files changed, 153 insertions, 132 deletions
@@ -6,3 +6,24 @@ core .gdbinit tmp *.tar.gz +.deps +Makefile +Makefile.in +.deps +.libs/ +aclocal.m4 +autom4te.cache/ +compile +config.guess +config.log +config.status +config.sub +configure +depcomp +*.lo +install-sh +*.in +*.la +libtool +ltmain.sh +missing @@ -0,0 +1,41 @@ +# Main Makefile.am source for runcap +# Copyright (C) 2017 Sergey Poznyakoff +# +# Runcap is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at your +# option) any later version. +# +# Runcap 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. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with Runcap. If not, see <http://www.gnu.org/licenses/>. + +# The runcap library can be built in three distinct flavours: +# 1. as a standalone library +# 2. as a shared convenience library +# 3. as a static convenience library +# Due to various Automake/libtools subtleties, the three builds cannot be +# defined in a single Makefile.am. Therefore, three distinct Automake sources +# are provided for each of the above types. Each of them contains the rules +# and variables for its particular build flavour, and obtains common rules and +# and variables by including Make.am. The actual build flavour is determined by +# the second argument to the RUNCAP_SETUP macro invocation (see runcap.m4). +# The files and the corresponding 2nd argument for each build type are: +# 1. install.am install +# 2. shared.am shared +# 3. static.am static + +RUNCAP_SRC = \ + getc.c\ + getl.c\ + runcap.c\ + seek.c\ + tell.c +EXTRA_DIST = Make.am installed.am shared.am static.am +check: + $(MAKE) -C t check +SUBDIRS = . t diff --git a/Makefile b/Makefile deleted file mode 100644 index 47bcf17..0000000 --- a/Makefile +++ /dev/null @@ -1,103 +0,0 @@ -# runcap - run program and capture its output -# Copyright (C) 2017 Sergey Poznyakoff -# -# Runcap is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# Runcap 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. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with Runcap. If not, see <http://www.gnu.org/licenses/>. - -PREFIX = /usr -BINDIR = $(PREFIX)/bin -MANDIR = $(PREFIX)/share/man - -MAN3DIR = $(MANDIR)/man3 -MAN3FILES = runcap.3 - -# The install program. Use cp(1) if not available. -INSTALL = install -# Program to make directory hierarchy. -MKHIER = install -d - -# Compiler options -O = -ggdb -Wall - -PROJECT = libruncap -VERSION = 1.0 - -SOURCES = runcap.c getc.c getl.c seek.c tell.c -OBJECTS = $(SOURCES:.c=.o) -HEADERS = runcap.h - -CFLAGS = $(O) -LDFLAGS = -ARFLAGS = cru - -.c.o: - $(CC) -c -o$@ $(CPPFLAGS) $(CFLAGS) $< - -all: libruncap.a - -$(OBJECTS): $(HEADERS) - -libruncap.a: $(OBJECTS) - ar $(ARFLAGS) libruncap.a $(OBJECTS) - ranlib libruncap.a - -clean: subdirs-clean - rm -f libruncap.a $(OBJECTS) - -subdirs-clean: - @$(MAKE) -C t clean - -install: install-lib install-headers install-man - -install-lib: libruncap.a - $(MKHIER) $(DESTDIR)$(LIBDIR) - $(INSTALL) libruncap.a $(DESTDIR)$(LIBDIR) - -install-headers: runcap.h - $(MKHIER) $(DESTDIR)$(INCLUDEDIR) - $(INSTALL) runcap.h $(DESTDIR)$(INCLUDEDIR) - -install-man:; - $(MKHIER) $(DESTDIR)$(MAN3DIR) - $(INSTALL) $(MAN3FILES) $(DESTDIR)$(MAN3DIR) - -.PHONY: check distdir -check: all - $(MAKE) -C t check - -DISTDIR=$(PROJECT)-$(VERSION) -DISTFILES=Makefile $(SOURCES) $(HEADERS) $(MAN3FILES) - -distdir: - test -d $(DISTDIR) || mkdir $(DISTDIR) - cp $(DISTFILES) $(DISTDIR) - $(MAKE) -C t distdir TOPDISTDIR=`cd $(DISTDIR); pwd` - -dist: distdir - tar hzcf $(DISTDIR).tar.gz $(DISTDIR) - rm -rf $(DISTDIR) - -distcheck: dist - @mkdir _build _inst; \ - cd _build; \ - tar xzf ../$(DISTDIR).tar.gz; \ - if $(MAKE) -C $(DISTDIR) check \ - && $(MAKE) -C $(DISTDIR) install DESTDIR=`cd ../_inst; pwd`; then \ - cd ..; \ - rm -rf _build _inst; \ - echo "$(DISTDIR).tar.gz is ready for distribution";\ - else \ - echo "Please, inspect " `pwd`;\ - fi - - diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..365a128 --- /dev/null +++ b/configure.ac @@ -0,0 +1,15 @@ +AC_PREREQ(2.63) +AC_INIT([libruncap], [1.0], [gray+runcap@gnu.org.ua]) +AC_CONFIG_SRCDIR([runcap.c]) +AM_INIT_AUTOMAKE([1.11 foreign tar-ustar silent-rules]) + +# Enable silent rules by default: +AM_SILENT_RULES([yes]) + +# Checks for programs. +AC_PROG_CC + +RUNCAP_SETUP([.],[install]) + +# Generate files +AC_OUTPUT diff --git a/install.am b/install.am new file mode 100644 index 0000000..3426aee --- /dev/null +++ b/install.am @@ -0,0 +1,7 @@ +# Automake settings for a standalone installable build of runcap. +# See Make.am for details. +include Make.am +lib_LTLIBRARIES=libruncap.la +libruncap_la_SOURCES = $(RUNCAP_SRC) +include_HEADERS=runcap.h +dist_man_MANS=runcap.3 @@ -1,5 +1,5 @@ .\" This file is part of runcap -*- nroff -*- -.\" Copyright (C) 2016 Sergey Poznyakoff +.\" Copyright (C) 2017 Sergey Poznyakoff .\" .\" Runcap is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ .\" .\" You should have received a copy of the GNU General Public License .\" along with runcap. If not, see <http://www.gnu.org/licenses/>. -.TH RUNCAP 2 "July 24, 2017" "RUNCAP" "User Commands" +.TH RUNCAP 2 "August 19, 2017" "RUNCAP" "User Commands" .SH NAME runcap \- run external process and capture its stdout and stderr .SH SYNOPSIS diff --git a/runcap.m4 b/runcap.m4 new file mode 100644 index 0000000..cd4c234 --- /dev/null +++ b/runcap.m4 @@ -0,0 +1,39 @@ +# This file is part of runcap -*- autoconf -*- +# Copyright (C) 2017 Sergey Poznyakoff +# +# Runcap is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# Runcap 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. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Runcap. If not, see <http://www.gnu.org/licenses/>. +AC_DEFUN([RUNCAP_SETUP],[ + m4_pushdef([runcapdir],m4_if($1,[.],,$1,,[runcap/],$1/)) + AC_SUBST([RUNCAP_INC],['-I$(top_srcdir)/]runcapdir') + AC_SUBST([RUNCAP_BUILD_TYPE]) + m4_if($2,[install],[ + LT_INIT + RUNCAP_BUILD_TYPE=install + RUNCAP_LDADD=['$(top_builddir)/]runcapdir[libruncap.la'] + AC_CONFIG_FILES(runcapdir[Makefile]:runcapdir[install.in]) + ],[shared],[ + LT_INIT + RUNCAP_BUILD_TYPE=shared + RUNCAP_LDADD=['$(top_builddir)/]runcapdir[libruncap.la'] + AC_CONFIG_FILES(runcapdir[Makefile]:runcapdir[shared.in]) + ],[ + AC_PROG_RANLIB + RUNCAP_BUILD_TYPE=static + RUNCAP_LDADD=['$(top_builddir)/]runcapdir[libruncap.a'] + AC_CONFIG_FILES(runcapdir[Makefile]:runcapdir[static.in]) + ]) + AC_CONFIG_FILES(runcapdir[t/Makefile]) + m4_popdef([runcapdir]) +]) + diff --git a/shared.am b/shared.am new file mode 100644 index 0000000..81d5f02 --- /dev/null +++ b/shared.am @@ -0,0 +1,6 @@ +# Automake settings to build runcap as a shared convenience library. +# See Make.am for details. +include Make.am +noinst_LTLIBRARIES=libruncap.la +libruncap_la_SOURCES = $(RUNCAP_SRC) +noinst_HEADER=runcap.h diff --git a/static.am b/static.am new file mode 100644 index 0000000..d42fce4 --- /dev/null +++ b/static.am @@ -0,0 +1,6 @@ +# Automake settings to build runcap as a static convenience library (default). +# See Make.am for details. +include Make.am +noinst_LIBRARIES=libruncap.a +libruncap_a_SOURCES = $(RUNCAP_SRC) +noinst_HEADER=runcap.h diff --git a/t/Makefile b/t/Makefile.am index 7a3bb62..681184f 100644 --- a/t/Makefile +++ b/t/Makefile.am @@ -16,19 +16,15 @@ TESTPROGS=genout rt check: $(TESTPROGS) - @./testsuite + @$(srcdir)/testsuite -CPPFLAGS=-I.. -CFLAGS = -ggdb -Wall +AM_CPPFLAGS=@RUNCAP_INC@ -.c.o: - $(CC) -c -o$@ $(CPPFLAGS) $(CFLAGS) $< +noinst_PROGRAMS = rt genout +rt_SOURCES=rt.c +rt_LDADD=../libruncap.a -RT_DEPS=rt.o ../libruncap.a -rt: $(RT_DEPS) - cc $(CFLAGS) -ort $(RT_DEPS) - -genout: genout.o +genout_SOURCES = genout.c TESTSUITE =\ testsuite\ @@ -42,13 +38,4 @@ TESTSUITE =\ 08seek.t\ 09seek.t - -DISTDIR = $(TOPDISTDIR)/t -DISTFILES = Makefile rt.c genout.c $(TESTSUITE) INPUT -.PHONY: distdir clean -distdir: - test -d $(DISTDIR) || mkdir $(DISTDIR) - cp $(DISTFILES) $(DISTDIR) - -clean: - rm -rf $(TESTPROGS) testsuite.log testsuite.dir +EXTRA_DIST = $(TESTSUITE) INPUT diff --git a/t/testsuite b/t/testsuite index 84d4c9d..bd870ce 100755 --- a/t/testsuite +++ b/t/testsuite @@ -18,7 +18,8 @@ testdir=$(cd $(dirname $0); pwd) progname=$(basename $0) -workdir=$testdir/testsuite.dir +topworkdir=$(pwd) +workdir=$topworkdir/testsuite.dir if [ ! -d $workdir ]; then mkdir $workdir fi @@ -42,8 +43,8 @@ $3 EOF } -PATH=$testdir:$PATH - +PATH=$topworkdir:$PATH +echo $PATH TC_EXPECT() { cat > exp$1 } @@ -54,7 +55,7 @@ TC_TITLE() { numtests=0 numfail=0 cd $testdir -exec 3>testsuite.log +exec 3>$topworkdir/testsuite.log if [ $# -gt 0 ]; then testlist=$(ls $*) || exit 1 @@ -81,9 +82,9 @@ do fi cd $dirname - descr=$(sed -n '/TC_TITLE /s///p' ../../$tc) + descr=$(sed -n '/TC_TITLE /s///p' $testdir/$tc) printheader $numtests $tc "$descr" - ( . ../../$tc ) >out 2>err + ( . $testdir/$tc ) >out 2>err retcode=$? numtests=$(( $numtests + 1 )) cd $workdir @@ -123,9 +124,10 @@ do echo "OK" rm -rf $dirname fi + rm templog done -cd $testdir +cd $topworkdir if [ $numfail -ne 0 ]; then echo >&2 "# $numfail out of $numtests tests failed" |