Pull to refresh

Comments 32

Снимаю шляпу, автор знает толк в извращениях =)
Там самое веселое — зависимости поразгребать, руками. Помню долго искал этот клятый tzcode, ибо нету давно того сайта где он жил. Хвала гитхабу — не дал пропасть…

sudo zypper install libuuid-devel libicu-devel 

cd tzcode
make
sudo make install
cd ..

cd opencflite-476.19.0
./configure
make
sudo make install
cd ..


и только потом — шаманства из ридми ;-)
Все очень хорошо, советую использовать CMake и выкинуть cygwin.
Я в статье не нашел упоминания cygwin, вы о чем? Про wine?
Есть пара батников под спойлерами, внутри sed и awk. Только они из MinGW а не из CygWin.
Ок, перепутал mingw и cygwin. У меня сложилось впечатление, что одной из причин, толкнувшей вас на эксперименты, были сложности с развертыванием этой среды на всех сборочных машинах.
На самом деле я огород начал городить именно для того чтобы не разводить много сборочных машин.

Сначала их было две — мой ноут на котором все собирается до сих пор, и мак-мини под столом чтобы этот клятый PackageMaker попинать мышой over VNC. Однако после того как под столом мак-мини стало три, пришлось смотреть на хакинтош ;-)

Я даже одно время собирался сборку под мак выкинуть в облако — но пока не сложилось. И когда уже Apple догадается ферму под своими маками раздавать как микрософт — свой Azure…

И вот благодаря микрософту и «компилятору нужна виста+» — перебрался на хост из виртуалок. Компиляет, что забавно. Эдакий странный казус, самому смешно.
Кстати на маке совершенно не обязательно использовать графический PackageMaker. Есть еще как минимум консольные pkgbuild и pkgutil, когда я занимался разработкой на маке использовал их, плюс Jenkins для управления сборочной фермой из маков.
Зато как показывает практика — очень даже обязательно если в инсталляторе надо что-то поменять 8-)

А вообще живые маки для тестов нужны. Я бы с огромным удовольствием проверял бы разные версии в облаке, но увы.
Но вот то что cl.exe внезапно оказался not valid Win32 image — это был удар.
Для справки. В PE-заголовке есть поле «версия подсистемы», системный загрузчик в принципе отказывается загружать exe-шники, у которых это поле больше версии системы, именно с ошибкой «not valid Win32 image». Лечится editbin /subsystem:console,5.0 cl.exe (warning LNK4241 можно игнорировать). 2012-й студии под рукой нет, cl.exe из 2013-й студии после такой операции не работает уже по другой, более ясной причине «Точка входа в процедуру InitializeCriticalSectionEx не найдена в библиотеке DLL KERNEL32.dll.» — и действительно, такая API-функция появилась только в Vista.
а почему не cmake?

из коробки поддерживает все версии Visual Studio
Visual Studio 6
Visual Studio 7
Visual Studio 7 .NET 2003
Visual Studio 8 2005
Visual Studio 9 2008
Visual Studio 10 2010
Visual Studio 11 2012
Visual Studio 12 2013
и тд
www.cmake.org/cmake/help/v3.0/manual/cmake-generators.7.html

для сборки достаточно 2 комманд, открывать visual studio не надо
cmake -G «имя генератора» «dir»
cmake --build «dir» --target «tgt» --config «cfg»

boost ищется так: find_package(BOOST) (можно задать версию, если не в стандартной локации, то чуть длинее)
в вашем случае правда один раз придётся задать настройки всем компиляторам, т.к. у вас они лежат в отдельных директориях
Если бы я это делал сейчас — я бы обязательно прицепил CMake, ну а менять то что работало как часы с 2006 года… я лучше этот кошмар из говна и палок еще потерплю ;-)

К слову, эти палки выглядят так:

OSSDK=/Developer/SDKs/MacOSX10.5.sdk
ASDK=/Developer/SDKs/id8.0sdk

