Handle CPDB lib in configure/build system

In preparation of Biswadeep's upcoming GSoC changes (see [1])
to update the CPDB (Common Print Dialog Backends) support to the
latest version and use the CPDB C API, add a
corresponding `--enable-cpdb` autogen option
(disabled by default).

When CPDB is enabled, check for the cpdb-frontend
library, define `ENABLE_CPDB` and set the compiler
and linker flags for building the `CPDManager`
(in vcl/unx/generic/printer/cpdmgr.cxx).

Add checks for existing code using `CPDBManager`,
so it only gets used when when CPDB is actually enabled.

While the cpdb-frontend library is currently not
actually used in `CPDManager` yet (as the previous approach
tried to use some DBUs API directly), it will be in
Biswadeep's upcoming changes.

With this commit in place, an `--enable-cpdb` build
works with this additional local test change in place
to actually make use of the library:

    diff --git a/vcl/unx/generic/printer/cpdmgr.cxx b/vcl/unx/generic/printer/cpdmgr.cxx
    index 7dc17cede353..0c3b71d519db 100644
    --- a/vcl/unx/generic/printer/cpdmgr.cxx
    +++ b/vcl/unx/generic/printer/cpdmgr.cxx
    @@ -22,6 +22,8 @@
     #include <cstddef>
     #include <unistd.h>

    +#include <cpdb/cpdb-frontend.h>
    +
     #include <unx/cpdmgr.hxx>

     #include <osl/file.h>
    @@ -259,6 +261,7 @@ CPDManager* CPDManager::tryLoadCPD()
             }
         }
     #endif
    +    cpdbPrintFile(nullptr, nullptr);
         return pManager;
     }

[1] https://lists.freedesktop.org/archives/libreoffice/2024-May/091911.html

Change-Id: Ifc50d2cd6496346bea55c73cb703e3c2d3eb44b8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168656
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Reviewed-by: Biswadeep Purkayastha <bpdps95@hotmail.com>
This commit is contained in:
Michael Weghorn 2024-06-11 07:31:07 +02:00
parent e74c94c1a6
commit e702e27795
7 changed files with 77 additions and 2 deletions

View file

@ -2569,6 +2569,28 @@ gb_LinkTarget__use_avahi :=
endif # ENABLE_AVAHI
ifeq ($(ENABLE_CPDB),TRUE)
define gb_LinkTarget__use_cpdb
$(call gb_LinkTarget_set_include,$(1),\
$$(INCLUDE) \
$(CPDB_CFLAGS) \
)
$(call gb_LinkTarget_add_libs,$(1),\
$(CPDB_LIBS) \
)
endef
else # ENABLE_CPDB
define gb_LinkTarget__use_cpdb
endef
endif # ENABLE_CPDB
ifeq ($(ENABLE_CUPS),TRUE)
define gb_LinkTarget__use_cups

View file

@ -93,6 +93,8 @@ export COMPILER_PLUGINS_TOOLING_ARGS=@COMPILER_PLUGINS_TOOLING_ARGS@
export COMPRESSIONTOOL=@COMPRESSIONTOOL@
export COM_IS_CLANG=@COM_IS_CLANG@
export COREDUMPCTL=@COREDUMPCTL@
export CPDB_CFLAGS=@CPDB_CFLAGS@
export CPDB_LIBS=@CPDB_LIBS@
export CPPU_ENV=@CPPU_ENV@
export CPPU_ENV_FOR_BUILD=@CPPU_ENV_FOR_BUILD@
export CPPUNIT_CFLAGS=$(gb_SPACE)@CPPUNIT_CFLAGS@
@ -159,6 +161,7 @@ SYSTEM_COINMP=@SYSTEM_COINMP@
export COINMP_CFLAGS=@COINMP_CFLAGS@
export COINMP_LIBS=@COINMP_LIBS@
export ENABLE_ATSPI_TESTS=@ENABLE_ATSPI_TESTS@
export ENABLE_CPDB=@ENABLE_CPDB@
export ENABLE_CUPS=@ENABLE_CUPS@
export ENABLE_CURL=@ENABLE_CURL@
export ENABLE_DBGUTIL=@ENABLE_DBGUTIL@

View file

@ -0,0 +1,14 @@
/* -*- 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/.
*/
#pragma once
#define ENABLE_CPDB 0
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View file

