Subject: bin/4224: gcc uses /var/tmp rather than /tmp
To: None <>
From: None <>
List: netbsd-bugs
Date: 10/06/1997 05:46:34
>Number:         4224
>Category:       bin
>Synopsis:       gcc uses /var/tmp rather than /tmp
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    bin-bug-people (Utility Bug People)
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Sun Oct  5 21:50:02 1997
>Originator:     Ronald Khoo
Demon Internet
>Release:        19971001
Irrelevant, really.  cc on any current netbsd will have this problem.
System: NetBSD 1.2G NetBSD 1.2G (GENERIC) #9: Wed Oct 1 15:58:44 PDT 1997 thorpej@icky:/local/netbsd-src/sys/arch/i386/compile/GENERIC i386

According to hier(7):

/tmp		temporary files, usually a mfs(8) memory-based
		filesystem (the contents of /tmp are usually NOT
		preserved across a system re-boot)

/var/tmp	temporary files that are kept between system reboots

This implies that our gcc should put temp files in /tmp
rather than /var/tmp by default.  Otherwise, those who believe
that hier(7) is respected, and MFS /tmp helps are surprised :-)

echo 'main(){}' > t.c
cc -v t.c
notice that the temp files used are all in /var/tmp

Looking harder at it:
gcc.c uses P_tmpdir from stdio.h which has a DO NOT USE scribbled
over the top of it:
--- quote from from stdio.h
/* System V/ANSI C; this is the wrong way to do this, do *not* use these. */
#ifndef _ANSI_SOURCE 
#define P_tmpdir        "/var/tmp/"
--- end quote from from stdio.h

gcc looks for P_tmpdir (if defined), /usr/tmp and /tmp respectively.
The first two should probably not be searched for on NetBSD systems.
One *could* simply hack out the searching of P_tmpdir and /usr/tmp
in gcc.c as per the patch below.  Ugh.

I can't think of an elegant solution, sorry.

Index: /usr/src/gnu/usr.bin/gcc/cc/gcc.c
*** 1573,1578 ****
--- 1573,1579 ----
    base = choose_temp_base_try (getenv ("TMP"), base);
    base = choose_temp_base_try (getenv ("TEMP"), base);
+ #ifndef __NetBSD__
  #ifdef P_tmpdir
    base = choose_temp_base_try (P_tmpdir, base);
*** 1580,1585 ****
--- 1581,1587 ----
    base = choose_temp_base_try (concat4 (dir_separator_str, "usr", 
                                          dir_separator_str, "tmp"), 
+ #endif
    base = choose_temp_base_try (concat (dir_separator_str, "tmp"), base);
    /* If all else fails, use the current directory! */