OSX_MIN=10.5

CFLAGS+=-DMACOSX_SDKVERSION=1050 -DSUITE_VER=CS6

ASDK_INCLUDE=-I$(ASDK)/build/mac/Release/SDK/include

ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/tooltips
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/menus
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/dialogs
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/dialogs/selectabledialogs
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/treeview
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/events
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/includes
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/utils
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/view
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/pageitems
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/pageitems/basicinterfaces
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/trackers
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/graphics

ASDK_INCLUDE+=-I$(ASDK)/external/dva/third_party
ASDK_INCLUDE+=-I$(ASDK)/external/dva/third_party/boost_libraries
ASDK_INCLUDE+=-I$(ASDK)/external/dva/third_party/adobe_source_libraries

ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/objectmodel
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/streaming
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/localization
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/commondata
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/strings
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/structure
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/foundation
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/plugins
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/commands
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/events
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/files
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/utils
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/statics
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/resourcedefs
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/measurementsystem
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/pageitems
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/pageitems/basicinterfaces
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/scripting
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/graphics
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/links
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/messaging

ASDK_INCLUDE+=-I$(ASDK)/source/public/includes

ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/sharedcontent
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/colormgmt
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/cjk
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/interactive
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/interactive/ui
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/server
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/preflight
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/tables
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/layout
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/xmedia
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/utils
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/architecture
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/incopy
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/workgroup
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/text
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/graphics
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/contentdropper
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/ui

ASDK_INCLUDE+=-I$(ASDK)/source/open/includes
ASDK_INCLUDE+=-I$(ASDK)/source/open/includes/interactive
ASDK_INCLUDE+=-I$(ASDK)/source/open/includes/widgets
ASDK_INCLUDE+=-I$(ASDK)/source/open/includes/layout
ASDK_INCLUDE+=-I$(ASDK)/source/open/includes/utils
ASDK_INCLUDE+=-I$(ASDK)/source/open/includes/architecture
ASDK_INCLUDE+=-I$(ASDK)/source/open/includes/text
ASDK_INCLUDE+=-I$(ASDK)/source/open/includes/ui

ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/interactive
ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/preflight
ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/layout
ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/architecture
ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/incopy
ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/text
ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/graphics
ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/ui

ASDK_INCLUDE+=-I$(ASDK)/source/precomp/gcc
ASDK_INCLUDE+=-I$(ASDK)/source/precomp/common

ASDK_INCLUDE+=-I$(ASDK)/source/sdksamples/common

ODFRC_DEFS=-d ID_CS6

CFLAGS+=-fmessage-length=0 -pipe -O2 -fpascal-strings
CFLAGS+=-fasm-blocks

#InDesign specific

CFLAGS+=-Wno-trigraphs -Wreturn-type -Woverloaded-virtual -Wmissing-braces -Wparentheses 
CFLAGS+=-Wunused-function -Wunused-label -Wunused-value -Wshadow -Wno-deprecated-declarations
CFLAGS+=-Wchar-subscripts -Wimplicit -Wsequence-point -Winit-self -Wmissing-field-initializers 
CFLAGS+=-Wpointer-arith -Wcast-align -Wpacked 
CFLAGS=-fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics 

#Defines
CFLAGS+=-DMACINTOSH -DBIB_NO_THROW -DMACTEL_SKIP

#Includes
CFLAGS+=-I$(OSSDK)/Developer/Headers/FlatCarbon
CFLAGS+=$(ASDK_INCLUDE) 

#Frameworks
CFLAGS+=-F$(ASDK)/build/mac/release/packagefolder/contents/macos 
CFLAGS+=-F$(ASDK)/build/mac/release/packagefolder/contents/Frameworks 

# odfrc
ODFRC=$(ASDK)/devtools/bin/odfrc-cmd
ODFRC_DEFS+=-d NDEBUG -d MACINTOSH -d __GNUC__