@ -1215,6 +1215,7 @@ if test -z "$using_x11" -o -z "$using_freetype_fontconfig"; then
fi
# Set defaults, if not set by platform
test "${test_cpdb+set}" = set || test_cpdb="$using_x11"
test "${test_cups+set}" = set || test_cups="$using_x11"
test "${test_dbus+set}" = set || test_dbus="$using_x11"
test "${test_gen+set}" = set || test_gen="$using_x11"
@ -1246,6 +1247,7 @@ test "$using_freetype_fontconfig" = yes && test_cairo=yes
# Keep in sync with the above $using_x11 depending test default list
disable_x11_tests()
{
test_cpdb=no
test_cups=no
test_dbus=no
test_gen=no
@ -1900,6 +1902,11 @@ AC_ARG_ENABLE(ld,
needed for Clang 12).]),
,)
AC_ARG_ENABLE(cpdb,
AS_HELP_STRING([--enable-cpdb],
[Build CPDB (Common Print Dialog Backends) support.]),
,)
libo_FUZZ_ARG_ENABLE(cups,
AS_HELP_STRING([--disable-cups],
[Do not build cups support.])
@ -6290,6 +6297,26 @@ else
fi
AC_SUBST(ENABLE_PAGEIN)
AC_MSG_CHECKING([whether to enable CPDB support])
ENABLE_CPDB=""
CPDB_CFLAGS=""
CPDB_LIBS=""
if test "$test_cpdb" = yes -a "x$enable_cpdb" = "xyes"; then
ENABLE_CPDB="TRUE"
AC_MSG_RESULT([yes])
PKG_CHECK_MODULES(CPDB, cpdb-frontend)
CPDB_CFLAGS=$(printf '%s' "$CPDB_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
FilterLibs "${CPDB_LIBS}"
CPDB_LIBS="${filteredlibs}"
AC_DEFINE([ENABLE_CPDB],[1])
else
AC_MSG_RESULT([no])
fi
AC_SUBST(ENABLE_CPDB)
AC_SUBST(CPDB_LIBS)
AC_SUBST(CPDB_CFLAGS)
dnl ===================================================================
dnl check for cups support
dnl ===================================================================
@ -15560,6 +15587,7 @@ AC_CONFIG_HEADERS([config_host/config_buildconfig.h])
AC_CONFIG_HEADERS([config_host/config_buildid.h])
AC_CONFIG_HEADERS([config_host/config_box2d.h])
AC_CONFIG_HEADERS([config_host/config_clang.h])
AC_CONFIG_HEADERS([config_host/config_cpdb.h])
AC_CONFIG_HEADERS([config_host/config_crypto.h])
AC_CONFIG_HEADERS([config_host/config_dconf.h])
AC_CONFIG_HEADERS([config_host/config_eot.h])

View file

@ -578,7 +578,9 @@ ifeq ($(USING_X11),TRUE)
$(eval $(call gb_Library_add_exception_objects,vcl,\
vcl/unx/generic/desktopdetect/desktopdetector \
vcl/unx/generic/window/sessioninhibitor \
vcl/unx/generic/printer/cpdmgr \
$(if $(ENABLE_CPDB), \
vcl/unx/generic/printer/cpdmgr \
) \
))
$(eval $(call gb_Library_use_externals,vcl,\
@ -644,6 +646,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\
$(eval $(call gb_Library_use_externals,vcl,\
$(if $(USE_HEADLESS_CODE), \
cairo \
$(if $(ENABLE_CPDB),cpdb) \
$(if $(ENABLE_CUPS),cups) \
fontconfig \
freetype \

View file

@ -18,6 +18,7 @@
*/
#include <sal/config.h>
#include <config_cpdb.h>
#include <stdlib.h>
@ -569,7 +570,7 @@ const PPDParser* PPDParser::getParser( const OUString& rFile )
#endif
} else if ( rMgr.getType() == PrinterInfoManager::Type::CPD )
{
#if ENABLE_DBUS && ENABLE_GIO
#if ENABLE_CPDB
pNewParser = const_cast<PPDParser*>(static_cast<CPDManager&>(rMgr).createCPDParser( aFile ));
#endif
}

View file

@ -17,6 +17,8 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include <config_cpdb.h>
#include <unx/cpdmgr.hxx>
#include <unx/cupsmgr.hxx>
#include <unx/gendata.hxx>
@ -81,7 +83,9 @@ PrinterInfoManager& PrinterInfoManager::get()
if (pPIM)
return *pPIM;
#if ENABLE_CPDB
pPIM = CPDManager::tryLoadCPD();
#endif
if (!pPIM)
pPIM = CUPSManager::tryLoadCUPS();
if (!pPIM)