summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2015-08-08 13:49:04 -0700
committerRobin H. Johnson <robbat2@gentoo.org>2015-08-08 17:38:18 -0700
commit56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch)
tree3f91093cdb475e565ae857f1c5a7fd339e2d781e /sci-astronomy/funtools
downloadgentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip
proj/gentoo: Initial commit
This commit represents a new era for Gentoo: Storing the gentoo-x86 tree in Git, as converted from CVS. This commit is the start of the NEW history. Any historical data is intended to be grafted onto this point. Creation process: 1. Take final CVS checkout snapshot 2. Remove ALL ChangeLog* files 3. Transform all Manifests to thin 4. Remove empty Manifests 5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$ 5.1. Do not touch files with -kb/-ko keyword flags. Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'sci-astronomy/funtools')
-rw-r--r--sci-astronomy/funtools/Manifest1
-rw-r--r--sci-astronomy/funtools/files/funtools-1.4.4-ds9-fixes.patch292
-rw-r--r--sci-astronomy/funtools/files/funtools-1.4.4-fix-autoheader.patch121
-rw-r--r--sci-astronomy/funtools/files/funtools-1.4.4-fix-crashes.patch99
-rw-r--r--sci-astronomy/funtools/files/funtools-1.4.4-fix-hardening.patch68
-rw-r--r--sci-astronomy/funtools/files/funtools-1.4.4-fix-includes.patch602
-rw-r--r--sci-astronomy/funtools/files/funtools-1.4.4-makefiles.patch341
-rw-r--r--sci-astronomy/funtools/funtools-1.4.4-r4.ebuild62
-rw-r--r--sci-astronomy/funtools/metadata.xml12
9 files changed, 1598 insertions, 0 deletions
diff --git a/sci-astronomy/funtools/Manifest b/sci-astronomy/funtools/Manifest
new file mode 100644
index 000000000000..3e5326a94fdf
--- /dev/null
+++ b/sci-astronomy/funtools/Manifest
@@ -0,0 +1 @@
+DIST funtools-1.4.4.tar.gz 3475367 SHA256 f47a00e774b557931a7ff00ddd0852e32ae5d2a2f0d3a227f8ba81d3db1e863b SHA512 3a58ad008bc33836109327add15eabaf95e9dc3f9e70a678fe9a8176dae87ccf0faf439e775b6efcb50e536afb022b9e4c226cbb98e56997960380e06012b5c2 WHIRLPOOL 5b89cb7280a4e1087c13103a813e9220432419215d8bc7e6463f5f08f2a5ba3731e7693f16d79ff4ec705665809cc33e81dbd36cd07a00d786aac35bbb975f71
diff --git a/sci-astronomy/funtools/files/funtools-1.4.4-ds9-fixes.patch b/sci-astronomy/funtools/files/funtools-1.4.4-ds9-fixes.patch
new file mode 100644
index 000000000000..6a089159d4d3
--- /dev/null
+++ b/sci-astronomy/funtools/files/funtools-1.4.4-ds9-fixes.patch
@@ -0,0 +1,292 @@
+Origin: http://hea-www.harvard.edu/saord/download/ds9/source/ds9.7.0.tar.gz
+Description: Fixes that were applied to the package included in the saods9
+ source. Only the patches that affect the Debian distribution are included here.
+ These patches are not specific for DS9, however.
+ .
+ From the changelog:
+ * Fixed -J funcone, which was not properly outputting all rows.
+ * Fixed bug in funim.c which broke vcol functionality.
+ .
+--- a/filter/filter.c
++++ b/filter/filter.c
+@@ -326,24 +326,31 @@ Filter FilterOpen(header, string, mode)
+ }
+
+ /* determine which type of process execution we do */
+- filter->ptype = DEFAULT_FILTER_PTYPE;
+- *tbuf = '\0';
+- if( (s=(char *)getenv("FILTER_PTYPE")) ){
+- strcpy(tbuf, s);
+- }
+- if( !*tbuf && (s=xstrdup(filter->mode)) ){
+- keyword(s, "ptype", tbuf, SZ_LINE);
+- if( s ) xfree(s);
+- }
+- if( *tbuf ){
+- if( *tbuf == 'p' )
+- filter->ptype = PTYPE_PROCESS;
+- else if( *tbuf == 'c' )
+- filter->ptype = PTYPE_CONTAINED;
++ switch(filter->method){
++ case METHOD_C:
++ filter->ptype = DEFAULT_FILTER_PTYPE;
++ *tbuf = '\0';
++ if( (s=(char *)getenv("FILTER_PTYPE")) ){
++ strcpy(tbuf, s);
++ }
++ if( !*tbuf && (s=xstrdup(filter->mode)) ){
++ keyword(s, "ptype", tbuf, SZ_LINE);
++ if( s ) xfree(s);
++ }
++ if( *tbuf ){
++ if( *tbuf == 'p' )
++ filter->ptype = PTYPE_PROCESS;
++ else if( *tbuf == 'c' )
++ filter->ptype = PTYPE_CONTAINED;
+ #ifdef USE_DL
+- else if( *tbuf == 'd' )
+- filter->ptype = PTYPE_DYNAMIC;
++ else if( *tbuf == 'd' )
++ filter->ptype = PTYPE_DYNAMIC;
+ #endif
++ }
++ break;
++ default:
++ filter->ptype = PTYPE_PROCESS;
++ break;
+ }
+
+ /* determine region paint mode */
+@@ -470,7 +477,10 @@ Filter FilterOpen(header, string, mode)
+ if( !FilterProgCompile(filter) )
+ goto error;
+
+- if( filter->debug < 2 ){
++ if( filter->debug >= 2 ) goto done;
++
++ switch(filter->method){
++ case METHOD_C:
+ switch(filter->ptype){
+ case PTYPE_PROCESS:
+ case PTYPE_CONTAINED:
+@@ -478,7 +488,7 @@ Filter FilterOpen(header, string, mode)
+ case PIPE_WIN32:
+ #if HAVE_CYGWIN
+ if( !WinProcessOpen(filter->prog,
+- &(filter->ihandle), &(filter->ohandle), &(filter->process)) )
++ &(filter->ihandle), &(filter->ohandle), &(filter->process)) )
+ goto error;
+ #else
+ gerror(stderr, "internal error: no WinProcess without Windows");
+@@ -487,20 +497,23 @@ Filter FilterOpen(header, string, mode)
+ break;
+ default:
+ if( !ProcessOpen(filter->prog,
+- &(filter->ichan), &(filter->ochan), &(filter->pid)) )
++ &(filter->ichan), &(filter->ochan), &(filter->pid)) )
+ goto error;
+ break;
+ }
+ break;
+ #ifdef USE_DL
+ case PTYPE_DYNAMIC:
+- if( !(filter->dl=DLOpen(filter->prog)) )
+- goto error;
+- break;
++ if( !(filter->dl=DLOpen(filter->prog)) )
++ goto error;
++ break;
+ #endif
+ default:
+- goto error;
++ goto error;
+ }
++ break;
++ default:
++ goto error;
+ }
+
+ /* return the good news */
+--- a/filter/filt.l
++++ b/filter/filt.l
+@@ -871,6 +871,26 @@ compass { BEGIN COMM; }
+ *
+ */
+
++
++#ifdef YY_USE_PROTOS
++static void floatprefix(void)
++#else
++static void floatprefix()
++#endif
++{
++ if( filt->method == METHOD_C )
++ _FiltLexCat("(double)");
++}
++
++#ifdef YY_USE_PROTOS
++static void floatsuffix(void)
++#else
++static void floatsuffix()
++#endif
++{
++ return;
++}
++
+ #ifdef YY_USE_PROTOS
+ static void
+ bin2num(char *d, char *s, int maxlen)
+@@ -1414,7 +1434,14 @@ static void _FiltLexRegionStart(docols)
+ FilterSymbolDefaults(filt, 0);
+ /* initialize wcs for default image case */
+ _FiltLexWcsCols(filt->fhd, filt->xbin, filt->ybin);
+- _FiltLexCat(",(double)x,(double)y");
++ _FiltLexCat(",");
++ floatprefix();
++ _FiltLexCat("x");
++ floatsuffix();
++ _FiltLexCat(",");
++ floatprefix();
++ _FiltLexCat("y");
++ floatsuffix();
+ break;
+ case 1:
+ if( !initbindefs ){
+@@ -1427,16 +1454,24 @@ static void _FiltLexRegionStart(docols)
+ if( !filt->xbin || !filt->ybin ){
+ _filterror("two binning columns are required for regions");
+ }
+- _FiltLexCat(",(double)");
++ _FiltLexCat(",");
++ floatprefix();
+ _FiltLexCat(filt->xbin);
+- _FiltLexCat(",(double)");
++ floatsuffix();
++ _FiltLexCat(",");
++ floatprefix();
+ _FiltLexCat(filt->ybin);
++ floatsuffix();
+ break;
+ case 2:
+- _FiltLexCat(",(double)");
++ _FiltLexCat(",");
++ floatprefix();
+ _FiltLexCat(colnames[0]);
+- _FiltLexCat(",(double)");
++ floatsuffix();
++ _FiltLexCat(",");
++ floatprefix();
+ _FiltLexCat(colnames[1]);
++ floatsuffix();
+ break;
+ }
+ if( s ) xfree(s);
+--- a/filter/filtprog_c.c
++++ b/filter/filtprog_c.c
+@@ -198,7 +198,8 @@ static int FilterProgOpen_C(filter)
+ ccstr = "gcc";
+ }
+ /* make sure we have a compiler */
+- if( !(filter->cc = Find(ccstr, "x", NULL, FilterPath())) &&
++ if( !(filter->cc = Access(ccstr, "x")) &&
++ !(filter->cc = Find(ccstr, "x", NULL, FilterPath())) &&
+ !(filter->cc = Find("gcc", "x", NULL, FilterPath())) &&
+ !(filter->cc = Find("cc", "x", NULL, FilterPath())) &&
+ !(filter->cc = Find("cc", "x", NULL, ".")) &&
+@@ -212,6 +213,9 @@ static int FilterProgOpen_C(filter)
+ #if HAVE_CYGWIN
+ if( (s=strrchr(filter->cc, '/')) ){
+ s++;
++ }
++ else if( (s=strrchr(filter->cc, '\\')) ){
++ s++;
+ } else {
+ s = filter->cc;
+ }
+--- a/funcone.c
++++ b/funcone.c
+@@ -1036,6 +1036,9 @@ main(argc, argv)
+ strncpy(decstr, argv[optind+ioff++], SZ_LINE-1);
+ strncpy(radstr, argv[optind+ioff++], SZ_LINE-1);
+
++ /* dolimfilt does not work with doall */
++ if( doall ) dolimfilt = 0;
++
+ /* process list arguments */
+ if( dolist ){
+ if( !(list=OpenList(lname, rastr, decstr, radstr)) ){
+@@ -1085,6 +1088,8 @@ main(argc, argv)
+ if( !(adbuf=xcalloc(nrow+1, sizeof(char))) ){
+ gerror(stderr, "can't allocate all (-J|-X) buffer of size %d\n", nrow);
+ }
++ /* must read one event at a time, or else we can't tell the event num */
++ maxrow = 1;
+ }
+
+ /* activate columns specified by user, if necessary */
+@@ -1371,7 +1376,7 @@ done:
+ while( (ebuf = (Ev)FunTableRowGet(fun, NULL, maxrow, NULL, &got)) ){
+ /* if we have a filter, then we don't know the row number til after
+ we read the event, i.e. now */
+- if( doall & ALL_FILT ) FunInfoGet(fun, FUN_ROW, &irow, 0);
++ FunInfoGet(fun, FUN_ROW, &irow, 0);
+ /* process all rows */
+ for(i=0; i<got; i++){
+ /* skip rows that already were written out */
+--- a/funtab.c
++++ b/funtab.c
+@@ -1386,7 +1386,7 @@ int FunTableRowPut(fun, rows, nrow, idx, plist)
+ off_t
+ FunTableRowSeek(Fun fun, int nrow, char *plist)
+ #else
+-off_t FunTableRowPut(fun, nrow, plist)
++off_t FunTableRowSeek(fun, nrow, plist)
+ Fun fun;
+ int nrow;
+ char *plist;
+--- a/funim.c
++++ b/funim.c
+@@ -111,9 +111,9 @@ static void *_FunTableBin(fun, buf, plist)
+ /* optional value column for binning */
+ if( fun->vbin >= 0 ){
+ dovcol = 1;
+- voffset = fun->header->table->col[fun->bin[2]].offset;
+- vsize = fun->header->table->col[fun->bin[2]].size;
+- vtype = fun->header->table->col[fun->bin[2]].type;
++ voffset = fun->header->table->col[fun->vbin].offset;
++ vsize = fun->header->table->col[fun->vbin].size;
++ vtype = fun->header->table->col[fun->vbin].type;
+ }
+ else{
+ dovcol = 0;
+--- a/calc.l
++++ b/calc.l
+@@ -284,7 +284,7 @@ static char *_CalcCB(name, client_data)
+ {
+ CalcCols cur;
+ char tbuf[SZ_LINE];
+- char tbuf2[SZ_LINE];
++ char tbuf2[SZ_LINE*2];
+ char tbuf3[SZ_LINE];
+ int i, got, ip;
+
+--- a/util/gio.c
++++ b/util/gio.c
+@@ -2209,7 +2209,7 @@ void gerror(va_alist) va_dcl
+ vsnprintf(_gerrors, SZ_LINE-1, tbuf, args);
+ /* if the error flag is positive, we output immediately */
+ if( (fd != NULL) && _gerror ){
+- fprintf(fd, _gerrors);
++ fputs(_gerrors, fd);
+ fflush(fd);
+ }
+ /* if the error flag is set high, we exit */
+@@ -2281,7 +2281,7 @@ void gwarning(va_alist) va_dcl
+ vsnprintf(_gwarnings, SZ_LINE-1, tbuf, args);
+ /* if the warning flag is positive, we output immediately */
+ if( (fd != NULL) && _gwarning ){
+- fprintf(fd, _gwarnings);
++ fputs(_gwarnings, fd);
+ fflush(fd);
+ }
+ }
diff --git a/sci-astronomy/funtools/files/funtools-1.4.4-fix-autoheader.patch b/sci-astronomy/funtools/files/funtools-1.4.4-fix-autoheader.patch
new file mode 100644
index 000000000000..700408057ba9
--- /dev/null
+++ b/sci-astronomy/funtools/files/funtools-1.4.4-fix-autoheader.patch
@@ -0,0 +1,121 @@
+Author: Ole Streicher <debian@liska.ath.cx>
+Description: Fix the AC_DEFINE lines so that autoheader (and therefore
+ dh_autoreconf) works
+--- a/configure.ac
++++ b/configure.ac
+@@ -193,7 +193,7 @@ AC_MSG_RESULT($fun_ok)
+
+ SC_PATH_TCLCONFIG
+ if test x"${no_tcl}" = x ; then
+- AC_DEFINE(HAVE_TCL)
++ AC_DEFINE([HAVE_TCL], [1], [Define if tcl is used.])
+ fi
+
+ AC_PROG_AWK
+@@ -218,7 +218,7 @@ POST="|\& cat"
+ case $host_os in
+ *cygwin*|*Cygwin* )
+ CFLAGS="$CFLAGS -enable-auto-import"
+- AC_DEFINE(HAVE_CYGWIN)
++ AC_DEFINE([HAVE_CYGWIN], [], [Define if the cygwin compiler is used.])
+ AC_MSG_RESULT(flagging Cygwin)
+ PRE="sh -c {"
+ POST="}"
+@@ -226,7 +226,7 @@ case $host_os in
+ *mingw32*|*Mingw32*)
+ CFLAGS="$CFLAGS -mconsole"
+ EXTRA_LIBS="$EXTRA_LIBS -lwsock32"
+- AC_DEFINE(HAVE_MINGW32)
++ AC_DEFINE([HAVE_MINGW32], [], [Define if the mingw32 compiler is used.])
+ AC_MSG_RESULT(flagging MinGW)
+ ;;
+ *osf*|*Osf*)
+--- a/filter/configure.ac
++++ b/filter/configure.ac
+@@ -150,7 +150,7 @@ PRE=""
+ POST="|\& cat"
+ case $host_os in
+ *cygwin*|*Cygwin* )
+- AC_DEFINE(HAVE_CYGWIN)
++ AC_DEFINE([HAVE_CYGWIN], [], [Define if the cygwin compiler is used.])
+ AC_MSG_RESULT(flagging Cygwin)
+ PRE="sh -c {"
+ POST="}"
+@@ -158,7 +158,7 @@ case $host_os in
+ *mingw32*|*Mingw32*)
+ CFLAGS="$CFLAGS -mconsole"
+ EXTRA_LIBS="$EXTRA_LIBS -lwsock32"
+- AC_DEFINE(HAVE_MINGW32)
++ AC_DEFINE([HAVE_MINGW32], [], [Define if the mingw32 compiler is used.])
+ AC_MSG_RESULT(flagging MinGW)
+ ;;
+ *osf*|*Osf*)
+--- a/fitsy/configure.ac
++++ b/fitsy/configure.ac
+@@ -121,7 +121,7 @@ PRE=""
+ POST="|\& cat"
+ case $host_os in
+ *cygwin*|*Cygwin* )
+- AC_DEFINE(HAVE_CYGWIN)
++ AC_DEFINE([HAVE_CYGWIN], [], [Define if the cygwin compiler is used.])
+ AC_MSG_RESULT(flagging Cygwin)
+ PRE="sh -c {"
+ POST="}"
+@@ -129,7 +129,7 @@ case $host_os in
+ *mingw32*|*Mingw32*)
+ CFLAGS="$CFLAGS -mconsole"
+ EXTRA_LIBS="$EXTRA_LIBS -lwsock32"
+- AC_DEFINE(HAVE_MINGW32)
++ AC_DEFINE([HAVE_MINGW32], [], [Define if the mingw32 compiler is used.])
+ AC_MSG_RESULT(flagging MinGW)
+ ;;
+ *darwin*|*Darwin*)
+--- a/util/configure.ac
++++ b/util/configure.ac
+@@ -133,7 +133,7 @@ fi
+
+ SC_PATH_TCLCONFIG
+ if test x"${no_tcl}" = x ; then
+- AC_DEFINE(HAVE_TCL)
++ AC_DEFINE([HAVE_TCL], [1], [Define if tcl is used.])
+ fi
+
+ AC_MSG_CHECKING(for external zlib)
+@@ -146,7 +146,7 @@ PRE=""
+ POST="|\& cat"
+ case $host_os in
+ *cygwin*|*Cygwin* )
+- AC_DEFINE(HAVE_CYGWIN)
++ AC_DEFINE([HAVE_CYGWIN], [], [Define if the cygwin compiler is used.])
+ AC_MSG_RESULT(flagging Cygwin)
+ PRE="sh -c {"
+ POST="}"
+@@ -154,7 +154,7 @@ case $host_os in
+ *mingw32*|*Mingw32*)
+ CFLAGS="$CFLAGS -mconsole"
+ EXTRA_LIBS="$EXTRA_LIBS -lwsock32"
+- AC_DEFINE(HAVE_MINGW32)
++ AC_DEFINE([HAVE_MINGW32], [], [Define if the mingw32 compiler is used.])
+ AC_MSG_RESULT(flagging MinGW)
+ ;;
+ *osf*|*Osf*)
+--- a/wcs/configure.ac
++++ b/wcs/configure.ac
+@@ -125,7 +125,7 @@ PRE=""
+ POST="|\& cat"
+ case $host_os in
+ *cygwin*|*Cygwin* )
+- AC_DEFINE(HAVE_CYGWIN)
++ AC_DEFINE([HAVE_CYGWIN], [], [Define if the cygwin compiler is used.])
+ AC_MSG_RESULT(flagging Cygwin)
+ PRE="sh -c {"
+ POST="}"
+@@ -133,7 +133,7 @@ case $host_os in
+ *mingw32*|*Mingw32*)
+ CFLAGS="$CFLAGS -mconsole"
+ EXTRA_LIBS="$EXTRA_LIBS -lwsock32"
+- AC_DEFINE(HAVE_MINGW32)
++ AC_DEFINE([HAVE_MINGW32], [], [Define if the mingw32 compiler is used.])
+ AC_MSG_RESULT(flagging MinGW)
+ ;;
+ *osf*|*Osf*)
diff --git a/sci-astronomy/funtools/files/funtools-1.4.4-fix-crashes.patch b/sci-astronomy/funtools/files/funtools-1.4.4-fix-crashes.patch
new file mode 100644
index 000000000000..75d69089ef13
--- /dev/null
+++ b/sci-astronomy/funtools/files/funtools-1.4.4-fix-crashes.patch
@@ -0,0 +1,99 @@
+Author: Ole Streicher <debian@liska.ath.cx>
+Description: Check cmd line arguments for illegal input that caused crashes
+ found with the "Mayhem" tool.
+Bug: http://bugs.debian.org/715928
+Bug: http://bugs.debian.org/715929
+--- a/funjoin.c
++++ b/funjoin.c
+@@ -737,7 +737,7 @@ main(argc, argv)
+ case 'a':
+ if( argv[i][2] ){
+ j = atoi(&argv[i][2])-1;
+- if( (j >= 0) && (j < MAXIFILE) ){
++ if( (j >= 0) && (j < MAXIFILE) && (i < argc-1)){
+ files[j].actstr = argv[++i];
+ }
+ else{
+@@ -751,7 +751,7 @@ main(argc, argv)
+ case 'b':
+ if( argv[i][2] ){
+ j = atoi(&argv[i][2])-1;
+- if( (j >= 0) && (j < MAXIFILE) ){
++ if( (j >= 0) && (j < MAXIFILE) && (i < argc-1)){
+ files[j].bstr = argv[++i];
+ }
+ else{
+@@ -765,7 +765,7 @@ main(argc, argv)
+ case 'j':
+ if( argv[i][2] ){
+ j = atoi(&argv[i][2])-1;
+- if( (j >= 0) && (j < MAXIFILE) ){
++ if( (j >= 0) && (j < MAXIFILE) && (i < argc-1)){
+ files[j].jname = argv[++i];
+ }
+ else{
+@@ -773,25 +773,35 @@ main(argc, argv)
+ }
+ }
+ else{
+- defcol = argv[++i];
++ if (i < argc-1) {
++ defcol = argv[++i];
++ }
+ }
+ break;
+ case 'm':
+- minmatch = atoi(argv[++i])+1;
++ if (i < argc-1) {
++ minmatch = atoi(argv[++i])+1;
++ }
+ if( minmatch < 1 ) minmatch = 1;
+ break;
+ case 'M':
+- maxmatch = atoi(argv[++i])+1;
++ if (i < argc-1) {
++ maxmatch = atoi(argv[++i])+1;
++ }
+ if( maxmatch < 1 ) maxmatch = 1;
+ break;
+ case 's':
+ jfiles = JFILES_COL;
+ break;
+ case 'S':
+- jfiles = argv[++i];
++ if (i < argc-1) {
++ jfiles = argv[++i];
++ }
+ break;
+ case 't':
+- tol = atof(argv[++i]);
++ if (i < argc-1) {
++ tol = atof(argv[++i]);
++ }
+ if( tol <= 0 ){
+ gerror(stderr, "tolerance value must be positive\n");
+ }
+--- a/funimage.c
++++ b/funimage.c
+@@ -338,12 +338,16 @@ main(argc, argv)
+ t = strchr(s, ',');
+ strncat(newname, s, t-s);
+ strncat(newname, ",y:", SZ_LINE-strlen(newname));
+- s = ++t;
+- t = strchr(s, ',');
+- strncat(newname, s, t-s);
++ if (t != NULL) {
++ s = ++t;
++ t = strchr(s, ',');
++ strncat(newname, s, t-s);
++ }
+ strncat(newname, "),", SZ_LINE-strlen(newname));
+- s = ++t;
+- strncat(newname, s, SZ_LINE-strlen(newname));
++ if (t != NULL) {
++ s = ++t;
++ strncat(newname, s, SZ_LINE-strlen(newname));
++ }
+ iname = newname;
+ }
+
diff --git a/sci-astronomy/funtools/files/funtools-1.4.4-fix-hardening.patch b/sci-astronomy/funtools/files/funtools-1.4.4-fix-hardening.patch
new file mode 100644
index 000000000000..2f24268d74f2
--- /dev/null
+++ b/sci-astronomy/funtools/files/funtools-1.4.4-fix-hardening.patch
@@ -0,0 +1,68 @@
+Author: Ole Streicher <debian@liska.ath.cx>
+Description: Fix the format string for fprintf
+--- a/gnu/sort.c
++++ b/gnu/sort.c
+@@ -2775,7 +2775,7 @@
+ xfwrite (buf, 1, cc, ofp);
+ if (ferror (fp))
+ {
+- fprintf (stderr, files[i]);
++ fprintf (stderr, "%s", files[i]);
+ cleanup ();
+ exit (2);
+ }
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -137,7 +137,7 @@
+
+ CC = @CC@
+
+-CC_SWITCHES = -I. ${CFLAGS} @USE_DL@ ${INCLUDES} ${AC_FLAGS}
++CC_SWITCHES = -I. ${CFLAGS} ${CPPFLAGS} @USE_DL@ ${INCLUDES} ${AC_FLAGS}
+
+ DEPEND_SWITCHES = -I. ${CFLAGS} ${INCLUDES} ${AC_FLAGS}
+
+--- a/filter/Makefile.in
++++ b/filter/Makefile.in
+@@ -114,7 +114,7 @@
+
+ CC = @CC@
+
+-CC_SWITCHES = -I. ${CFLAGS} -DFILT_VERSION="\"$(VERSION)\"" @USE_DL@ \
++CC_SWITCHES = -I. ${CFLAGS} ${CPPFLAGS} -DFILT_VERSION="\"$(VERSION)\"" @USE_DL@ \
+ ${INCLUDES} ${AC_FLAGS}
+
+ DEPEND_SWITCHES = -I. ${CFLAGS} -I. ${INCLUDES} ${AC_FLAGS}
+--- a/gnu/Makefile.in
++++ b/gnu/Makefile.in
+@@ -87,7 +87,7 @@
+
+ CC = @CC@
+
+-CC_SWITCHES = ${CFLAGS} ${INCLUDES} ${AC_FLAGS}
++CC_SWITCHES = ${CFLAGS} ${CPPFLAGS} ${INCLUDES} ${AC_FLAGS}
+
+ DEPEND_SWITCHES = ${CFLAGS} ${INCLUDES} ${AC_FLAGS}
+
+--- a/util/Makefile.in
++++ b/util/Makefile.in
+@@ -105,7 +105,7 @@
+
+ CC = @CC@
+
+-CC_SWITCHES = -I. ${CFLAGS} @USE_DL@ ${INCLUDES} ${AC_FLAGS}
++CC_SWITCHES = -I. ${CFLAGS} ${CPPFLAGS} @USE_DL@ ${INCLUDES} ${AC_FLAGS}
+
+ DEPEND_SWITCHES = -I. ${CFLAGS} ${INCLUDES} ${AC_FLAGS}
+
+--- a/mklib
++++ b/mklib
+@@ -169,7 +169,7 @@
+ rm -f ${LIBNAME}.so
+
+ # make lib
+- ${LINK} ${OPTS} -o ${LIBNAME}.so.${VERSION} ${OBJECTS} ${DEPS}
++ ${LINK} ${LDFLAGS} ${OPTS} -o ${LIBNAME}.so.${VERSION} ${OBJECTS} ${DEPS}
+ # make usual symlinks
+ ln -s ${LIBNAME}.so.${VERSION} ${LIBNAME}.so.${MAJOR}
+ ln -s ${LIBNAME}.so.${MAJOR} ${LIBNAME}.so
diff --git a/sci-astronomy/funtools/files/funtools-1.4.4-fix-includes.patch b/sci-astronomy/funtools/files/funtools-1.4.4-fix-includes.patch
new file mode 100644
index 000000000000..4068ace7f810
--- /dev/null
+++ b/sci-astronomy/funtools/files/funtools-1.4.4-fix-includes.patch
@@ -0,0 +1,602 @@
+Author: Ole Streicher <debian@liska.ath.cx>
+Description: The include files are going to be installed in
+ /usr/include/funtools. So, they should refer to each other by using ""
+ instead of <> which also searches in the current directory.
+--- a/filter/column.h
++++ b/filter/column.h
+@@ -12,14 +12,14 @@
+ #define __column_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+
+ #ifdef HAVE_STRING_H
+ #include <string.h>
+ #endif
+
+-#include <prsetup.h>
++#include "prsetup.h"
+ _PRbeg
+
+ void ColumnLoad _PRx((char *ibuf, int size, int n, int convert, void *obuf));
+--- a/filter/dl.h
++++ b/filter/dl.h
+@@ -2,14 +2,14 @@
+ #define __dl_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+
+ #ifdef HAVE_DLFCN_H
+ #include <dlfcn.h>
+ #endif
+
+-#include <prsetup.h>
++#include "prsetup.h"
+
+ _PRbeg
+
+--- a/filter/filter.h
++++ b/filter/filter.h
+@@ -12,7 +12,7 @@
+ #define __filter_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+
+ /* avoid use of system -- its not secure */
+@@ -34,28 +34,28 @@
+ #include <string.h>
+ #endif
+ #include <sys/types.h>
+-#include <prsetup.h>
+-#include <gio.h>
+-#include <file.h>
+-#include <find.h>
+-#include <macro.h>
+-#include <word.h>
+-#include <xalloc.h>
+-#include <strtod.h>
++#include "prsetup.h"
++#include "gio.h"
++#include "file.h"
++#include "find.h"
++#include "macro.h"
++#include "word.h"
++#include "xalloc.h"
++#include "strtod.h"
+ #define USE_XFILEIO 1
+-#include <fitsy.h>
++#include "fitsy.h"
+ #undef USE_XFILEIO
+-#include <idx.h>
+-#include <wcs.h>
+-#include <column.h>
+-#include <tl.h>
+-#include <dl.h>
+-#include <mkrtemp.h>
+-#include <zprocess.h>
+-#include <winprocess.h>
+-#include <parse.h>
++#include "idx.h"
++#include "wcs.h"
++#include "column.h"
++#include "tl.h"
++#include "dl.h"
++#include "mkrtemp.h"
++#include "zprocess.h"
++#include "winprocess.h"
++#include "parse.h"
+ #ifdef USE_LAUNCH
+-#include <xlaunch.h>
++#include "xlaunch.h"
+ #endif
+
+ #ifndef OBJPATH
+--- a/filter/idx.h
++++ b/filter/idx.h
+@@ -11,9 +11,9 @@
+ #define __idx_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+-#include <prsetup.h>
++#include "prsetup.h"
+ #include <stdio.h>
+ #include <ctype.h>
+ #ifdef HAVE_UNISTD_H
+@@ -22,10 +22,10 @@
+ #ifdef HAVE_STRING_H
+ #include <string.h>
+ #endif
+-#include <fitsy.h>
+-#include <gio.h>
+-#include <xalloc.h>
+-#include <strtod.h>
++#include "fitsy.h"
++#include "gio.h"
++#include "xalloc.h"
++#include "strtod.h"
+
+ /* binary search edge */
+ #define IDX_EDGE_LEFT 1
+--- a/filter/tl.h
++++ b/filter/tl.h
+@@ -11,7 +11,7 @@
+ #ifndef __tl_h
+ #define __tl_h
+
+-#include <prsetup.h>
++#include "prsetup.h"
+
+ _PRbeg
+
+--- a/fitsy/fitsy.h
++++ b/fitsy/fitsy.h
+@@ -5,13 +5,13 @@
+ #define FITSY_H
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+
+ #if USE_XFILEIO
+-#include <xfileio.h>
++#include "xfileio.h"
+ #else
+-#include <xfile.h>
++#include "xfile.h"
+ #endif
+
+ #ifdef __STDC__
+@@ -30,7 +30,7 @@
+
+ #include <ctype.h>
+
+-#include <longlong.h>
++#include "longlong.h"
+
+ #ifndef NULL
+ #define NULL 0
+--- a/funtools.h
++++ b/funtools.h
+@@ -27,11 +27,11 @@
+ #define FUN_VERSION "1.4.4"
+
+ #ifndef FUNTOOLS_PRIVATE
+-#include <prsetup.h>
++#include "prsetup.h"
+ #define USE_XFILEIO 1
+-#include <fitsy.h>
++#include "fitsy.h"
+ #undef USE_XFILEIO
+-#include <wcs.h>
++#include "wcs.h"
+ typedef void *Fun;
+ #endif
+
+--- a/funtoolsP.h
++++ b/funtoolsP.h
+@@ -12,7 +12,7 @@
+ #define __funtoolsP_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+
+ #include <stdio.h>
+@@ -32,20 +32,20 @@
+ #include <getopt.h>
+ #endif
+ #include <sys/types.h>
+-#include <prsetup.h>
++#include "prsetup.h"
+ #define USE_XFILEIO 1
+-#include <fitsy.h>
++#include "fitsy.h"
+ #undef USE_XFILEIO
+-#include <wcs.h>
+-#include <filter.h>
+-#include <file.h>
+-#include <swap.h>
+-#include <word.h>
+-#include <parse.h>
+-#include <xalloc.h>
+-#include <mkrtemp.h>
+-#include <NaN.h>
+-#include <xlaunch.h>
++#include "wcs.h"
++#include "filter.h"
++#include "file.h"
++#include "swap.h"
++#include "word.h"
++#include "parse.h"
++#include "xalloc.h"
++#include "mkrtemp.h"
++#include "NaN.h"
++#include "xlaunch.h"
+
+ #ifndef MAXINT
+ #define MAXINT 2147483647
+@@ -338,6 +338,6 @@ int FunView _PRx((Fun fun, char *view, char *vmode, char *fname, int fmax));
+
+ _PRend
+
+-#include <funtools.h>
++#include "funtools.h"
+
+ #endif /* __funtoolsP.h */
+--- a/ofuntools.h
++++ b/ofuntools.h
+@@ -27,11 +27,11 @@
+ #define FUN_VERSION "1.4.4"
+
+ #ifndef FUNTOOLS_PRIVATE
+-#include <prsetup.h>
++#include "prsetup.h"
+ #define USE_XFILEIO 1
+-#include <fitsy.h>
++#include "fitsy.h"
+ #undef USE_XFILEIO
+-#include <wcs.h>
++#include "wcs.h"
+ typedef void *Fun;
+ #endif
+
+--- a/util/NaN.h.in
++++ b/util/NaN.h.in
+@@ -20,7 +20,7 @@
+ #ifndef __nan_h
+ #define __nan_h
+
+-#include <prsetup.h>
++#include "prsetup.h"
+
+ #define BIGENDIAN @BIGENDIAN@
+
+--- a/util/file.h
++++ b/util/file.h
+@@ -12,7 +12,7 @@
+ #define __file_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+
+ #include <stdio.h>
+@@ -28,9 +28,9 @@
+ #endif
+ #include <sys/types.h>
+ #include <sys/stat.h>
+-#include <prsetup.h>
+-#include <macro.h>
+-#include <xalloc.h>
++#include "prsetup.h"
++#include "macro.h"
++#include "xalloc.h"
+
+ _PRbeg
+ int FileExists _PRx((char *filename));
+--- a/util/find.h
++++ b/util/find.h
+@@ -12,7 +12,7 @@
+ #define __find_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+
+ #include <stdio.h>
+@@ -25,8 +25,8 @@
+ #endif
+ #include <sys/types.h>
+ #include <sys/stat.h>
+-#include <xalloc.h>
+-#include <prsetup.h>
++#include "xalloc.h"
++#include "prsetup.h"
+
+ _PRbeg
+
+--- a/util/gio.h
++++ b/util/gio.h
+@@ -11,10 +11,10 @@
+ #ifndef _gio_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+
+-#include <xport.h>
++#include "xport.h"
+
+ #include <stdio.h>
+ #ifdef HAVE_STRING_H
+@@ -46,8 +46,8 @@
+ #include <sys/stat.h>
+ #include <sys/time.h>
+
+-#include <prsetup.h>
+-#include <xalloc.h>
++#include "prsetup.h"
++#include "xalloc.h"
+
+ /* use ftello/fseeko (assuming its available) if we are using 64-bit offsets */
+ #if _FILE_OFFSET_BITS == 64
+--- a/util/macro.h
++++ b/util/macro.h
+@@ -12,7 +12,7 @@
+ #define __macro_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+
+ #include <stdio.h>
+@@ -26,7 +26,7 @@
+ #ifdef HAVE_STDLIB_H
+ #include <stdlib.h>
+ #endif
+-#include <prsetup.h>
++#include "prsetup.h"
+
+ typedef char *(*MacroCall)(
+ #ifdef ANSI_FUNC
+--- a/util/mainlib.h
++++ b/util/mainlib.h
+@@ -12,7 +12,7 @@
+ #define __mainlib_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+ #ifdef HAVE_STRING_H
+ #include <string.h>
+@@ -29,11 +29,11 @@
+ #include <stdio.h>
+ #include <errno.h>
+ #include <sys/types.h>
+-#include <prsetup.h>
+-#include <xalloc.h>
+-#include <word.h>
+-#include <find.h>
+-#include <gio.h>
++#include "prsetup.h"
++#include "xalloc.h"
++#include "word.h"
++#include "find.h"
++#include "gio.h"
+
+ /* types of mainlibs we recognize */
+ #define MAINLIB_ERROR 0
+--- a/util/mkrtemp.h
++++ b/util/mkrtemp.h
+@@ -12,7 +12,7 @@
+ #define __mkrtemp_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+
+ #include <sys/types.h>
+@@ -31,9 +31,9 @@
+ #ifdef HAVE_STDLIB_H
+ #include <stdlib.h>
+ #endif
+-#include <prsetup.h>
+-#include <word.h>
+-#include <xalloc.h>
++#include "prsetup.h"
++#include "word.h"
++#include "xalloc.h"
+
+ #ifdef __APPLE__
+ #define lrand48 random
+--- a/util/parse.h
++++ b/util/parse.h
+@@ -12,7 +12,7 @@
+ #define __parse_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+
+ #include <stdio.h>
+@@ -33,12 +33,12 @@
+ #endif
+ #include <ctype.h>
+
+-#include <prsetup.h>
+-#include <strtod.h>
+-#include <xalloc.h>
+-#include <word.h>
+-#include <gio.h>
+-#include <longlong.h>
++#include "prsetup.h"
++#include "strtod.h"
++#include "xalloc.h"
++#include "word.h"
++#include "gio.h"
++#include "longlong.h"
+
+ #define PARSE_DEBUG 1
+ #if PARSE_DEBUG
+--- a/util/strtod.h
++++ b/util/strtod.h
+@@ -11,7 +11,7 @@
+ #ifndef __strtod_h
+ #define __strtod_h
+
+-#include <prsetup.h>
++#include "prsetup.h"
+
+ extern int SAOdtype;
+
+--- a/util/swap.h
++++ b/util/swap.h
+@@ -11,7 +11,7 @@
+ #ifndef __swap_h
+ #define __swap_h
+
+-#include <prsetup.h>
++#include "prsetup.h"
+
+ /* data types */
+ #define TY_CHAR 1
+--- a/util/tclmainlib.h
++++ b/util/tclmainlib.h
+@@ -1,4 +1,4 @@
+-#include <mainlib.h>
++#include "mainlib.h"
+
+ #if HAVE_TCL
+
+--- a/util/winprocess.h
++++ b/util/winprocess.h
+@@ -13,7 +13,7 @@
+ #define __winprocess_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+ #include <stdio.h>
+ #ifdef HAVE_UNISTD_H
+@@ -25,7 +25,7 @@
+ #ifdef HAVE_STDLIB_H
+ #include <stdlib.h>
+ #endif
+-#include <prsetup.h>
++#include "prsetup.h"
+
+ #if defined(HAVE_CYGWIN) || defined(WIN32)
+
+--- a/util/word.h
++++ b/util/word.h
+@@ -12,7 +12,7 @@
+ #define __word_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+ #ifdef HAVE_STRING_H
+ #include <string.h>
+@@ -23,8 +23,8 @@
+ #if HAVE_STDLIB_H
+ #include <stdlib.h>
+ #endif
+-#include <prsetup.h>
+-#include <xalloc.h>
++#include "prsetup.h"
++#include "xalloc.h"
+
+ /* defines the types of callback procedure we use */
+ typedef char *(*MacroCB)(
+--- a/util/xalloc.h
++++ b/util/xalloc.h
+@@ -12,7 +12,7 @@
+ #define __xalloc_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+
+ #include <sys/types.h>
+@@ -33,7 +33,7 @@
+ #include <setjmp.h>
+ #endif
+
+-#include <prsetup.h>
++#include "prsetup.h"
+
+ _PRbeg
+
+--- a/util/xfileio.h
++++ b/util/xfileio.h
+@@ -7,7 +7,7 @@
+ #ifndef XFILEIO_H
+ #define XFILEIO_H
+
+-#include <gio.h>
++#include "gio.h"
+
+ /* define the basic IO routines */
+ typedef GIO File;
+--- a/util/xlaunch.h
++++ b/util/xlaunch.h
+@@ -12,7 +12,7 @@
+ #define __xlaunch_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+
+ #include <stdio.h>
+@@ -33,10 +33,10 @@
+ #if HAVE_POSIX_SPAWN
+ #include <spawn.h>
+ #endif
+-#include <xport.h>
+-#include <word.h>
+-#include <xalloc.h>
+-#include <prsetup.h>
++#include "xport.h"
++#include "word.h"
++#include "xalloc.h"
++#include "prsetup.h"
+
+ #define LAUNCH_ARGS 1024
+
+--- a/util/xport.h
++++ b/util/xport.h
+@@ -11,7 +11,7 @@
+ #define __xport_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+
+ #if HAVE_MINGW32
+--- a/util/zprocess.h
++++ b/util/zprocess.h
+@@ -14,7 +14,7 @@
+ #define __zprocess_h
+
+ #if HAVE_CONFIG_H
+-#include <conf.h>
++#include "conf.h"
+ #endif
+ #include <stdio.h>
+ #ifdef HAVE_UNISTD_H
+@@ -28,8 +28,8 @@
+ #endif
+ #include <sys/time.h>
+ #include <signal.h>
+-#include <xlaunch.h>
+-#include <find.h>
++#include "xlaunch.h"
++#include "find.h"
+
+ _PRbeg
+
diff --git a/sci-astronomy/funtools/files/funtools-1.4.4-makefiles.patch b/sci-astronomy/funtools/files/funtools-1.4.4-makefiles.patch
new file mode 100644
index 000000000000..d1045b643176
--- /dev/null
+++ b/sci-astronomy/funtools/files/funtools-1.4.4-makefiles.patch
@@ -0,0 +1,341 @@
+diff -Nur funtools-1.4.4.orig/filter/Makefile.in funtools-1.4.4/filter/Makefile.in
+--- funtools-1.4.4.orig/filter/Makefile.in 2014-03-04 08:35:59.665478514 -0800
++++ funtools-1.4.4/filter/Makefile.in 2014-03-04 08:36:38.196760766 -0800
+@@ -29,6 +29,9 @@
+
+ prefix = @prefix@
+ exec_prefix = @exec_prefix@
++bindir = @bindir@
++includedir = @includedir@
++libdir = @libdir@
+
+ # The following definition can be set to non-null for special systems
+ # like AFS with replication. It allows the pathnames used for installation
+@@ -38,13 +41,13 @@
+ INSTALL_ROOT =
+
+ # Directory in which to install the .a, .so, and .o files:
+-LIB_INSTALL_DIR = $(INSTALL_ROOT)$(exec_prefix)/lib
++LIB_INSTALL_DIR = $(INSTALL_ROOT)$(libdir)
+
+ # Directory in which to install the programs:
+-BIN_INSTALL_DIR = $(INSTALL_ROOT)$(exec_prefix)/bin
++BIN_INSTALL_DIR = $(INSTALL_ROOT)$(bindir)
+
+ # Directory in which to install the include files:
+-INCLUDE_INSTALL_DIR = $(INSTALL_ROOT)$(prefix)/include
++INCLUDE_INSTALL_DIR = $(INSTALL_ROOT)$(includedir)/funtools/filter
+
+ # util files are in the util directory at same level
+ UTIL_INC = -I../util
+@@ -55,7 +58,7 @@
+ #FITSY_LIBS = -L../fitsy
+
+ # wcs files are in the wcs subdirectory
+-WCS_INC = -I../wcs
++#WCS_INC = -I../wcs
+ #WCS_LIBS = -L../wcs -lwcs
+
+ # extra includes for compiling
+@@ -161,7 +164,7 @@
+ do \
+ if [ ! -d $$i ] ; then \
+ echo "Making directory $$i"; \
+- mkdir $$i; \
++ mkdir -p $$i; \
+ chmod 755 $$i; \
+ else true; \
+ fi; \
+@@ -228,6 +231,10 @@
+
+ swap_c.h: swap.c inc.sed
+ $(RM) swap_c.h
++ ./inc.sed SWAP_C < swap.c > swap_c.h
++
++swap_c.h: swap.c inc.sed
++ $(RM) swap_c.h
+ ./inc.sed SWAP_C < swap.c > swap_c.h
+
+ events_c.h: evfilter.c inc.sed
+diff -Nur funtools-1.4.4.orig/fitsy/Makefile.in funtools-1.4.4/fitsy/Makefile.in
+--- funtools-1.4.4.orig/fitsy/Makefile.in 2014-03-04 08:35:59.638478312 -0800
++++ funtools-1.4.4/fitsy/Makefile.in 2014-03-04 08:36:38.197760773 -0800
+@@ -28,6 +28,11 @@
+
+ prefix = @prefix@
+ exec_prefix = @exec_prefix@
++bindir = @bindir@
++includedir = @includedir@
++mandir = @mandir@
++datadir = @datadir@
++libdir = @libdir@
+
+ # The following definition can be set to non-null for special systems
+ # like AFS with replication. It allows the pathnames used for installation
+@@ -37,13 +42,13 @@
+ INSTALL_ROOT =
+
+ # Directory in which to install the .a, .so, and .o files:
+-LIB_INSTALL_DIR = $(INSTALL_ROOT)$(exec_prefix)/lib
++LIB_INSTALL_DIR = $(INSTALL_ROOT)$(libdir)
+
+ # Directory in which to install the programs:
+-BIN_INSTALL_DIR = $(INSTALL_ROOT)$(exec_prefix)/bin
++BIN_INSTALL_DIR = $(INSTALL_ROOT)$(bindir)
+
+ # Directory in which to install the include files:
+-INCLUDE_INSTALL_DIR = $(INSTALL_ROOT)$(prefix)/include
++INCLUDE_INSTALL_DIR = $(INSTALL_ROOT)$(includedir)/funtools/fitsy
+
+ # There are just too many different versions of "install" around;
+ # better to use the install-sh script that comes with the distribution,
+@@ -187,7 +192,7 @@
+ do \
+ if [ ! -d $$i ] ; then \
+ echo "Making directory $$i"; \
+- mkdir $$i; \
++ mkdir -p $$i; \
+ chmod 755 $$i; \
+ else true; \
+ fi; \
+diff -Nur funtools-1.4.4.orig/gnu/Makefile.in funtools-1.4.4/gnu/Makefile.in
+--- funtools-1.4.4.orig/gnu/Makefile.in 2014-03-04 08:35:59.642478341 -0800
++++ funtools-1.4.4/gnu/Makefile.in 2014-03-04 08:36:38.197760773 -0800
+@@ -21,6 +21,11 @@
+
+ prefix = @prefix@
+ exec_prefix = @exec_prefix@
++bindir = @bindir@
++includedir = @includedir@
++mandir = @mandir@
++datadir = @datadir@
++libdir = @libdir@
+
+ # The following definition can be set to non-null for special systems
+ # like AFS with replication. It allows the pathnames used for installation
+@@ -53,13 +58,13 @@
+ EXTRA_OBJS = @EXTRA_OBJS@
+
+ # Directory in which to install the .a, .so, and .o files:
+-LIB_INSTALL_DIR = $(INSTALL_ROOT)$(exec_prefix)/lib
++LIB_INSTALL_DIR = $(INSTALL_ROOT)$(libdir)
+
+ # Directory in which to install the programs:
+-BIN_INSTALL_DIR = $(INSTALL_ROOT)$(exec_prefix)/bin
++BIN_INSTALL_DIR = $(INSTALL_ROOT)$(bindir)
+
+ # Directory in which to install the include files:
+-INCLUDE_INSTALL_DIR = $(INSTALL_ROOT)$(prefix)/include
++INCLUDE_INSTALL_DIR = $(INSTALL_ROOT)$(includedir)
+
+ # There are just too many different versions of "install" around;
+ # better to use the install-sh script that comes with the distribution,
+diff -Nur funtools-1.4.4.orig/Makefile.in funtools-1.4.4/Makefile.in
+--- funtools-1.4.4.orig/Makefile.in 2014-03-04 08:35:59.665478514 -0800
++++ funtools-1.4.4/Makefile.in 2014-03-04 08:37:40.214224788 -0800
+@@ -28,28 +28,33 @@
+
+ prefix = @prefix@
+ exec_prefix = @exec_prefix@
++bindir = @bindir@
++includedir = @includedir@
++mandir = @mandir@
++datadir = @datadir@
++libdir = @libdir@
+
+ # The following definition can be set to non-null for special systems
+ # like AFS with replication. It allows the pathnames used for installation
+ # to be different than those used for actually reference files at
+ # run-time. INSTALL_ROOT is prepended to $prefix and $exec_prefix
+ # when installing files.
+-INSTALL_ROOT =
++INSTALL_ROOT = $(DESTDIR)
+
+ # Directory in which to install the .a or .so binary for the FUNTOOLS library:
+-LIB_INSTALL_DIR = $(INSTALL_ROOT)$(exec_prefix)/lib
++LIB_INSTALL_DIR = $(INSTALL_ROOT)$(libdir)
+
+ # Directory in which to install the program wish:
+-BIN_INSTALL_DIR = $(INSTALL_ROOT)$(exec_prefix)/bin
++BIN_INSTALL_DIR = $(INSTALL_ROOT)$(bindir)
+
+ # Directory in which to install the funtools.h include file:
+-INCLUDE_INSTALL_DIR = $(INSTALL_ROOT)$(prefix)/include
++INCLUDE_INSTALL_DIR = $(INSTALL_ROOT)$(includedir)/funtools
+
+ # Top-level directory for manual entries:
+-MAN_INSTALL_DIR = $(INSTALL_ROOT)$(prefix)/man
++MAN_INSTALL_DIR = $(INSTALL_ROOT)$(mandir)
+
+ # Top-level directory for share entries:
+-MAN_SHARE_DIR = $(INSTALL_ROOT)$(prefix)/share/funtools
++MAN_SHARE_DIR = $(INSTALL_ROOT)$(datadir)/funtools
+
+ # util files are in the util subdirectory
+ UTIL_INC = -I./util
+@@ -60,8 +65,8 @@
+ # FITSY_LIBS = -L./fitsy -lfitsy
+
+ # wcs files are in the wcs subdirectory
+-WCS_INC = -I./wcs
+-# WCS_LIBS = -L./wcs -lwcs
++#WCS_INC = -I../wcs
++#WCS_LIBS = -L./wcs -lwcs
+
+ # filter files are in the filter subdirectory
+ FILTER_INC = -I./filter
+@@ -160,7 +165,7 @@
+
+ # this is used in the link line
+ # LLIB = $(LIB)
+-LLIB = @LLIB@
++LLIB = -L. -lfuntools
+
+ # libraries containing main as subroutines
+ MAINLIB = lib$(PACKAGE)MainLib.a
+@@ -188,7 +193,7 @@
+
+ # Subdirectories to run make in for the primary targets.
+
+-SUBLIBS = util fitsy wcs filter
++SUBLIBS = util fitsy filter
+
+ SUBDIRS = $(SUBLIBS) gnu funtest faq
+
+@@ -225,10 +230,10 @@
+ echo $(PROGS) | ./mkfunmainlib > funmainlib.c;
+
+ shlib: sublib $(LIBOBJS)
+- @(rm -rf $(PACKAGE)tmp; mkdir $(PACKAGE)tmp; \
++ @(rm -rf $(PACKAGE)tmp; mkdir -p $(PACKAGE)tmp; \
+ (cd $(PACKAGE)tmp && ar x ../$(LIB)); \
+ CC='$(CC)' CXX=$(CXX) \
+- ./mklib -o $(PACKAGE) $(PACKAGE)tmp/*.o; \
++ ./mklib $(PACKAGE)tmp/*.o $(LIBS) -o $(PACKAGE) ; \
+ rm -rf $(PACKAGE)tmp;)
+
+ mainlib: $(MAINLIBOBJS) funmainlib.o lex.calc.o
+@@ -237,7 +242,7 @@
+ $(RANLIB) lib$(PACKAGE)MainLib.a)
+
+ shmainlib: mainlib
+- @(rm -rf $(PACKAGE)tmp; mkdir $(PACKAGE)tmp; \
++ @(rm -rf $(PACKAGE)tmp; mkdir -p $(PACKAGE)tmp; \
+ (cd $(PACKAGE)tmp && ar x ../lib$(PACKAGE)MainLib.a); \
+ CC='$(CC)' CXX='$(CXX)' \
+ ./mklib -o $(PACKAGE)MainLib -L. -lfuntools $(PACKAGE)tmp/*.o;\
+@@ -248,7 +253,7 @@
+ $(RANLIB) libtclfun.a)
+
+ shtclfun: tclfun
+- @(rm -rf $(PACKAGE)tmp; mkdir $(PACKAGE)tmp; \
++ @(rm -rf $(PACKAGE)tmp; mkdir -p $(PACKAGE)tmp; \
+ (cd $(PACKAGE)tmp && ar x ../$(LIB) && ar x ../libtclfun.a); \
+ CC='$(CC)' CXX='$(CXX)' \
+ ./mklib -o tclfun $(PACKAGE)tmp/*.o; \
+@@ -386,7 +391,7 @@
+ @for dir in $(SUBDIRS); do \
+ echo " "; \
+ echo Installing in $$dir ...; \
+- (cd $$dir; $(MAKE) $@) ; \
++ (cd $$dir; $(MAKE) INSTALL_ROOT=$(INSTALL_ROOT) INCLUDE_INSTALL_DIR=$(INCLUDE_INSTALL_DIR) $@) ; \
+ done
+
+ install:: install-man
+@@ -422,7 +427,7 @@
+ do \
+ if [ ! -d $$i ] ; then \
+ echo "Making directory $$i"; \
+- mkdir $$i; \
++ mkdir -p $$i; \
+ chmod 755 $$i; \
+ else true; \
+ fi; \
+@@ -462,7 +467,7 @@
+ install-man:
+ @if [ ! -d $(MAN_INSTALL_DIR) ] ; then \
+ echo "Making directory $(MAN_INSTALL_DIR)"; \
+- mkdir $(MAN_INSTALL_DIR); \
++ mkdir -p $(MAN_INSTALL_DIR); \
+ chmod 755 $(MAN_INSTALL_DIR); \
+ else true; \
+ fi;
+@@ -473,7 +478,7 @@
+ M="$(MAN_INSTALL_DIR)/man$$E"; \
+ if [ ! -d $$M ] ; then \
+ echo "Making directory $$M"; \
+- mkdir $$M; \
++ mkdir -p $$M; \
+ chmod 755 $$M; \
+ else true; \
+ fi; \
+diff -Nur funtools-1.4.4.orig/util/Makefile.in funtools-1.4.4/util/Makefile.in
+--- funtools-1.4.4.orig/util/Makefile.in 2014-03-04 08:35:59.653478425 -0800
++++ funtools-1.4.4/util/Makefile.in 2014-03-04 08:36:38.197760773 -0800
+@@ -29,6 +29,11 @@
+
+ prefix = @prefix@
+ exec_prefix = @exec_prefix@
++bindir = @bindir@
++includedir = @includedir@
++mandir = @mandir@
++datadir = @datadir@
++libdir = @libdir@
+
+ # The following definition can be set to non-null for special systems
+ # like AFS with replication. It allows the pathnames used for installation
+@@ -38,13 +43,13 @@
+ INSTALL_ROOT =
+
+ # Directory in which to install the .a, .so, and .o files:
+-LIB_INSTALL_DIR = $(INSTALL_ROOT)$(exec_prefix)/lib
++LIB_INSTALL_DIR = $(INSTALL_ROOT)$(libdir)
+
+ # Directory in which to install the programs:
+-BIN_INSTALL_DIR = $(INSTALL_ROOT)$(exec_prefix)/bin
++BIN_INSTALL_DIR = $(INSTALL_ROOT)$(bindir)
+
+ # Directory in which to install the include files:
+-INCLUDE_INSTALL_DIR = $(INSTALL_ROOT)$(prefix)/include
++INCLUDE_INSTALL_DIR = $(INSTALL_ROOT)$(includedir)/funtools/util
+
+ # extra includes for compiling
+ INCLUDES =
+@@ -200,12 +205,24 @@
+ tlaunch2: tlaunch2.o
+ $(CC) $(LDFLAGS) tlaunch2.o -o tlaunch2
+
++tlaunch.o: tlaunch.c
++
++tlaunch: tlaunch.o launch.o $(LIB)
++ $(CC) $(LDFLAGS) tlaunch.o launch.o -o tlaunch $(LIB) $(LIBS) \
++ $(EXTRA_LIBS)
++
++tlaunch2.o: tlaunch2.c
++
++tlaunch2: tlaunch2.o
++ $(CC) $(LDFLAGS) tlaunch2.o -o tlaunch2
++
++
+ install-binaries: $(LIB) $(PROGS)
+ @for i in $(LIB_INSTALL_DIR) $(INCLUDE_INSTALL_DIR) $(BIN_INSTALL_DIR) ; \
+ do \
+ if [ ! -d $$i ] ; then \
+ echo "Making directory $$i"; \
+- mkdir $$i; \
++ mkdir -p $$i; \
+ chmod 755 $$i; \
+ else true; \
+ fi; \
+@@ -272,4 +289,11 @@
+ purift $(CC) $(LDFLAGS) tlaunch.o xlaunch.o -o tlaunch \
+ $(LIB) $(LIBS) $(EXTRA_LIBS)
+
++pure: tlaunch.pure
++
++tlaunch.pure: tlaunch.o launch.o $(LIB)
++ purift $(CC) $(LDFLAGS) tlaunch.o launch.o -o tlaunch \
++ $(LIB) $(LIBS) $(EXTRA_LIBS)
++
++
+ # DO NOT DELETE THIS LINE -- make depend depends on it.
diff --git a/sci-astronomy/funtools/funtools-1.4.4-r4.ebuild b/sci-astronomy/funtools/funtools-1.4.4-r4.ebuild
new file mode 100644
index 000000000000..dff3ed4d0d85
--- /dev/null
+++ b/sci-astronomy/funtools/funtools-1.4.4-r4.ebuild
@@ -0,0 +1,62 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+inherit eutils toolchain-funcs multilib autotools
+
+DESCRIPTION="FITS library and utlities for astronomical images"
+HOMEPAGE="http://www.cfa.harvard.edu/~john/funtools/"
+SRC_URI="http://cfa-www.harvard.edu/~john/${PN}/${P}.tar.gz"
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~x86 ~amd64-linux ~x86-linux"
+IUSE="doc static-libs"
+
+RDEPEND="
+ sys-libs/zlib
+ sci-astronomy/wcstools
+ sci-visualization/gnuplot"
+DEPEND="${RDEPEND}
+ virtual/pkgconfig"
+
+src_prepare() {
+ epatch \
+ "${FILESDIR}"/${P}-ds9-fixes.patch \
+ "${FILESDIR}"/${P}-fix-autoheader.patch \
+ "${FILESDIR}"/${P}-fix-includes.patch \
+ "${FILESDIR}"/${P}-fix-hardening.patch \
+ "${FILESDIR}"/${P}-fix-crashes.patch \
+ "${FILESDIR}"/${P}-makefiles.patch
+ sed -i -e "s:/usr:${EPREFIX}/usr:g" filter/Makefile.in || die
+ sed -i \
+ -e "s:\${LINK}:\${LINK} ${LDFLAGS}:" \
+ mklib || die "sed for ldflags failed"
+ eautoreconf
+}
+
+src_configure() {
+ econf \
+ --enable-shared \
+ --enable-dl \
+ --enable-mainlib \
+ --with-wcslib="$($(tc-getPKG_CONFIG) --libs wcstools)" \
+ --with-zlib="$($(tc-getPKG_CONFIG) --libs zlib)" \
+ --with-tcl=-ltcl
+}
+
+src_compile() {
+ emake WCS_INC="$($(tc-getPKG_CONFIG) --cflags wcstools)"
+ emake shtclfun
+}
+
+src_install () {
+ default
+ dosym libtclfun.so.1 /usr/$(get_libdir)/libtclfun.so
+ # install missing includes
+ insinto /usr/include/funtools/fitsy
+ doins fitsy/*.h
+ use static-libs || rm "${ED}"/usr/$(get_libdir)/lib*.a
+ use doc && cd doc && dodoc *.pdf && dohtml *html *c
+}
diff --git a/sci-astronomy/funtools/metadata.xml b/sci-astronomy/funtools/metadata.xml
new file mode 100644
index 000000000000..e5ca7e8ca451
--- /dev/null
+++ b/sci-astronomy/funtools/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<herd>sci-astronomy</herd>
+<longdescription lang="en">
+ Funtools, is a minimal buy-in FITS library and utility package from
+ the SAO/HEAD. The Funtools library provides simplified
+ access to FITS images and binary tables, as well as to raw array and binary
+ event lists. The Funtools utilities provide high-level support for
+ processing astronomical data.
+</longdescription>
+</pkgmetadata>