Subject: NEWBIE PAIN: the universal remedy
From: [email-masked] (Paolo Greppi)

21 Oct 1996 15:38:02 -0700
Sender: [email-masked]
Approved: [email-masked]
Distribution: cygnus
Message-ID: <[email-masked]>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
X-Sender: [email-masked]
X-Mailer: Windows Eudora Light Version 1.5.4 (32)
Original-To: [email-masked]
Original-Sender: [email-masked]

Hi to everybody !

In the attempt to help the progress of the project I send a summary of
instructions about installing and setting up cygwin32.

GnuWin32.txt - 20.10.1996
****************************************************************************
*********
Terence Ripperda <[email-masked]> wrote:
"Perhaps we should all submit any problems we've had setting this up on our 
systems (no matter how obscure the error) and form a new faq on installing 
the software for newcomers.."

Geoffrey Noer <[email-masked]> answered:
"I agree.  I'd be glad to have more/better information up on how to install
everything.  I would like it better if the list was primarily for technical
discussion and announcements instead of a forum for basic help.
What needs to change?  What's incomplete?"

This is MY attempt.
It is limited by my ignorance; moreover, I can not read the listserv traffic
between 1.5.1996 and 9.10.1996.
Grammar corrections, suggestions, new ideas and differencies that hold for 
Win95 are welcome.

How to install the gnu-win32 development tools.
----------------------------------------------

The following is (possibly) valid for beta16 and NT 3.51, under the
assumpion that the
Administrator is the one and only user (no multiple .bashrc and no proper
set up of
permissions).

Nothing is said here about the windows32api package or other specific tools.

NOTE1: I have a personal idea of how things should be made, but I try to put 
	here ALL the various solutions that heve appeared.
	FYI my path is: Ia, IIa, IIB, IIIc
NOTE2: you will always have to understand yourself when e:\root should be
	read / and so on since I did not care to keep consistency between
	dirs. This expecially when I cite ideas from others ...
NOTE3: I broke several lines for readabilty reasons only.

I) DOWNLOADING
--------------

You have here 2 options: with gzip/tar (UNIX fan option) or with unzip.

Ia) gzip/tar
 1) download the files (notice the extension .tar.gz is equivalent to .tgz):
	one.tar.gz
	two.tar.gz
	three.tar.gz
	four.tar.gz
	five.tar.gz
    from ftp.cygnus.com:/pub/gnu-win32 or mirrors
Ib) unzip
 1) download the files:
	one.zip
	two.zip
	three.zip
	four.zip
	five.zip

If you want to use c++, download also libs.zip from the beta14 distribution.

In case you use gzip/tar and you want to work confortably you need 14,468 kb
for the 
compressed files, 37,662 kb for the tarred files and another 37 Mb for
the extracted files.
With unzip you need less, and even more you can save if you are tricky, but at
the end you will have anyway + 37 Mb on your HD.

II) EXTRACTING AND MOUNTING (if required)
-----------------------------------------

At this point you may choose the best directory structure that fits for you.

The POSIX subsystem sees directories in a different way in respect to DOS or 
NT (Bill choose the backslash to differentiate \DOS from /UNIX...). 
It is adviseable to set up everything on a NTFS partition, since POSIX 
support is guaranteed to work only there.

Any parameters consisting of filenames or paths should be in the POSIX format; 
the separator between dir names is slash / and not backslash, and hard drive
names 
are written //d/ and not d:\
	type d:\tmp\pippo
becomes under bash:
	cat //D/tmp/pippo
The unix idea of how dirs are organized is controlled by mount (see
following) and
links (hard ones and symbolic ones) - in this release this 2nd magic does
not work
anyway ...

I see at least three alternatives:
A) let some physical disk root (for example e:\) be the seat for the unix root 
   and create on it the following directories or anything similar:
	e:\bin
	e:\usr <-- cygnus directory
	e:\tmp
   this is the suggested way to do it, from Cygnus (they say to create a 
   Cygnus dir).

B) to avoid chaos on e: make everything under e:\root
	e:\root\bin
	e:\root\usr <-- cygnus directory
	e:\root\tmp
   This is the solution I like.
   Like Alex P. Madarasz puts it: "a single GNU 'mount' command will let me 
   establish 'E:\root' as '/', and  the other subdirs will then fall into the 
   required / desired Unix tree automagically".
C) hybrid solution - do as adviced by Steve Willer <[email-masked]>
   create c:\cygnus <-- cygnus directory
   create c:\bin and copied "sh.exe" from cygnus\h-i386-cygwin32\bin to \bin
   NOTE: in this case you don't have to mess around with mount
