Kaydet (Commit) 648f24f5 authored tarafından Mike Kaganski's avatar Mike Kaganski

tdf#114635: reimplement TWAIN-based scan using 32-bit shim on Windows

Since TWAIN is only actually available as 32-bit component on Windows,
to use it in a 64-bit program, we need a 32-bit shim program that does
all actual communication with TWAIN subsystem.

This change reimplements TWAIN implementation to be a separate 32-bit
process. Image is transfered from the shim to main program using file
mapping API.

This reverts most of commit 585d9806.
64-bit LibreOffice doesn't bundle TWAIN DSM library now. TWAIN DSM
source code is still used for TWAIN headers.

Change-Id: I46f178ad36acd97a9eff156624b99036fcbb83f8
Reviewed-on: https://gerrit.libreoffice.org/65688
Tested-by: Jenkins
Reviewed-by: 's avatarMike Kaganski <mike.kaganski@collabora.com>
üst c3c2ac6a
......@@ -151,6 +151,7 @@ $(eval $(call gb_Helper_register_executables_for_install,OOO,brand, \
unoinfo \
unopkg \
unopkg_com \
twain32shim \
) \
))
......@@ -957,7 +958,6 @@ $(eval $(call gb_Helper_register_packages_for_install,ooo,\
)) \
sfx2_classification \
$(if $(filter OPENCL,$(BUILD_TYPE)),sc_opencl_runtimetest) \
$(if $(and $(filter WNT,$(OS)), $(filter X86_64,$(CPUNAME))),twain_dsm) \
$(if $(ENABLE_HTMLHELP),\
helpcontent2_html_dynamic \
helpcontent2_html_media \
......
......@@ -52,6 +52,7 @@ export BUILD_TYPE=@BUILD_TYPE@
export BUILD_UNOWINREG=@BUILD_UNOWINREG@
export BUILD_VER_STRING=@BUILD_VER_STRING@
export BUILD_X64=@BUILD_X64@
export BUILD_X86=@BUILD_X86@
export BZIP2_CFLAGS=$(gb_SPACE)@BZIP2_CFLAGS@
export BZIP2_LIBS=$(gb_SPACE)@BZIP2_LIBS@
export CAIRO_CFLAGS=$(gb_SPACE)@CAIRO_CFLAGS@
......@@ -86,6 +87,7 @@ export CUSTOM_BRAND_DIR=@CUSTOM_BRAND_DIR@
export CUSTOM_BRAND_IMAGES=@CUSTOM_BRAND_IMAGES@
export CXX=@CXX@
export CXX_X64_BINARY=@CXX_X64_BINARY@
export CXX_X86_BINARY=@CXX_X86_BINARY@
@x_CXXFLAGS@ export CXXFLAGS=@CXXFLAGS@
export CXXFLAGS_CXX11=@CXXFLAGS_CXX11@
export DATADIR=@DATADIR@
......
......@@ -3600,6 +3600,29 @@ if test "$_os" = "WINNT"; then
# These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
AC_SUBST(CXX_X64_BINARY)
AC_SUBST(LINK_X64_BINARY)
# Check for 32-bit compiler to use to build the 32-bit TWAIN shim
# needed to support TWAIN scan on both 32- and 64-bit systems
BUILD_X86=
CXX_X86_BINARY=
if test "$BITNESS_OVERRIDE" = "64"; then
AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
if "$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber/bin/HostX86/x86/cl.exe" -? </dev/null >/dev/null 2>&1; then
BUILD_X86=TRUE
CXX_X86_BINARY="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber/bin/HostX86/x86/cl.exe -arch:SSE"
AC_MSG_RESULT([found])
else
AC_MSG_RESULT([not found])
AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
fi
else
BUILD_X86=TRUE
CXX_X86_BINARY=$MSVC_CXX
fi
AC_SUBST(BUILD_X86)
AC_SUBST(CXX_X86_BINARY)
fi
AC_SUBST(VCVER)
AC_SUBST(DEVENV)
......
......@@ -7,14 +7,27 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
$(eval $(call gb_ExternalPackage_ExternalPackage,twain_dsm,twain_dsm))
$(eval $(call gb_Executable_Executable,twain32shim))
$(eval $(call gb_ExternalPackage_use_external_project,twain_dsm,twain_dsm))
$(eval $(call gb_Executable_set_targettype_gui,twain32shim,YES))
ifeq ($(OS),WNT)
$(eval $(call gb_ExternalPackage_add_file,twain_dsm,$(LIBO_BIN_FOLDER)/TWAINDSM.dll,PCBuild/out/TWAINDSM.dll))
endif
$(eval $(call gb_Executable_set_x86,twain32shim,YES))
# headers are not delivered, but used from unpacked dir pub/include/
$(eval $(call gb_Executable_use_externals,twain32shim,\
sane_headers \
))
# vim: set noet sw=4 ts=4:
$(eval $(call gb_Executable_set_include,twain32shim,\
-I$(SRCDIR)/extensions/inc \
$$(INCLUDE) \
))
$(eval $(call gb_Executable_add_exception_objects,twain32shim,\
extensions/source/scanner/twain32shim \
))
$(eval $(call gb_Executable_use_system_win32_libs,twain32shim,\
shell32 \
))
# vim:set noet sw=4 ts=4:
......@@ -13,7 +13,7 @@ $(eval $(call gb_Library_Library,scn))
$(eval $(call gb_Library_use_externals,scn,\
boost_headers \
sane_headers \
$(if $(filter-out WNT,$(OS)),sane_headers) \
))
$(eval $(call gb_Library_set_include,scn,\
......@@ -26,15 +26,16 @@ $(eval $(call gb_Library_set_componentfile,scn,extensions/source/scanner/scn))
$(eval $(call gb_Library_use_sdk_api,scn))
$(eval $(call gb_Library_use_libraries,scn,\
svt \
vcl \
tl \
utl \
comphelper \
cppuhelper \
cppu \
sal \
cppuhelper \
i18nlangtag \
sal \
$(if $(filter WNT,$(OS)),salhelper) \
svt \
tl \
utl \
vcl \
))
$(eval $(call gb_Library_add_exception_objects,scn,\
......
......@@ -17,9 +17,12 @@ ifneq ($(filter-out iOS ANDROID,$(OS)),)
$(eval $(call gb_Module_add_targets,extensions,\
Library_abp \
Library_ldapbe2 \
$(if $(filter WNT,$(OS)),Library_WinUserInfoBe) \
Library_log \
Library_scn \
$(if $(filter WNT,$(OS)), \
Library_WinUserInfoBe \
$(if $(filter TRUE,$(BUILD_X86)),Executable_twain32shim) \
) \
UIConfig_sabpilot \
UIConfig_scanner \
))
......
This diff is collapsed.
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
*/
#ifndef INCLUDED_EXTENSIONS_SOURCE_SCANNER_TWAIN32SHIM_HXX
#define INCLUDED_EXTENSIONS_SOURCE_SCANNER_TWAIN32SHIM_HXX
#include <prewin.h>
#include <postwin.h>
#include <exception>
#include <string>
#include <sstream>
#include <iomanip>
// Don't use WM_USER
// Notifications from shim to parent; wParam = event id
#define WM_TWAIN_EVENT (WM_USER + 1)
// lParam is HWND
#define TWAIN_EVENT_NOTIFYHWND 0
// lParam is result (bool indicating success)
#define TWAIN_EVENT_REQUESTRESULT 1
// lParam is ignored
#define TWAIN_EVENT_NONE 10
#define TWAIN_EVENT_QUIT 11
#define TWAIN_EVENT_SCANNING 12
// lParam is HANDLE to shared file mapping valid in context of parent process
#define TWAIN_EVENT_XFER 13
// Requests from parent to shim; wParam = request id
#define WM_TWAIN_REQUEST (WM_USER + 2)
#define TWAIN_REQUEST_QUIT 0 // Destroy()
#define TWAIN_REQUEST_SELECTSOURCE 1
#define TWAIN_REQUEST_INITXFER 2
// messages starting from this are not to be used for interprocess communications
#define WM_SHIM_INTERNAL (WM_USER + 200)
template <typename IntType> std::string Num2Hex(IntType n)
{
std::stringstream sMsg;
sMsg << "0x" << std::uppercase << std::setfill('0') << std::setw(sizeof(n) * 2) << std::hex
<< n;
return sMsg.str();
}
void ThrowWin32Error(const char* sFunc, DWORD nWin32Error)
{
std::stringstream sMsg;
sMsg << sFunc << " failed with Win32 error code " << Num2Hex(nWin32Error) << "!";
throw std::exception(sMsg.str().c_str());
}
void ThrowLastError(const char* sFunc) { ThrowWin32Error(sFunc, GetLastError()); }
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
$(eval $(call gb_ExternalProject_ExternalProject,twain_dsm))
$(eval $(call gb_ExternalProject_use_unpacked,twain_dsm,twain_dsm))
$(eval $(call gb_ExternalProject_register_targets,twain_dsm,\
build \
))
ifeq ($(OS),WNT)
$(call gb_ExternalProject_get_state_target,twain_dsm,build) :
$(call gb_ExternalProject_run,build,\
MSBuild.exe visual_studio/TWAIN_DSM_VS2015.sln /t:Build \
/p:Configuration=$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release) \
/p:Platform=$(if $(filter INTEL,$(CPUNAME)),Win32,x64) \
/p:OutDir=../PCBuild/out/ /p:IntDir=../PCBuild/obj/ \
$(if $(filter 140,$(VCVER)),/p:PlatformToolset=v140 /p:VisualStudioVersion=14.0 /ToolsVersion:14.0) \
$(if $(filter 150,$(VCVER)),/p:PlatformToolset=v141 /p:VisualStudioVersion=15.0 /ToolsVersion:15.0) \
$(if $(filter 150-10,$(VCVER)-$(WINDOWS_SDK_VERSION)),/p:WindowsTargetPlatformVersion=$(UCRTVERSION)) \
)
endif
# vim: set noet sw=4 ts=4:
......@@ -10,15 +10,11 @@
$(eval $(call gb_Module_Module,twain_dsm))
ifeq ($(OS),WNT)
ifeq ($(BUILD_X86),TRUE)
$(eval $(call gb_Module_add_targets,twain_dsm,\
UnpackedTarball_twain_dsm \
$(if $(filter X86_64,$(CPUNAME)), \
ExternalProject_twain_dsm \
ExternalPackage_twain_dsm \
) \
))
endif
endif
# vim: set noet sw=4 ts=4:
diff --git a/visual_studio/TWAIN_DSM_VS2015.vcxproj.filters b/visual_studio/TWAIN_DSM_VS2015.vcxproj.filters
new file mode 100755
index 000000000000..a17a30d0097f
--- /dev/null
+++ b/visual_studio/TWAIN_DSM_VS2015.vcxproj.filters
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\src\apps.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\dsm.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hook.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\log.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\src\dsm.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\resource.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\twain.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="..\src\dsm.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project>
\ No newline at end of file
......@@ -11,13 +11,4 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,twain_dsm))
$(eval $(call gb_UnpackedTarball_set_tarball,twain_dsm,$(TWAIN_DSM_TARBALL)))
$(eval $(call gb_UnpackedTarball_set_patchlevel,twain_dsm,1))
$(eval $(call gb_UnpackedTarball_add_patches,twain_dsm, \
external/twain_dsm/TWAIN_DSM_VS2015.vcxproj.patch \
external/twain_dsm/TWAIN_DSM_VS2015.vcxproj.filters.patch \
external/twain_dsm/fix-non-us-ascii-chars-part1.patch \
external/twain_dsm/fix-non-us-ascii-chars-part2.patch \
))
# vim: set noet sw=4 ts=4:
diff --git a/src/apps.cpp b/src/apps.cpp
index 54c6347573fa..45d169d5b148 100755
--- a/src/apps.cpp
+++ b/src/apps.cpp
@@ -1,7 +1,7 @@
/***************************************************************************
* TWAIN Data Source Manager version 2.1
* Manages image acquisition data sources used by a machine.
- * Copyright 2007 TWAIN Working Group:
+ * Copyright (C) 2007 TWAIN Working Group:
* Adobe Systems Incorporated,AnyDoc Software Inc., Eastman Kodak Company,
* Fujitsu Computer Products of America, JFL Peripheral Solutions Inc.,
* Ricoh Corporation, and Xerox Corporation.
diff --git a/src/log.cpp b/src/log.cpp
index 496e9d9c52a1..3b05307981ad 100755
--- a/src/log.cpp
+++ b/src/log.cpp
@@ -1,7 +1,7 @@
/***************************************************************************
* TWAIN Data Source Manager version 2.1
* Manages image acquisition data sources used by a machine.
- * Copyright 2007 TWAIN Working Group:
+ * Copyright (C) 2007 TWAIN Working Group:
* Adobe Systems Incorporated,AnyDoc Software Inc., Eastman Kodak Company,
* Fujitsu Computer Products of America, JFL Peripheral Solutions Inc.,
* Ricoh Corporation, and Xerox Corporation.
diff --git a/src/dsm.cpp b/src/dsm.cpp
index 1b74285c5d72..efd8f443ca02 100755
--- a/src/dsm.cpp
+++ b/src/dsm.cpp
@@ -1,7 +1,7 @@
/***************************************************************************
* TWAIN Data Source Manager version 2.1
* Manages image acquisition data sources used by a machine.
- * Copyright © 2007 TWAIN Working Group:
+ * Copyright (C) 2007 TWAIN Working Group:
* Adobe Systems Incorporated,AnyDoc Software Inc., Eastman Kodak Company,
* Fujitsu Computer Products of America, JFL Peripheral Solutions Inc.,
* Ricoh Corporation, and Xerox Corporation.
@@ -38,7 +38,7 @@
/*! \mainpage Data Source Manager
*
* The Source Manager provides the communication path between the
- * Application and the Source, supports the user’s selection of a
+ * Application and the Source, supports the user's selection of a
* Source, and loads the Source for access by the Application.
* Communications from Application to Source Manager or the Source
* to Source Manager (via DAT_NULL) arrive in exclusively through
@@ -51,7 +51,7 @@
*
*
*
- * Copyright © 2007 TWAIN Working Group: Adobe Systems Incorporated,
+ * Copyright (C) 2007 TWAIN Working Group: Adobe Systems Incorporated,
* AnyDoc Software Inc., Eastman Kodak Company,
* Fujitsu Computer Products of America, JFL Peripheral Solutions Inc.,
* Ricoh Corporation, and Xerox Corporation.
diff --git a/src/dsm.h b/src/dsm.h
index f7afb316d3de..c156d3843a9e 100755
--- a/src/dsm.h
+++ b/src/dsm.h
@@ -1,7 +1,7 @@
/***************************************************************************
* TWAIN Data Source Manager version 2.1
* Manages image acquisition data sources used by a machine.
- * Copyright © 2007 TWAIN Working Group:
+ * Copyright (C) 2007 TWAIN Working Group:
* Adobe Systems Incorporated,AnyDoc Software Inc., Eastman Kodak Company,
* Fujitsu Computer Products of America, JFL Peripheral Solutions Inc.,
* Ricoh Corporation, and Xerox Corporation.
......@@ -120,6 +120,7 @@ gb_Executable_add_defs = $(call gb_Executable__forward_to_Linktarget,$(subst gb_
gb_Executable_set_include = $(call gb_Executable__forward_to_Linktarget,$(subst gb_Executable_,,$(0)),$(1),$(2),$(3))
gb_Executable_add_ldflags = $(call gb_Executable__forward_to_Linktarget,$(subst gb_Executable_,,$(0)),$(1),$(2),$(3))
gb_Executable_set_ldflags = $(call gb_Executable__forward_to_Linktarget,$(subst gb_Executable_,,$(0)),$(1),$(2),$(3))
gb_Executable_set_x86 = $(call gb_Executable__forward_to_Linktarget,$(subst gb_Executable_,,$(0)),$(1),$(2),$(3))
gb_Executable_add_libs = $(call gb_Executable__forward_to_Linktarget,$(subst gb_Executable_,,$(0)),$(1),$(2),$(3))
gb_Executable_disable_standard_system_libs = $(call gb_Executable__forward_to_Linktarget,$(subst gb_Executable_,,$(0)),$(1),$(2),$(3))
gb_Executable_use_system_darwin_frameworks = $(call gb_Executable__forward_to_Linktarget,$(subst gb_Executable_,,$(0)),$(1),$(2),$(3))
......
......@@ -711,6 +711,7 @@ $(WORKDIR)/Headers/% :
# - TARGETTYPE is the type of linktarget as some platforms need very different
# command to link different targettypes.
# - LIBRARY_X64 is only relevant for building a x64 library on windows.
# - PE_X86 is only relevant for building a x86 binaries on Windows.
#
# Since most variables are set on the linktarget and not on the object, the
# object learns about these setting via GNU makes scoping of target variables.
......@@ -780,6 +781,7 @@ $(call gb_LinkTarget_get_target,$(1)) : PCH_NAME :=
$(call gb_LinkTarget_get_target,$(1)) : PCHOBJS :=
$(call gb_LinkTarget_get_target,$(1)) : PCHOBJEX :=
$(call gb_LinkTarget_get_target,$(1)) : PCHOBJNOEX :=
$(call gb_LinkTarget_get_target,$(1)) : PE_X86 :=
$(call gb_LinkTarget_get_target,$(1)) : PDBFILE :=
$(call gb_LinkTarget_get_target,$(1)) : TARGETGUI :=
$(call gb_LinkTarget_get_target,$(1)) : EXTRAOBJECTLISTS :=
......@@ -1435,6 +1437,12 @@ $(call gb_LinkTarget_get_target,$(1)) : LIBRARY_X64 := $(2)
endef
# call gb_LinkTarget_set_x86,linktarget,boolean
define gb_LinkTarget_set_x86
$(call gb_LinkTarget_get_target,$(1)) : PE_X86 := $(2)
endef
# call gb_LinkTarget_set_ilibtarget,linktarget,ilibfilename
define gb_LinkTarget_set_ilibtarget
$(call gb_LinkTarget_get_clean_target,$(1)) \
......
......@@ -40,9 +40,10 @@ $(call gb_Helper_abbreviate_dirs,\
mkdir -p $(dir $(1)) $(dir $(4)) && \
unset INCLUDE && \
$(if $(filter YES,$(CXXOBJECT_X64)), $(CXX_X64_BINARY), \
$(if $(filter %.c,$(3)), $(gb_CC), \
$(if $(filter -clr,$(2)), \
$(MSVC_CXX) -I$(SRCDIR)/solenv/clang-cl,$(gb_CXX)))) \
$(if $(filter YES,$(PE_X86)), $(CXX_X86_BINARY), \
$(if $(filter %.c,$(3)), $(gb_CC), \
$(if $(filter -clr,$(2)), \
$(MSVC_CXX) -I$(SRCDIR)/solenv/clang-cl,$(gb_CXX))))) \
$(DEFS) \
$(gb_LTOFLAGS) \
$(2) \
......@@ -57,6 +58,7 @@ $(call gb_Helper_abbreviate_dirs,\
$(if $(COMPILER_TEST),,$(gb_COMPILERDEPFLAGS)) \
$(INCLUDE) \
$(if $(filter YES,$(CXXOBJECT_X64)), -U_X86_ -D_AMD64_,) \
$(if $(filter YES,$(PE_X86)), -D_X86_ -U_AMD64_,) \
-c $(3) \
-Fo$(1)) $(if $(filter $(true),$(gb_SYMBOL)),/link /DEBUG:FASTLINK) \
$(if $(COMPILER_TEST),,$(call gb_create_deps,$(4),$(1),$(3)))
......@@ -172,11 +174,17 @@ $(call gb_Helper_abbreviate_dirs,\
$(if $(filter Executable,$(TARGETTYPE)),$(gb_Executable_TARGETTYPEFLAGS)) \
$(if $(filter YES,$(LIBRARY_X64)),,$(if $(filter YES,$(TARGETGUI)), -SUBSYSTEM:WINDOWS$(MSC_SUBSYSTEM_VERSION), -SUBSYSTEM:CONSOLE$(MSC_SUBSYSTEM_VERSION))) \
$(if $(filter YES,$(LIBRARY_X64)), -MACHINE:X64) \
$(if $(filter YES,$(PE_X86)), -MACHINE:X86) \
$(if $(filter YES,$(LIBRARY_X64)), \
-LIBPATH:$(COMPATH)/lib/$(if $(filter 140,$(VCVER)),amd64,x64) \
-LIBPATH:$(WINDOWS_SDK_HOME)/lib/x64 \
-LIBPATH:$(UCRTSDKDIR)lib/$(UCRTVERSION)/ucrt/x64 \
$(if $(filter 80 81 10,$(WINDOWS_SDK_VERSION)),-LIBPATH:$(WINDOWS_SDK_HOME)/lib/$(WINDOWS_SDK_LIB_SUBDIR)/um/x64)) \
$(if $(filter YES,$(PE_X86)), \
-LIBPATH:$(COMPATH)/lib/x86 \
-LIBPATH:$(WINDOWS_SDK_HOME)/lib/x86 \
-LIBPATH:$(UCRTSDKDIR)lib/$(UCRTVERSION)/ucrt/x86 \
$(if $(filter 80 81 10,$(WINDOWS_SDK_VERSION)),-LIBPATH:$(WINDOWS_SDK_HOME)/lib/$(WINDOWS_SDK_LIB_SUBDIR)/um/x86)) \
$(T_LDFLAGS) \
$(if $(filter Library CppunitTest Executable,$(TARGETTYPE)),/NATVIS:$(SRCDIR)/solenv/vs/LibreOffice.natvis) \
@$${RESPONSEFILE} \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment