]>
cygwin.com Git - cygwin-apps/setup.git/blob - fromcwd.cc
2 * Copyright (c) 2000, Red Hat, Inc.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * A copy of the GNU General Public License can be found at
12 * Written by DJ Delorie <dj@cygnus.com>
16 /* The purpose of this file is to handle the case where we're
17 installing from files that already exist in the current directory.
18 If a setup.ini file is present, we set the mirror site to "." and
19 pretend we're installing from the `internet' ;-) else we have to
20 find all the .tar.gz files, deduce their versions, and try to
21 compare versions in the case where the current directory contains
22 multiple versions of any given package. We do *not* try to compare
23 versions with already installed packages; we always choose a
24 package in the current directory over one that's already installed
25 (otherwise, why would you have asked to install it?). Note
26 that we search recursively. */
29 static const char *cvsid
=
48 #include "filemanip.h"
55 #include "package_db.h"
56 #include "package_meta.h"
57 #include "package_version.h"
58 #include "cygpackage.h"
61 is_test_version (char *v
)
64 for (i
= 0; v
[i
] && isdigit (v
[i
]); i
++);
65 return (i
>= 6) ? 1 : 0;
70 found_file (char *path
, unsigned int fsize
)
74 if (!parse_filename (path
, f
))
77 if (f
.what
.size() != 0)
81 packagemeta
&p
= db
.packages
.registerbykey (f
.pkg
);
82 packageversion
*pv
= new cygpackage (f
.pkg
);
83 ((cygpackage
*)pv
)->set_canonical_version (f
.ver
);
85 pv
->bin
.set_cached (String ("file://") + path
);
87 // patch or src, assume src until someone complains
88 pv
->src
.set_cached (String ("file://") + path
);
90 // check for a duplciate version FIXME make this a method or friend
94 for (size_t n
= 1; !merged
&& n
<= p
.versions
.number (); n
++)
95 if (!p
.versions
[n
]->Canonical_version().casecompare (pv
->Canonical_version()))
97 /* Copy the binary mirror across if this site claims to have an install */
98 if (pv
->bin
.sites
.number ())
99 p
.versions
[n
]->bin
.sites
.registerbykey (pv
->bin
.sites
[1]->key
);
101 if (pv
->src
.sites
.number ())
102 p
.versions
[n
]->src
.sites
.registerbykey (pv
->src
.sites
[1]->key
);
103 /* Copy the descriptions across */
104 if (pv
->SDesc ().size() && !p
.versions
[n
]->SDesc ().size())
105 p
.versions
[n
]->set_sdesc (pv
->SDesc ());
106 if (pv
->LDesc ().size() && !p
.versions
[n
]->LDesc ().size())
107 p
.versions
[n
]->set_ldesc (pv
->LDesc ());
115 // This is handled by the scan2 - there is no need for duplication - or is there?
117 int trust
= is_test_version (f
.ver
) ? TRUST_TEST
: TRUST_CURR
;
119 /* See if this version is older than what we have */
120 if (p
->info
[trust
].version
)
122 char *ov
= canonicalize_version (p
->info
[trust
].version
);
123 char *nv
= canonicalize_version (f
.ver
);
124 if (strcmp (ov
, nv
) > 0)
128 if (p
->info
[trust
].version
)
129 free (p
->info
[trust
].version
);
130 p
->info
[trust
].version
= _strdup (f
.ver
);
132 if (p
->info
[trust
].install
)
133 free (p
->info
[trust
].install
);
134 p
->info
[trust
].install
= _strdup (path
);
136 p
->info
[trust
].install_size
= fsize
;
140 static bool found_ini
;
143 check_ini (char *path
, unsigned int fsize
)
145 if (fsize
&& strstr (path
, "setup.ini"))
150 do_fromcwd (HINSTANCE h
, HWND owner
)
152 // Assume we won't find the INI file.
154 find (".", check_ini
);
157 // Found INI, load it.
158 next_dialog
= IDD_S_LOAD_INI
;
162 next_dialog
= IDD_CHOOSER
;
164 find (".", found_file
);
167 // Reinstate this FIXME: Replace obsolete structures first
168 // Now see about source tarballs
171 char srcpath
[_MAX_PATH
];
172 for (i
= 0; i
< npackages
; i
++)
175 /* For each version with a binary after running find */
176 for (t
= TRUST_PREV
; t
<= TRUST_TEST
; t
++)
177 if (p
->info
[t
].install
)
179 /* Is there a -src file too? */
180 int n
= find_tar_ext (p
->info
[t
].install
);
181 strcpy (srcpath
, p
->info
[t
].install
);
182 strcpy (srcpath
+ n
, "-src.tar.gz");
183 msg ("looking for %s", srcpath
);
186 HANDLE h
= FindFirstFile (srcpath
, &wfd
);
187 if (h
== INVALID_HANDLE_VALUE
)
189 strcpy (srcpath
+ n
, "-src.tar.bz2");
190 h
= FindFirstFile (srcpath
, &wfd
);
192 if (h
!= INVALID_HANDLE_VALUE
)
196 p
->info
[t
].source
= _strdup (srcpath
);
197 p
->info
[t
].source_size
= wfd
.nFileSizeLow
;
This page took 0.047428 seconds and 5 git commands to generate.