commit 83b8032bf3388b4bb1116727b8ba802fd427b2ea Author: Jay Larson Date: Fri Sep 9 14:03:25 2016 -0500 First check in diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1227297 --- /dev/null +++ b/Makefile @@ -0,0 +1,83 @@ +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation here: +# (http://www.gnu.org/licenses/gpl-2.0.html) +# +# 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. See the +# GNU General Public License for more details. + +DEPENDS = ncurses,readline +ARCH = x86_64 +URL = http://www.gnu.org/software/bc/ +DESC = bc is an arbitrary precision numeric processing language. +SNAPVER = sr0 + +ARCHIVE := $(PWD)/SRC/$(shell ls SRC|egrep '(bz2|gz|tar|xz)$$'|tail -1) +TYPE := $(shell file -ib $(ARCHIVE)|cut -d';' -f1|tr -d '\n') +SRCDIR := $(shell tar -tf $(ARCHIVE)|head -1|sed 's/\/.*//') +PATCHDIR := $(PWD)/SRC/patches +VERSION := $(shell echo $(SRCDIR)|egrep -o '\-[0-9].*'|sed 's/^-//')$(SNAPVER) + +MAKE = make +MAKEINST = make install +SNAPHACKS = + +include /usr/share/snap/Makefile.snaplinux + +$(SRCDIR): $(ARCHIVE) + @if [ '$(TYPE)' == 'application/x-bzip2' ]; then \ + tar -jxf $(ARCHIVE); \ + elif [ '$(TYPE)' == 'application/x-gzip' ]; then \ + tar -zxf $(ARCHIVE); \ + elif [ '$(TYPE)' == 'application/x-tar' ]; then \ + tar -xf $(ARCHIVE); \ + elif [ '$(TYPE)' == 'application/x-xz' ]; then \ + tar -xf $(ARCHIVE); \ + else \ + echo 'Unable to determine archive type'; \ + exit 1; \ + fi + +$(SRCDIR)/config.log: $(SRCDIR) + @cd $(SRCDIR) && for patch in $(PATCHDIR)/*.patch; do \ + patch --verbose -Np1 -i $$patch; \ + done + @cd $(SRCDIR); \ + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --with-readline \ + --build=x86_64-snap-linux-gnu \ + --host=x86_64-snap-linux-gnu \ + --target=x86_64-snap-linux-gnu + +$(SRCDIR)/bc/bc: $(SRCDIR)/config.log + @cd $(SRCDIR); \ + $(MAKE) + +$(ROOT): $(SRCDIR)/bc/bc + @if [ -d $(ROOT) ]; then \ + touch $(ROOT); \ + else \ + mkdir -v $(ROOT); \ + fi + + @cd $(SRCDIR); \ + $(MAKEINST) DESTDIR=$(ROOT) + + @$(SNAPHACKS) + +test: $(ROOT) + @cd $(SRCDIR); \ + echo "quit" | ./bc/bc -l Test/checklib.b + +clean: + @rm -rvf $(ROOT) \ + $(SNAPINFO) \ + $(MANIFEST) \ + $(FILES) \ + $(SRCDIR) + diff --git a/SNAP/README b/SNAP/README new file mode 100644 index 0000000..19a3ff1 --- /dev/null +++ b/SNAP/README @@ -0,0 +1,3 @@ +This is the directory where the manifest, snapinfo, and files.tar.gz +files will be created. It is also where the usher file should be +placed if it is required by the package. diff --git a/SRC/bc-1.06.95.tar.bz2 b/SRC/bc-1.06.95.tar.bz2 new file mode 100644 index 0000000..dc49232 Binary files /dev/null and b/SRC/bc-1.06.95.tar.bz2 differ diff --git a/SRC/bc-1.06.95.tar.bz2.sig b/SRC/bc-1.06.95.tar.bz2.sig new file mode 100644 index 0000000..48fafa5 Binary files /dev/null and b/SRC/bc-1.06.95.tar.bz2.sig differ diff --git a/SRC/patches/01_fix-segfault-jumping-to-label.patch b/SRC/patches/01_fix-segfault-jumping-to-label.patch new file mode 100644 index 0000000..13adf29 --- /dev/null +++ b/SRC/patches/01_fix-segfault-jumping-to-label.patch @@ -0,0 +1,16 @@ +diff -purN a/bc/execute.c b/bc/execute.c +--- a/bc/execute.c 2006-09-04 21:39:31.000000000 -0500 ++++ b/bc/execute.c 2016-09-09 12:57:14.756000000 -0500 +@@ -133,7 +133,11 @@ execute () + gp = functions[pc.pc_func].f_label; + l_gp = label_num >> BC_LABEL_LOG; + l_off = label_num % BC_LABEL_GROUP; +- while (l_gp-- > 0) gp = gp->l_next; ++ while (gp && l_gp-- > 0) gp = gp->l_next; ++ if (!gp) { ++ rt_error ("No label group for label %d.", label_num); ++ break; ++ } + pc.pc_addr = gp->l_adrs[l_off]; + } + break; diff --git a/SRC/patches/02_fix-memory-leak.patch b/SRC/patches/02_fix-memory-leak.patch new file mode 100644 index 0000000..eb59861 --- /dev/null +++ b/SRC/patches/02_fix-memory-leak.patch @@ -0,0 +1,24 @@ +diff -purN a/bc/bc.y b/bc/bc.y +--- a/bc/bc.y 2006-09-04 21:39:31.000000000 -0500 ++++ b/bc/bc.y 2016-09-09 13:02:41.476000000 -0500 +@@ -569,6 +569,7 @@ expression : named_expression ASSIGN_O + generate (">"); + break; + } ++ free($2); + } + | expression '+' expression + { +diff -purN a/bc/util.c b/bc/util.c +--- a/bc/util.c 2006-09-04 21:39:31.000000000 -0500 ++++ b/bc/util.c 2016-09-09 13:02:41.476000000 -0500 +@@ -602,8 +602,7 @@ lookup (name, namekind) + case FUNCTDEF: + if (id->f_name != 0) + { +- if (namekind != FUNCT) +- free(name); ++ free(name); + /* Check to see if we are redefining a math lib function. */ + if (use_math && namekind == FUNCTDEF && id->f_name <= 6) + id->f_name = next_func++; diff --git a/SRC/patches/03_fix-uninitialized-variable.patch b/SRC/patches/03_fix-uninitialized-variable.patch new file mode 100644 index 0000000..dfafe05 --- /dev/null +++ b/SRC/patches/03_fix-uninitialized-variable.patch @@ -0,0 +1,11 @@ +diff -purN a/bc/storage.c b/bc/storage.c +--- a/bc/storage.c 2006-09-04 21:39:31.000000000 -0500 ++++ b/bc/storage.c 2016-09-09 13:05:09.720000000 -0500 +@@ -99,6 +99,7 @@ more_functions (VOID) + { + f = &functions[indx]; + f->f_defined = FALSE; ++ f->f_void = FALSE; + f->f_body = (char *) bc_malloc (BC_START_SIZE); + f->f_body_size = BC_START_SIZE; + f->f_code_size = 0; diff --git a/SRC/patches/README b/SRC/patches/README new file mode 100644 index 0000000..253cdcd --- /dev/null +++ b/SRC/patches/README @@ -0,0 +1,2 @@ +Place any patch files here and preface each with a number indicating +the order of execution. Patch files are expected to use a .patch extension.