Skip to content

Instantly share code, notes, and snippets.

@t-mat
Created January 18, 2012 04:14
Show Gist options
  • Select an option

  • Save t-mat/1630909 to your computer and use it in GitHub Desktop.

Select an option

Save t-mat/1630909 to your computer and use it in GitHub Desktop.
xyzzy0.2.2.235をvc++2010でビルドする

Visual C++ 2010 と WindowsSDK 7.1 での xyzzy のビルド (32bit)

参照

ダウンロード

mkdir C:\my_xyzzy
cd /d C:\my_xyzzy
curl -L http://www.jsdlab.co.jp/~kamei/(T%5eT)/src-0.2.2.235.tar.bz2 -o src-0.2.2.235.tar.bz2
7za x -y src-0.2.2.235.tar.bz2
7za x -y src-0.2.2.235.tar
pushd xyzzy\src\unicode
curl http://unicode.org/Public/MAPPINGS/ISO8859/8859-1.TXT -o 8859-1.TXT
curl http://unicode.org/Public/MAPPINGS/ISO8859/8859-2.TXT -o 8859-2.TXT
curl http://unicode.org/Public/MAPPINGS/ISO8859/8859-3.TXT -o 8859-3.TXT
curl http://unicode.org/Public/MAPPINGS/ISO8859/8859-4.TXT -o 8859-4.TXT
curl http://unicode.org/Public/MAPPINGS/ISO8859/8859-5.TXT -o 8859-5.TXT
curl http://unicode.org/Public/MAPPINGS/ISO8859/8859-7.TXT -o 8859-7.TXT
curl http://unicode.org/Public/MAPPINGS/ISO8859/8859-9.TXT -o 8859-9.TXT
curl http://unicode.org/Public/MAPPINGS/ISO8859/8859-10.TXT -o 8859-10.TXT
curl http://unicode.org/Public/MAPPINGS/ISO8859/8859-13.TXT -o 8859-13.TXT
curl http://unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT -o BIG5.TXT
curl http://unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/CNS11643.TXT -o CNS11643.TXT
curl http://unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0212.TXT -o JIS0212.TXT
curl http://unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/KSC/KSC5601.TXT -o KSC5601.TXT
curl -L http://oto.cvs.sourceforge.net/*checkout*/oto/oto/src/GB2312.TXT?revision=1.1.1.1 -o GB2312.TXT
curl http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1250.TXT -o CP1250.TXT
curl http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT -o CP1251.TXT
curl http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT -o CP1252.TXT
curl http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1253.TXT -o CP1253.TXT
curl http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1254.TXT -o CP1254.TXT
curl http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1257.TXT -o CP1257.TXT
popd
curl --insecure -L https://github.com/t-mat/sandbox/raw/master/xyzzy-src-0.2.2.235-patch.7z -o xyzzy-src-0.2.2.235-patch.7z
7za x -y xyzzy-src-0.2.2.235-patch.7z

ビルド

cd /d C:\my_xyzzy\xyzzy\src
call "%VS100COMNTOOLS%..\..\VC\vcvarsall.bat"
set VCVER=10
nmake /nologo

まだ残っている警告

xyzzyenv.cc

LIBCMT.lib(cpu_disp.obj) : warning LNK4210: .CRT セクションが存在します。静的初期化子、または終末記号がハンドルされていない可能性があります。

xyzzycli.cc

LIBCMT.lib(cpu_disp.obj) : warning LNK4210: .CRT セクションが存在します。静的初期化子、または終末記号がハンドルされていない可能性があります。

両方とも、エントリポイントを独自指定しているにも関わらず、libcの初期化が中途半端なせいで出ている。

解消方法は

  • エントリポイント指定をやめて、フツーのmain(), WinMain() 始まりにする
  • コンパイラに /GS-、リンカに /nodefaultlib を指定し、memset, alloca を独自定義する

擬似パッチ

Microsoft Visual C++ 2005 Express Edition で xyzzy をビルドする を参照

Makefile

-	# define VC++ version (4, 6, or 7)
-	VCVER=4
+	# define VC++ version (4, 6, 7, 8, 9 or 10)
+	!IF "$(VCVER)" == ""
+	VCVER=4
+	!ENDIF

	DEFS=-DSTRICT -DWIN32 -D_WIN32 -D_MT -D__XYZZY__ -DPRIVCTRL_NODLL -DHAVE_DIMM_H -DDEBUG_GC