LDFLAGS+=-L$(ASDK)/build/mac/release/packagefolder/contents/macos/libs 
LDFLAGS+=-F$(ASDK)/build/mac/release/packagefolder/contents/macos 
LDFLAGS+=-F$(ASDK)/build/mac/release/packagefolder/contents/Frameworks 
LDFLAGS+=-framework InDesignModel
LDFLAGS+=-Wl,-executable_path -Wl,$(ASDK)/build/mac/Release/packagefolder/contents/macos/ 
LDFLAGS+=-lPublicPlugIn 

LDFLAGS+=-Wl,-dead_strip
LDFLAGS+=-Wl,-single_module 

Rez=/Developer/Tools/Rez 
RezFlags=-o $@ -d SystemSevenOrLater=1 -useDF -script Roman $(CFLAGS) $(ASDK)/samplecode/common/includes/MachOMacrezXcode.h

ifeq (x64,$(ARCH))
CFLAGS+=-arch x86_64
LDFLAGS+=-arch x86_64 -dynamiclib
RezFlags+=-arch x86_64
else
CFLAGS+=-arch i386
LDFLAGS=-arch i386 -dynamiclib
RezFlags+=-arch i386
endif


И так 14 (!) раз. Потому что меняется все — порядок, наличие, форма записи, и прочее.

Под виндой например первых пара каталогов в списке должны быть именно так, иначе вся эта конструкция падает в произвольных местах:

# FIRST LINE IS FOR odfrc AS IT  DOESN'T SUPPORTS SPACES IN PATHS
ASDK_INCLUDE=$(AdobeSDK)\source\precomp\common;$(AdobeSDK)\source\precomp\msvc
ASDK_INCLUDE:=$(ASDK_INCLUDE);$(AdobeSDK)\source\public\includes


Из ~75К мейкфайлов — 65 180 байт это как раз список путей и адобоспецифических флажков. И каждая новая версия — добавляет еще 10-15К ;-)
я надеюсь с всего этого вороха забот Вы хоть на печеньки имеете?
14 раз вас впечатлили? ;-)

Это делается один раз в полгода, не чаще, да и дел на вечер каждый раз. А что не на вечер то хуже — надо новый облачный индизайн поставить и проверить, а работает ли. Если да — то поправить инсталляторы (два штука), и все, «запортировал».

Последний раз было весело с примером — в cs6 он изменился, там перекрывать надо было на два метода больше. А если не — то дефолтная имплементация мастерски обрабатывала только первый дропнутый на индезигн файл, и все. А все остальные добавляла в линки тихонечко. Вот это был квест на неделю, хех.

Ну, вот в этот раз слегка вышел за рамки одного вечера — зато есть тема ;-)
вам похоже возится со скриптами вполне нравится :)
я бы уже во второй раз вернувшись к такому проекту, покромсал бы без жалости вдоль и поперёк, чтобы максимально упростить мигрирование на новую версию

Это вы еще скрипты InnoSetup не видели, вот где ад и израиль.

function GetPathByCOM(product: string; clsid: string; is32bit: boolean) : string;
var
  v: string;
  k, e, k1: string;
  i: integer;
begin
  k := 'CLSID\{' + clsid + '}\LocalServer32';
  k1:= 'CLSID\{' + clsid + '}\InprocServer32';
  e := '{pf}';
  
  if IsWin64 and Is64BitInstallMode then begin
    if is32bit then begin
      e := '{pf32}';
      k := 'Wow6432Node\' + k;
      k1:= 'Wow6432Node\' + k1;
    end;
  end;

  if RegQueryStringValue(HKEY_CLASSES_ROOT, k, '', v) then begin
    i := Pos('/', v);
    if i > 0 then v := Trim(Copy(v, 1, i - 1));
    Result:= ExtractFilePath(v);
  end else if RegQueryStringValue(HKEY_CLASSES_ROOT, k1, '', v) then begin
    i := Pos('/', v);
    if i > 0 then v := Trim(Copy(v, 1, i - 1));
    Result:= ExtractFilePath(v);
  end else
    Result := ExpandConstant(e) + '\Adobe\' + product + '\';
