真に受けないで欲しーの。
なんも整えてないまんまの emacs Windows 版と素の MSYS の組み合わせだと、きっとこうなるのね:
.tar.gz も、.zip も、「開ける」のね。多分 emacs が「独力で」(elispで)開いてる。で、.zip は「開けない」。
意味、通じてる? 「何が含まれてるかはわかるけど何が含まれてるかしかわからない」。
これは単に MSYS が、tar, g(un)zip, b(un)zip2 は添付しているけど (un)zip は含んでないから、てだけね。
数ある対処の中でも、きっと最も不毛な方法で措置してみる。ここからの流れね。
まず Info-ZIP project から unzip60 のソースをダウンロード。
で、tar で展開。
で、これ:
1 # -*- coding: utf-8 -*-
2 from os import path
3 from distutils import log
4 from distutils import ccompiler, sysconfig
5 from distutils.dir_util import remove_tree
6
7 log.set_verbosity(1) # INFO
8 cc = ccompiler.new_compiler()
9 sysconfig.customize_compiler(cc)
10
11 TMPDIR = "."
12 DESTDIR = "."
13 UNZIP_SRCDIR = "unzip60"
14
15 cc.set_include_dirs([UNZIP_SRCDIR])
16
17 # ==============================================================
18 #
19 # build funzip.exe
20 #
21 extra_preargs = ['-DWIN32', '-D_CONSOLE', '-DFUNZIP']
22 tmpdir = path.join(TMPDIR, ".funzip")
23 objs = cc.compile([path.join(UNZIP_SRCDIR, s) for s in (
24 'crc32.c',
25 'win32/crc_i386.c',
26 'crypt.c',
27 'funzip.c',
28 'globals.c',
29 'inflate.c',
30 'ttyio.c',
31 'win32/win32.c'
32 )], tmpdir, extra_preargs=extra_preargs)
33 cc.link(
34 ccompiler.CCompiler.EXECUTABLE,
35 objs,
36 path.join(DESTDIR, "funzip.exe"), ".")
37 remove_tree(tmpdir)
38
39 # ==============================================================
40 #
41 # build unzip.exe
42 #
43 extra_preargs = ['-DWIN32', '-D_CONSOLE']
44 tmpdir = path.join(TMPDIR, ".unzip")
45 objs = cc.compile([path.join(UNZIP_SRCDIR, s) for s in (
46 'crc32.c',
47 'win32/crc_i386.c',
48 'crypt.c',
49 'envargs.c',
50 'explode.c',
51 'extract.c',
52 'fileio.c',
53 'globals.c',
54 'inflate.c',
55 'list.c',
56 'match.c',
57 'win32/nt.c',
58 'process.c',
59 'ttyio.c',
60 'ubz2err.c',
61 'unreduce.c',
62 'unshrink.c',
63 'unzip.c',
64 'win32/win32.c',
65 'win32/win32i64.c',
66 'zipinfo.c'
67 )], tmpdir, extra_preargs=extra_preargs)
68 cc.link(
69 ccompiler.CCompiler.EXECUTABLE,
70 objs + ['advapi32.lib', 'user32.lib'],
71 path.join(DESTDIR, "unzip.exe"), ".")
72 remove_tree(tmpdir)
73
74 # ==============================================================
75 #
76 # build unzipsfx.exe
77 #
78 extra_preargs = ['-DWIN32', '-D_CONSOLE', '-DSFX']
79 tmpdir = path.join(TMPDIR, ".unzipsfx")
80 objs = cc.compile([path.join(UNZIP_SRCDIR, s) for s in (
81 'crc32.c',
82 'win32/crc_i386.c',
83 'crypt.c',
84 'extract.c',
85 'fileio.c',
86 'globals.c',
87 'inflate.c',
88 'match.c',
89 'win32/nt.c',
90 'process.c',
91 'ttyio.c',
92 'ubz2err.c',
93 'unzip.c',
94 'win32/win32.c'
95 )], tmpdir, extra_preargs=extra_preargs)
96 cc.link(
97 ccompiler.CCompiler.EXECUTABLE,
98 objs + ['advapi32.lib', 'user32.lib'],
99 path.join(DESTDIR, "unzipsfx.exe"), ".")
100 remove_tree(tmpdir)
こんなふうに置いてな:
1 ./infounzip_build.py
2 ./unzip60/
スクリプトを実行すると infounzip_build.py と同じ場所に unzip.exe、funzip.exe、unzipsfx.exe が出来ます。うまくいきゃね。これとこれ前提ね。
にゃお、ほんりゃあは bzip2 開けるぜ機能ついとります、unzip60 にやあ。んなもんなんで必要だか。ばっかじゃねーの。馬鹿馬鹿しいので存在を無視したビルドになってます。(あと、dep_util てないので、一度ビルドしていても何度でも一からビルドしますよ。)
にゃ? 何が「きっと最も不毛な方法」かって? だって、バイナリ提供されとるもん。GnuWin という手もあるね。
それでもなんでこんなネタなのか? それはね。「Microsoft Visual C++ Compiler for Python 2.7しか手持ちじゃない」という、結構マゾヒスティックな環境で何かしなければならない、の時の、かなり難易度が低い良いネタだから、なの。