-	CXX=cl -nologo
+	!IF "$(VCVER)" == "10"
+	CXX=@cl -nologo -Zc:wchar_t- -Zc:forScope- -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS
+	!ELSEIF "$(VCVER)" == "9"
+	CXX=cl -nologo -Zc:wchar_t- -Zc:forScope- -D_CRT_SECURE_NO_DEPRECATE
+	!ELSEIF "$(VCVER)" == "8"
+	CXX=cl -nologo -Zc:wchar_t- -Zc:forScope- -D_CRT_SECURE_NO_DEPRECATE
+	!ELSE
+	CXX=cl -nologo
+	!ENDIF
	CPP=cl -nologo -E

	OBJS=$(OBJS: = r/)
+	!IF "$(VCVER)" == "10"
+	CXXFLAGS=-Ob1 -O2 -Oi -Ot -Oy -Gs -Gy -Gz $(CXXOPT) -W3 -MT -vmb $(INC) $(DEFS) -Fo$(OUTDIR)/
+	LDFLAGS=-stack:0x2000000 -map:$(OUTDIR)/xyzzy.map -incremental:no -fixed -opt:ref
+	!ELSE
	CXXFLAGS=-Ob1 -Og -Oi -Ot -Oy -G5 -Gs -Gy -Gz $(CXXOPT) -W3 -MT -vmb $(INC) $(DEFS) -Fo$(OUTDIR)/
	LDFLAGS=-stack:0x2000000 -map:$(OUTDIR)/xyzzy.map -incremental:no -fixed -opt:ref
+	!ENDIF
	FINAL_TARGET=../$(BUILD)

src/archiver.cc

	static char *
	copy_path (char *b, const char *o, const char *d, int dirp = 0)
	{
-	  char *spc = strchr (d, ' ');
+	  const char *spc = strchr (d, ' ');

src/environ.h

-	inline
+	inline int
	Registry::fail () const

src/xdde.h

-	inline
+	inline int
	DdeDataP::length () const

src/encoding.cc

	utf_to_internal_stream::putw_t
	utf_to_internal_stream::per_lang_putw (int lang)
	{
	  switch (lang)
	    {
	    default:
	    case ENCODING_LANG_JP:
	    case ENCODING_LANG_JP2:
-	      return putw_jp;
+	      return &putw_jp;

	    case ENCODING_LANG_KR:
	    case ENCODING_LANG_CN_GB:
	    case ENCODING_LANG_CN_BIG5:
-	      return putw_gen;
+	      return &putw_gen;

	    case ENCODING_LANG_CN:
-	      return putw_cn;
+	      return &putw_cn;
	    }
	}

src/insdel.cc

	static void
-	adjust (const Chunk *&chunk, int &offset)
+	adjust (Chunk *&chunk, int &offset)
	{
-	  const Chunk *cp = chunk;
+	  Chunk *cp = chunk;


	static void
-	adjust_dst (const Chunk *&chunk, int &offset)
+	adjust_dst (Chunk *&chunk, int &offset)
	{
-	  const Chunk *cp = chunk;
+	  Chunk *cp = chunk;

src/package.h

	  void parse (const Char *&b, int &l);
+	  void parse (Char *&b, int &l) { const Char* p = b; parse(p, l); b = const_cast<Char*>(p); }
	  const Char *pkg_end () const {return pkge;}

src/dyn-handle.h

-	operator = (const dyn_handle &);
+	void operator = (const dyn_handle &);

src/syntax.cc

-	void (syntax_state::*syntax_state::update)(Char);
+	void (syntax_state::*syntax_state::update)(const Char *);

src/random.cc

-	xrandom_state_object (p).srandom (time (0));
+	xrandom_state_object (p).srandom (long (time (0)));

src/package.cc

	static void
-	export (lisp symbol, lisp package)
+	export_symbol (lisp symbol, lisp package)

	if (symbols != Qnil && !consp (symbols))
-	  export (symbols, package);
+	  export_symbol (symbols, package);

	    for (; consp (symbols); symbols = xcdr (symbols))
-	      export (xcar (symbols), package);
+	      export_symbol (xcar (symbols), package);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment