Mail Archives: cygwin-apps/2002/02/07/08:36:57
--Boundary_(ID_0KM9GO1FLuSiaP/OgXalZA)
Content-type: text/plain; charset=us-ascii
Content-transfer-encoding: 7BIT
Content-disposition: inline
Attached is a patch that adds the rebase functionality to setup.exe.
I would like to get some feedback before I start to resolve the following
issues:
o How to handle a missing config file (i.e., /etc/setup/rebase.conf)?
o Need to handle in-use files.
o How to handle corruptible (by rebasing) files?
o How should dependent DLLs be handled?
and some other more niggling items.
I re-installed 30 out of the 33 packages that contain DLLs and my system
is functioning normally. Python can even fork too! I only skipped curl,
postgresql, and rxvt because the DLLs contained by these packages get
corrupted by rebasing.
If you would like to test out a setup.exe which includes the rebase
functionality, then a pre-built version is available at:
http://www.tishler.net/jason/software/setup-rebase/setup-rebase-2002-02-02-1.exe
Before you run this setup.exe, you should download the default rebase
configuration file:
http://www.tishler.net/jason/software/setup-rebase/rebase.conf
to /etc/setup.
I also have a stand-alone rebase.exe that I would like to contribute to
Cygwin so that users can rebase without having to run setup.exe.
Here is the current usage statement from rebase.exe:
usage: rebase [-i|-r|-u] [-d CygwinRootDir] ImageFileName ...
where:
-i => install ImageFileName(s)
-r => re-install ImageFileName(s) (default)
-u => uninstall ImageFileName(s)
-d => set Cygwin root directory (defaults to ".")
A pre-built version of rebase.exe is available at:
http://www.tishler.net/jason/software/setup-rebase/rebase.exe
I see the following uses for this program:
o makefiles
o resync system (hopefully never needed)
o used by a one-shot converter script
The following is an example of a postinstall script, rebase.bat, that
could rebase the entire user's system without have to reinstall
"everything":
gzip -d -c /etc/setup/*.lst.gz | grep "\.dll$" | sed "s=^=/=" | xargs -n 1 cygpath -wa >rebase.tmp
rebase -r -f rebase.tmp
del rebase.tmp
The above assumes that I have added a "-f" option to rebase.exe and
changed the default value for the "-d" option to be the Cygwin root
directory obtained from the Registry.
Any feedback on the above would be greatly appreciated.
Thanks,
Jason
--Boundary_(ID_0KM9GO1FLuSiaP/OgXalZA)
Content-type: text/plain; charset=us-ascii; NAME=rebase.patch
Content-transfer-encoding: 7BIT
Content-disposition: attachment; filename=rebase.patch
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/cinstall/Makefile.in,v
retrieving revision 2.49
diff -u -p -r2.49 Makefile.in
--- Makefile.in 2002/01/27 06:36:06 2.49
+++ Makefile.in 2002/02/07 11:58:26
@@ -69,11 +69,12 @@ libmingw32.a := $(mingw_build)/libmingw3
libuser32 := $(w32api_lib)/libuser32.a
libkernel32 := $(w32api_lib)/libkernel32.a
libcomctl32 := $(w32api_lib)/libcomctl32.a
+libimagehlp := $(w32api_lib)/libimagehlp.a
ALL_DEP_LDLIBS := $(ZLIB) $(BZ2LIB) $(w32api_lib)/libole32.a $(w32api_lib)/libwsock32.a \
$(w32api_lib)/libnetapi32.a $(w32api_lib)/libadvapi32.a \
$(w32api_lib)/libuuid.a $(libkernel32) $(libuser32) \
- $(libcomctl32) $(libmingw32)
+ $(libcomctl32) $(libimagehlp) $(libmingw32)
ALL_LDLIBS := ${patsubst $(mingw_build)/lib%.a,-l%,\
${patsubst $(w32api_lib)/lib%.a,-l%,\
@@ -99,13 +100,17 @@ OBJS = \
compress_bz.o \
compress_gz.o \
concat.o \
+ config_file.o \
+ config_file_reader.o \
+ config_file_writer.o \
cygpackage.o \
desktop.o \
dialog.o \
diskfull.o \
download.o \
- find.o \
filemanip.o \
+ find.o \
+ free_list.o \
fromcwd.o \
geturl.o \
hash.o \
@@ -120,6 +125,7 @@ OBJS = \
localdir.o \
log.o \
main.o \
+ main.o \
mingw_getopt.o \
mkdir.o \
mklink2.o \
@@ -127,10 +133,10 @@ OBJS = \
msg.o \
net.o \
netio.o \
- nio-ie5.o \
nio-file.o \
nio-ftp.o \
nio-http.o \
+ nio-ie5.o \
package_db.o \
package_meta.o \
package_source.o \
@@ -142,6 +148,7 @@ OBJS = \
postinstall.o \
proppage.o \
propsheet.o \
+ rebaser.o \
res.o \
rfc1738.o \
root.o \
@@ -153,6 +160,7 @@ OBJS = \
splash.o \
state.o \
threebar.o \
+ used_list.o \
version.o \
win32.o \
window.o \
Index: install.cc
===================================================================
RCS file: /cvs/src/src/winsup/cinstall/install.cc,v
retrieving revision 2.39
diff -u -p -r2.39 install.cc
--- install.cc 2002/01/27 06:36:06 2.39
+++ install.cc 2002/02/07 11:58:32
@@ -62,6 +62,7 @@ static const char *cvsid = "\n%%% $Id: i
#include "package_source.h"
#include "port.h"
+#include "rebaser.h"
#include "threebar.h"
extern ThreeBarProgressPage Progress;
@@ -291,6 +292,8 @@ install_one_source (packagemeta & pkgm,
}
}
}
+ else
+ rebaser::get_instance ()->rerebase (cygpath (prefixPath, fn, 0));
progress (tmp->tell ());
num_installs++;
Index: log.cc
===================================================================
RCS file: /cvs/src/src/winsup/cinstall/log.cc,v
retrieving revision 2.7
diff -u -p -r2.7 log.cc
--- log.cc 2002/01/22 12:30:50 2.7
+++ log.cc 2002/02/07 11:58:32
@@ -34,6 +34,7 @@ static const char *cvsid =
#include "concat.h"
#include "mkdir.h"
#include "mount.h"
+#include "rebaser.h"
struct LogEnt
{
@@ -116,6 +117,8 @@ exit_setup (int exit_code)
if (exit_msg)
note (NULL, exit_msg);
+
+ rebaser::delete_instance ();
log (LOG_TIMESTAMP, "Ending cygwin install");
Index: package_meta.cc
===================================================================
RCS file: /cvs/src/src/winsup/cinstall/package_meta.cc,v
retrieving revision 2.15
diff -u -p -r2.15 package_meta.cc
--- package_meta.cc 2002/01/22 09:03:55 2.15
+++ package_meta.cc 2002/02/07 11:58:32
@@ -42,6 +42,7 @@ static const char *cvsid = "\n%%% $Id: p
#include "cygpackage.h"
#include "package_meta.h"
#include "package_db.h"
+#include "rebaser.h"
static const char *standard_dirs[] = {
"/bin",
@@ -167,6 +168,7 @@ packagemeta::uninstall ()
log (LOG_BABBLE, "unlink %s", d);
SetFileAttributes (d, dw & ~FILE_ATTRIBUTE_READONLY);
DeleteFile (d);
+ rebaser::get_instance ()->unrebase (d);
}
/* Check for Windows shortcut of same name. */
d = concat (d, ".lnk", NULL);
Index: root.cc
===================================================================
RCS file: /cvs/src/src/winsup/cinstall/root.cc,v
retrieving revision 2.8
diff -u -p -r2.8 root.cc
--- root.cc 2001/12/23 12:13:29 2.8
+++ root.cc 2002/02/07 11:58:32
@@ -36,6 +36,7 @@ static const char *cvsid =
#include "concat.h"
#include "log.h"
#include "root.h"
+#include "rebaser.h"
static int rb[] = { IDC_ROOT_TEXT, IDC_ROOT_BINARY, 0 };
static int su[] = { IDC_ROOT_SYSTEM, IDC_ROOT_USER, 0 };
@@ -180,6 +181,8 @@ RootPage::OnNext ()
return -1;
NEXT (IDD_LOCAL_DIR);
+
+ rebaser::set_cygwin_root_dir (get_root_dir ());
log (0, "root: %s %s %s", get_root_dir (),
(root_text == IDC_ROOT_TEXT) ? "text" : "binary",
--Boundary_(ID_0KM9GO1FLuSiaP/OgXalZA)
Content-type: text/plain; charset=us-ascii; NAME=rebase.ChangeLog
Content-transfer-encoding: 7BIT
Content-disposition: attachment; filename=rebase.ChangeLog
2002-02-07 Jason Tishler <jason AT tishler DOT net>
* Makefile.in (libimagehlp): New variable.
(ALL_DEP_LDLIBS): Add libimagehlp.
(OBJ): Add rebase objects. Resort objects.
* install.cc (install_one_source): Add call to rebaser::rerebase.
* log.cc (exit_setup): Add call to rebaser::delete_instance.
* package_meta.cc (packagemeta::uninstall): Add call to
rebaser::unrebase.
* root.cc (RootPage::OnNext): Add call to rebaser::set_cygwin_root_dir.
* config_file.cc: New file.
* config_file.h: New file.
* config_file_reader.cc: New file.
* config_file_reader.h: New file.
* config_file_writer.cc: New file.
* config_file_writer.h: New file.
* free_list.cc: New file.
* free_list.h: New file.
* rebaser.cc: New file.
* rebaser.h: New file.
* used_list.cc: New file.
* used_list.h: New file.
--Boundary_(ID_0KM9GO1FLuSiaP/OgXalZA)
Content-type: application/octet-stream; NAME=rebase.tar.bz2
Content-transfer-encoding: base64
Content-disposition: attachment; filename=rebase.tar.bz2
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
hgeGqqqqrkEB/i7kinChIWQfGio=
--Boundary_(ID_0KM9GO1FLuSiaP/OgXalZA)--
- Raw text -