Files
sousa-gecko/widget/nsCUPSShim.h
T
Emilio Cobos Álvarez 2861287f6d Bug 2054311 - Sort headers in widget/. r=stransky,win-reviewers,geckoview-reviewers,gstoll,owlish
Autogenerated with:

    cp dom/.clang-format widget/ && mach format widget/**.{cpp,h,mm}

Manual changes:

 * Had to add a manual override in nsWaylandDisplay.h /
   DMABufFormats.cpp to include mozwayland before protocols.
 * Missing includes in nsWindowWayland/X11.h / nsDragService.
 * nsFilePicker missed an nsWindow forward declaration.
 * Various overrides in widget/windows because windows headers are order
   dependent.

Differential Revision: https://phabricator.services.mozilla.com/D311688
2026-07-14 16:17:37 +00:00

95 lines
3.0 KiB
C++

/* 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 nsCUPSShim_h_
#define nsCUPSShim_h_
#include <cups/cups.h>
#include "mozilla/Mutex.h"
// TODO: This should be a configure option, ideally.
#ifndef XP_MACOSX
# define CUPS_SHIM_RUNTIME_LINK
#endif
struct PRLibrary;
class nsCUPSShim {
public:
#ifdef CUPS_SHIM_RUNTIME_LINK
nsCUPSShim();
bool InitOkay() { return mInitOkay; }
#else
nsCUPSShim() = default;
bool InitOkay() { return true; }
#endif
// We allow some functions to be missing, to degrade as gracefully as possible
// for older versions of CUPS.
//
// The current target is CUPS 1.6 (bug 1701019).
enum class Optional : bool { No, Yes };
/**
* Function pointers for supported functions. These are only
* valid after successful initialization.
*/
#define CUPS_SHIM_ALL_FUNCS(X) \
X(Optional::No, cupsAddOption) \
X(Optional::No, cupsCheckDestSupported) \
X(Optional::No, cupsConnectDest) \
X(Optional::No, cupsCopyDest) \
X(Optional::No, cupsCopyDestInfo) \
X(Optional::No, cupsDoRequest) \
X(Optional::No, cupsEnumDests) \
X(Optional::No, cupsFreeDestInfo) \
X(Optional::No, cupsFreeDests) \
X(Optional::No, cupsGetDestMediaByName) \
X(Optional::Yes, cupsFindDestDefault) \
X(Optional::Yes, cupsGetDestMediaDefault) \
X(Optional::Yes, cupsGetDestMediaCount) \
X(Optional::Yes, cupsGetDestMediaByIndex) \
X(Optional::Yes, cupsLocalizeDestMedia) \
X(Optional::No, cupsGetDest) \
X(Optional::No, cupsGetDests) \
X(Optional::No, cupsGetDests2) \
X(Optional::No, cupsGetNamedDest) \
X(Optional::No, cupsGetOption) \
X(Optional::No, cupsServer) \
X(Optional::Yes, httpAddrPort) \
X(Optional::No, httpClose) \
X(Optional::No, httpGetHostname) \
X(Optional::Yes, httpGetAddress) \
X(Optional::No, ippAddString) \
X(Optional::No, ippAddStrings) \
X(Optional::No, ippDelete) \
X(Optional::No, ippFindAttribute) \
X(Optional::No, ippGetCount) \
X(Optional::No, ippGetString) \
X(Optional::No, ippNewRequest) \
X(Optional::No, ippPort)
#ifdef CUPS_SHIM_RUNTIME_LINK
// Define a single field which holds a function pointer.
# define CUPS_SHIM_FUNC_DECL(opt_, fn_) decltype(::fn_)* fn_ = nullptr;
#else
// Define a static constexpr function pointer. GCC can sometimes optimize
// away the pointer fetch for this.
# define CUPS_SHIM_FUNC_DECL(opt_, fn_) \
static constexpr decltype(::fn_)* const fn_ = ::fn_;
#endif
CUPS_SHIM_ALL_FUNCS(CUPS_SHIM_FUNC_DECL)
#undef CUPS_SHIM_FUNC_DECL
#ifdef CUPS_SHIM_RUNTIME_LINK
private:
bool mInitOkay = false;
PRLibrary* mCupsLib = nullptr;
#endif
};
#endif /* nsCUPSShim_h_ */