end;

function GetPathByApp(product: string; ver: string; is32bit: boolean): string;
var
  v: string;
  k, e: string;
  i: integer;
begin
  k := 'SOFTWARE\Adobe\' + ver + '\ApplicationPath';
  e := '{pf}';
  
  if IsWin64 and Is64BitInstallMode then begin
    if is32bit then begin
      e := '{pf32}';
      k := 'SOFTWARE\Wow6432Node\Adobe\' + ver + '\ApplicationPath';
    end;
  end;

  if RegQueryStringValue(HKEY_LOCAL_MACHINE, k, '', v)
  then begin
     i := Pos('/', v);
     if i > 0 then begin 
     	v := Trim(Copy(v, 1, i - 1));
     	v:= ExtractFilePath(v);
     end;
     Result:= v;
  end else
     Result := ExpandConstant(e) + '\Adobe\' + product + '\';
end;

function GetPathByShell(product: string; ver: string; is32bit: boolean): string;
var
  v, e, k: string;
  i: integer;
begin
  k := ver + '\shell\launch\command';
  e := '{pf}';           \
  
  if IsWin64 and Is64BitInstallMode then begin
    if is32bit then begin
      e := '{pf32}';
      k := 'Wow6432Node\' + k;
    end;
  end;
  
  if RegQueryStringValue(HKEY_CLASSES_ROOT, k, '', v)
  then begin
     i := Pos('/', v);
     if i > 0 then v := Trim(Copy(v, 1, i - 1));
     Result:= ExtractFilePath(v);
  end else
     Result := ExpandConstant(e) + '\Adobe\' + product + '\';
end;

function GetPathBySetup2(product: string; ver: string; is32bit: boolean): string;
var
  v, e, k: string;
begin
  k := 'SOFTWARE\Adobe\' + ver;
  e := '{pf}';

  if IsWin64 and Is64BitInstallMode then begin
    if is32bit then begin
      e := '{pf32}';
      k := 'SOFTWARE\Wow6432Node\Adobe\' + ver;
    end;
  end;

  if RegQueryStringValue(HKEY_LOCAL_MACHINE, k, 'InstallPath', v)
  then begin
     Result:= v;
  end else
     Result := ExpandConstant(e) + '\Adobe\' + product + '\';
end;

function GetPathBySetup(product: string; ver: string; is32bit: boolean): string;
begin
  Result := GetPathBySetup2(product, ver + '\Installer', is32bit);
end;

function GetPathByCOMsAnd32bit(product: string; clsid: string; clsi2: string): string;
var
  v: string;
  k1, k2, e: string;
begin
  k1 := 'CLSID\{' + clsid + '}\LocalServer32';
  k2 := 'CLSID\{' + clsi2 + '}\LocalServer32';
  e := '{pf}';
  
  if IsWin64 and Is64BitInstallMode then begin
    e := '{pf32}';
    k1 := 'Wow6432Node\' + k1;
    k2 := 'Wow6432Node\' + k2;
  end;
  
  if RegQueryStringValue(HKEY_CLASSES_ROOT, k1, '', v)
  then
    Result := ExtractFilePath(v)
  else if RegQueryStringValue(HKEY_CLASSES_ROOT, k2, '', v) then
    Result := ExtractFilePath(v)
  else
    Result := ExpandConstant(e) + '\Adobe\' + product + '\';
end;

function isAdobeAvailable(product: string; is32bit: boolean) : Boolean;
var
  k: string;
begin
  k := 'SOFTWARE\Adobe\' + product;
  if IsWin64 and Is64BitInstallMode then begin
    if is32bit then begin
      k := 'SOFTWARE\Wow6432Node\Adobe\' + product;
    end;
  end;

  if RegKeyExists(HKEY_LOCAL_MACHINE, k)
  then begin
    Result:=True;
  end;
end;


и таких ужастиков на 250К кода ;-)
а Innosetup можно WIX'ом заменить
тоже большей частью в декларативном стиле будет
Оно и так декларативное — вот к примеру

; CS6 64bit

Source: ..\..\image\bin\x64\cs6\VDP.pln; DestDir: {code:GetS6Path|{pf}\Adobe\Adobe InDesign Server CS6\}\Plug-ins; DestName: VDP.pln; Flags: ignoreversion overwritereadonly replacesameversion 64bit; Check: CheckedIndesignS6

Source: ..\..\image\bin\x64\cs6\(VDP Resources)\idrc_CLST\*.*; DestDir: {code:GetS6Path|{pf}\Adobe\Adobe InDesign Server CS6\}\Plug-ins\(VDP Resources)\idrc_CLST; Flags: ignoreversion overwritereadonly replacesameversion 64bit; Check: CheckedIndesignS6
...

; CS6 32bit in 64bit

Source: ..\..\image\bin\x86\cs6\VDP.pln; DestDir: {code:GetS6Path_32in64|{pf32}\Adobe\Adobe InDesign Server CS6\}\Plug-ins; DestName: VDP.pln; Flags: ignoreversion overwritereadonly replacesameversion 64bit; Check: CheckedIndesignS6_32in64

Source: ..\..\image\bin\x86\cs6\(VDP Resources)\idrc_CLST\*.*; DestDir: {code:GetS6Path_32in64|{pf32}\Adobe\Adobe InDesign Server CS6\}\Plug-ins\(VDP Resources)\idrc_CLST; Flags: ignoreversion overwritereadonly replacesameversion 64bit; Check: CheckedIndesignS6_32in64
...

; CS6 32bit
Source: ..\..\image\bin\x86\cs6\VDP.pln; DestDir: {code:GetS6Path|{pf}\Adobe\Adobe InDesign Server CS6\}\Plug-ins; DestName: VDP.pln; Flags: ignoreversion overwritereadonly replacesameversion; Check: CheckedIndesignS6

Source: ..\..\image\bin\x86\cs6\(VDP Resources)\idrc_CLST\*.*; DestDir: {code:GetS6Path|{pf}\Adobe\Adobe InDesign Server CS6\}\Plug-ins\(VDP Resources)\idrc_CLST; Flags: ignoreversion overwritereadonly replacesameversion; Check: CheckedIndesignS6
...


Однако это не отменяет кучу функций CheckedXXX + GetXXXX ;-)

А в них надо проверить что

— соответствующий (в данном случае) индезигн сервер установлен
— архитектура соответствует
— установка этого компонента не отменена на предыдущем шаге
— реальный путь надо найти в реестре, а он зависит от версии адобовского инсталлятора.

Вот и получается много.
Cmake не делает сборку!
Он всего лишь создаёт проект для соответствующей студии.
С ключиком --build он же дёргает winbuilder, чтобы соответствующий проект собрался.
Но если нужный компилятор cl.exe не запускается под виндой, cmake ничуть этому не поможет!
с чего вы взяли, что я написал о том что он сам собирает? :)

в коментарии вопрос: почему gmake + батники если можно CMake + 2 команды

а апгрэйд системы до win7/8 — вполне разумное решения проблемы не работающего VS2012
Раз уж Вы собираете по Wine, почему бы не попробовать под ReactOS?
wine у меня и так есть, а реактось еще ставить надо. Проще уиндоусь восемь тогда поставить.
Не понял к чему автор вспомнил Windows 8. На семёрке прекрасно работают все студии от 2003 до 2013. Да и вариант поднять билд-сервер в амазоновском облаке — тоже выглядит разумнее, чем городить на локальном линуксе вайновую билд-платформу.
Так что из Visual Studio работает? devenv или cl.exe?
Мне нужен был cl.exe.

Однако в свое время devenv у меня работал тоже, 2003 и 2005 так точно.
Вы уж меня извините, но текст читать что-то уж совсем сложно
А расскажите подробнее, как в итоге «завели» компилятор от 2012-й студии под вайном?
Я вот пробую — ничего не выходит.

Скопировал папку студии, кинул «родную» либу msvcr110 — и дальше ступор.
без параметров — запускается.
Microsoft ® C/C++ Optimizing Compiler Version 17.00.61030 for x86
Copyright © Microsoft Corporation. All rights reserved.

С ключиком /help — работает.
Но при попытке запустить реальную компиляцию — вылетает с исключением Unhandled exception 0xc0000417

Пробовал с окружениями как 32, так и 64 бита, результат одинаково отрицательный
Я в папку с компилятором досыпал таких файлов (все — 32битные!)

msvcp110.dll
msvcr110.dll
vccorlib110.dll

а также досыпал туда же

RcDll.dll

И добавил в путь не саму папку с компилятором а вижловую Common7\IDE. В вайне сказал что имитируется Win7.

Вроде все…

Рекомендую еще запускать это из wineconsole. Саму wineconsole — из терминала, и в терминал поглядывать — оно там пишет чего не хватает.
Да, все сходится.
Увы, не функционирует.
Возможно, как-то связано еще с характеристиками системы (проц, ядерность и т.д.)
На всякий случай, Wine prefix architecture = 64bit Win7, но cl.exe строго 32битный. Или VC/bin/cl.exe или VC/bin/x86_amd64/cl.exe. Собственно, cl.exe из VC/amd64 также запускается с ключом /help, но я им не пользуюсь по историческим причинам и потому далее даже не смотрел.

Что еще интересного может быть — затрудняюсь, спрашивайте.

Машинка стандартная 4x Intel® Core(TM) i5-2400 CPU @ 3.10GHz, так что не в ней дело судя по всему.

vik@pc:~> rpm -qa | grep wine
wine-mp3-1.1.39-12.12.i586
wine-gecko-2.24-43.1.noarch
wine-mono-4.5.2-9.6.noarch
wine-32bit-1.7.16-334.1.x86_64
wine-1.7.16-334.1.x86_64

Даавно не апдейтил, да…
Вот он, ключевой момент:

wine-1.7

У меня стояла стоковая 1.6.
Апгрейда хватило, чтобы всё взлетело!

Итого: создал префикс с 32-битной архитектурой (64 бита тоже пойдёт, я просто описываю, как завелось).
Скопировал в него из установленной студии папку Microsoft Visual Studio 11, а также Windows Kits.
В папку vc/bin доложил плюсовые рантайм-библиотеки (rt110).

Ну и скрипт-обёртка, чтобы запускать компилятор в нужном окружении:
#!/bin/bash
PROGRAMFILES="c:/Program Files"
WSDK="$PROGRAMFILES/Microsoft Visual Studio 11.0"
export WINEPREFIX="/home/alexey/wine2"
export INCLUDE="$WSDK/VC/INCLUDE;$WSDK/VC/ATLMFC/INCLUDE;$PROGRAMFILES/Windows Kits/8.0/include/shared;$PROGRAMFILES/Windows Kits/8.0/include/um;$PROGRAMFILES/Windows Kits/8.0/include/winrt;"
export LIB="$WSDK/VC/LIB;$WSDK/VC/ATLMFC/LIB;$PROGRAMFILES/Windows Kits/8.0/lib/win8/um/x86;"
export LIBPATH="$WSDK/VC/LIB;$WSDK/VC/ATLMFC/LIB;"
export WINEPATH="c:/windows;c:/windows/system32;$WSDK/Common7/IDE;$WSDK/VC/bin;"
wine cl.exe $@


Сейчас буду думать, как сделать билд-среду через cmake
(видимо, просто тупо запускать его так же из-под wine, покуда родная линуксовая версия справедливо считает, что с проектами MS Visual Studio ей уметь работать незачем)
Sign up to leave a comment.

Articles