BTW: Mount is part of the UNIX paradigm.
     It allows UNIX machines to set up after every boot a proper directory
     structure, independent from the physical drives.
     As implemented in cygwin32 API though it works differently: you don't
     have to set up any script or configuration file since the mount table
     is recorded in the Registry and you make it ONCE FOR ALL.
     (see HKEY_CURRENT_USER\Software\Cygnus Support\CYGWIN.DLL setup\b15.0\
     mounts)
     I don't therefore see any advantage in avoiding mount.
     NOTE: except you will have occasionally to paste the Registry ;-)

After you created the directories, you extract the stuff using gzip/tar or
unzip.
GO in the directory maked above with <-- cygnus directory and:
 IIa) unpack the gzipped archives using 
	gzip -d one.tar.gz
	...
   you can find gzip.exe for NT on:
   	ftp://sunsite.informatik.rwth-aachen.de/pub/mirror/...
	ftp.cica.indiana.edu/winnt/misc/gzip.zip
   untar the tar archives using
	tar xvf one.tar
	...
	NOTE: the tar program will give you several "couldn't 
		change access and modification times of ..." warnings -
		this is normal
		You will also get some "cannot link to ..." errors and these
		are worse - but it copies the files and this is OK.
   you can find this utility on:
	ftp://sunsite.informatik.rwth-aachen.de/pub/mirror/...
	ftp.cica.indiana.edu/winnt/misc/tar.zip

 IIb) unpack the zipped archives using 
	unzip -x one.zip
	...
    I tell you you better use a proper unzipper, that recognises long path- 
    and file-names. I advice UnZip 5.0p1 of 12 January 1993, to be found on:
	ftp://ftp.csusm.edu/pub/winworld/nt/unzipnt.zip

At this point, if you want to do C++ take the libs.zip and extract only the file
lib/libstdc++.a and copy it over e:\root\usr\H-i386-cygwin32\lib\libstdc++.a

If you took route A or B you must now mount something (change dir names as 
required). Do the following from the CMD.EXE prompt while you are in the 
e:\root\usr\H-i386-cygwin32\bin (or whatever) directory.
 IIA)
	mount e:\usr /usr
	mount e:\tmp /tmp
	mount e:\usr\H-i386-cygwin32\bin /bin
      NOTE: I mount the /usr/bin on /bin, so I am sure everything is at the
      right place.
      Steve Willer <[email-masked]> advice on the other side is materially 
      copy sh.exe:
	"c) created a "bin" directory off root on my C: drive
	d) copied "sh.exe" from cygnus\h-i386-cygwin32\bin to \bin"

 IIB)
	umount /
	mount e:\root /
	NOTE: if this does not work, you will have to edit the Registry.
		for example if mount says "/ busy" from the very 1st time you
		try to mount e:\root on it, take CMD.EXE and digit START REGEDT32
		(BE CAREFUL NOW !!!!) 
		Take the key HKEY_CURRENT_USER\Software\Cygnus Support and delete it
		(this resets everything) then call mount once; you wiil have now the
		defaults in the registry - set to "e:\root" the key
		HKEY_CURRENT_USER\Software\Cygnus Support\
			CYGWIN.DLL setup\b15.0\mounts\04\native
		and be happy.
      now copy sh.exe and bash.exe from /usr/bin to /bin

In any case you should care to see if these settings:
	\\.\tape1:       /dev/st1
	\\.\tape0:       /dev/st0
	\\.\b:           /dev/fd1
	\\.\a:           /dev/fd0
(that are the default mount takes when started for the 1st time) apply.
NOTE: there seems to be no way to take them away ... 

III) ENVIRONMENT
----------------

You basically must allow:
1) CMD.EXE to find cygwin32.dll 
2) CMD.EXE to find bash.exe
   To do the both simply put e:\root\usr\H-i386-cygwin32\bin in front
   of your path (you can do this in two different ways - see IIIa and IIIb)
moreover, 
3) if you want to compile under COMMAND, the paths for the include and the
   libraries must be available to the CMD.EXE
4) otherwise, if you do the development under bash you can put these
   initializations in the .bashrc file

As stated at the beginning these instructions apply to "almost single user"
set ups,
so I use only one .bashrc, located in the UNIX root (also /.bashrc)
To edit .bashrc, use notepad.exe !

Another BIG choice is presented now: do you want to use ONLY cygwin32 or you
have other SDKs around ?

 IIIa) you want to use only cygwin32 and you want to compile under CMD.EXE
       as Alex Madarasz ([email-masked]) put it:
       "4. Start the NT 'Control Panel' and open up the 'System' icon.
       - Under 'System Environment Variables', find the 'Path' variable,
       and edit it (...omissis...) This will cause any app searching the
       path to always find the GNU Win32 apps first, before the NT/DOS
       utils like FIND.EXE, MKDIR.EXE, etc. and before any Resource Kit
       utilities.
       - Under 'User Environment Variables for ...', add an entry with
       the variable name of (...omissis...)
       - Select 'OK' to exit the 'System' dialog, and exit 'Control
       Panel'
       5. Logout then login. The edits you made to environment variables
       above will not take effect until you do (you were editing entries
       in the NT Registry, and NT reads those entries on login)."

       see the section "IIIa and IIIb" now

 IIIb) you want to use other SDK or compilers (like RSX) and you want to 
       compile under CMD.EXE.

       do like Steve Willer <[email-masked]>:
	"e) changed my autoexec.bat so that c:\bin was first in the path
	   and c:\cygnus\h-i386-cygwin32\bin is somewhere in the middle of the
	   path (it's up to you where you put it, but be sure to put
	   it before any other directory that has "make", like Borland C++)
	f) set these other environment variables:
	   (...omissis...)
        Note1: under NT you must modify the AUTOEXEC.NT or copy it in
               AUTOEXEC.CYG ... then create a new Console PIF and specify
               you want to boot it with the settings you like ...
        Note2: you will possibly encounter problems with the path length - 
               there seems to be a limit of 127 chars or so.

       see the section "IIIa and IIIb" now
        
 IIIa and IIIb) 
	Steve Willer <[email-masked]> writes:
		GCC_EXEC_PREFIX=/cygnus/h-i386-cygwin32/lib/gcc-lib/
		C_INCLUDE_PATH=/cygnus/h-i386-cygwin32/i386-cygwin32/include
		CPLUS_INCLUDE_PATH=
		/cygnus/h-i386-cygwin32/i386-cygwin32/include:
		/cygnus/include/g++"
	(these seem to have been set from within .bashrc: if you put them in
	 the Contro Panel or in AUTOEXEC.CYG use e:\root\)
	Bret A. Schuhmacher <[email-masked]> reports:
		Needed to set C_INCLUDE_PATH.
	Cyriaque.Rioux <[email-masked]> writes:
		set GCC_EXEC_PREFIX=c:\gnu\h-i386-c\lib\gcc-lib\
		set PATH=%PATH%;c:\gnu\h-i386-c\bin
		set INCLUDE_PATH=c:\gnu\h-i386-c\i386-cyg\include
	Laurent POULAIN ([email-masked] or [email-masked])
	(see his http://www.mygale.org/05/poulainl/index_us.htm FAQ) writes:
		set COMPILER_PATH=/usr/bin
		set C_INCLUDE_PATH=/usr/include
		set CPLUS_INCLUDE_PATH=/usr/lib/g++-include;/usr/include
		set LIBRARY_PATH=/usr/lib
		set TMPDIR=/temp

	To say you the truth I put both Steve's and Laurent's variables 
	and things seem to work almost OK.

	For the famous "No CPP in cygwin32 for NT" error, you must put BOTH:
		/usr/H-i386-cygwin32/bin AND 
		/usr/H-i386-cygwin32/lib/gcc-lib/
	in the path !

 IIIc) As I do, you use bash for development and you just use your programs
       and the tools (tar ...) from the CMD.EXE.
       In this case do like in IIIa or in IIIb, but inizialize only HOME as /.
       Put the .bashrc in / and put there any other variable or path 
       definition - take them from the "IIIa and IIIb" section, BUT convert
       paths to UNIX and don't forget 
		export PATH
		export C_INCLUDE_PATH
		...
       at the end.

For justice's sake, here is my .bashrc:
	
	alias ll=ls -l
	
	PATH=/bin:/usr/bin:/usr/H-i386-cygwin32/bin:
		/usr/H-i386-cygwin32/lib/gcc-lib/:
		//F/WINNT35/system32:
		//F/WINNT35:
		//C/DOS:
		//C/UTILITY
	GCC_EXEC_PREFIX=/usr/H-i386-cygwin32/lib/gcc-lib/
	C_INCLUDE_PATH=/usr/include:
		/usr/H-i386-cygwin32/i386-cygwin32/include
	CPLUS_INCLUDE_PATH=/usr/include:
		/usr/H-i386-cygwin32/i386-cygwin32/include:
		/usr/include/g++
	
	COMPILER_PATH=/usr/bin
	LIBRARY_PATH=/usr/lib
	TMPDIR=/tmp
	
	export GCC_EXEC_PREFIX
	export C_INCLUDE_PATH
	export CPLUS_INCLUDE_PATH
	export PATH
	export COMPILER_PATH
	export LIBRARY_PATH
	export TMPDIR

	cat /.bashrc
	# just to see something happens ...

!---------------------------------------------------------------!
!                         Paolo Greppi                          !
!                        via  Cesati 12                         !
!                 13100   Vercelli  -   Italia                  !
!      Telefono 0039-161-256081  E-Mail [email-masked]         !
!---------------------------------------------------------------!

-
For help on using this list, send a message to
"[email-masked]" with one line of text: "help".