Go to file
2024-11-19 21:45:40 +01:00
.github fix(ci): OpenSSL EoL on mac/brew #4764 2024-11-08 16:58:46 -06:00
.vscode Stack trace (#4691) 2024-10-10 10:36:13 +02:00
ActiveRecord chore(build): re-generated VS project files 2024-04-03 12:33:13 +02:00
ApacheConnector enh: #3890: Get rid of SingletonHolder 2024-01-30 09:56:27 +01:00
build test: move fuzzing tests from google/oss-fuzz repository (#4719) 2024-10-10 13:30:10 +02:00
ci Stack trace (#4691) 2024-10-10 10:36:13 +02:00
cmake fix(cmake): properly define POCO_DLL and POCO_STATIC based on BUILD_SHARED_LIBS. 2024-11-14 08:14:08 +01:00
contrib Moved contributed CMake modules to "cmake" folder 2012-12-16 00:40:40 -02:00
CppParser Sync differences from branch 'master' into 'devel' after release 1.13.3 2024-04-06 10:21:08 +02:00
CppUnit fix(cmake): properly define POCO_DLL and POCO_STATIC based on BUILD_SHARED_LIBS. 2024-11-14 08:14:08 +01:00
Crypto enh(Poco): Mark deprecated functionality with C++ attributes and resolve internal usage of deprecated functions (#4551) 2024-07-29 08:37:35 +02:00
Data DB logger sample (#4759) 2024-11-18 17:06:20 +01:00
DNSSD fix(cmake): properly define POCO_DLL and POCO_STATIC based on BUILD_SHARED_LIBS. 2024-11-14 08:14:08 +01:00
doc Sync differences from branch 'master' into 'devel' after release 1.13.3 2024-04-06 10:21:08 +02:00
Encodings Sync differences from branch 'master' into 'devel' after release 1.13.3 2024-04-06 10:21:08 +02:00
Foundation DB logger sample (#4759) 2024-11-18 17:06:20 +01:00
JSON chore(JSON): add stringify unicode tests #4707 (#4720) 2024-10-14 13:48:45 +02:00
JWT test: move fuzzing tests from google/oss-fuzz repository (#4719) 2024-10-10 13:30:10 +02:00
MongoDB enh(Poco): Mark deprecated functionality with C++ attributes and resolve internal usage of deprecated functions (#4551) 2024-07-29 08:37:35 +02:00
Net enh(SocketReactor): Introduce protected accessors to private members to be used in derived classes. 2024-11-19 21:45:40 +01:00
NetSSL_OpenSSL fix(tests): CodeQL issues 2024-11-16 21:54:16 +01:00
NetSSL_Win fix(tests): CodeQL issues 2024-11-16 21:54:16 +01:00
packaging RFC: Remove Windows CE support (#4342) 2023-12-14 00:25:04 +01:00
PageCompiler chore(build): re-generated VS project files 2024-04-03 12:33:13 +02:00
patches/AIX new trunk (base for 1.5) 2012-04-23 01:14:34 +00:00
PDF chore(Poco): Resolve a lot of warnings, reported by g++ 13. 2024-10-10 10:41:24 +02:00
PocoDoc feat(PocoDoc): search support (#4494) 2024-11-11 16:53:05 +01:00
ProGen feat(PocoDoc): search support (#4494) 2024-11-11 16:53:05 +01:00
Prometheus chore(build): re-generated VS project files 2024-04-03 12:33:13 +02:00
Redis chore(Poco): Resolve a lot of warnings, reported by g++ 13. 2024-10-10 10:41:24 +02:00
release fix(release): cpproj must include vcpkg files 2024-04-03 19:58:04 +02:00
SevenZip 4368 oracle odbc tests (#4410) 2024-01-31 22:07:07 +01:00
Trace 2808 data nullable (#4729) 2024-10-12 20:42:39 +02:00
Util DB logger sample (#4759) 2024-11-18 17:06:20 +01:00
XML update(expat): version 2.6.4 (#4760) (#4767) 2024-11-13 18:59:32 +01:00
Zip Hide zlib and expat libs from the user of Poco libraries (replaces #4579) (#4724) 2024-10-04 09:50:39 +02:00
.gitattributes more line ending fixes 2012-11-11 11:20:31 +01:00
.gitignore GitHub runner ubuntu 24.04 and resolve some issues (#4727) 2024-10-09 21:53:49 +02:00
build_cmake.cmd Cleanup cmake build system to use transitive dependency management from cmake (#2321) 2018-06-03 11:17:50 -05:00
build_cmake.sh fix(cmake): properly define POCO_DLL and POCO_STATIC based on BUILD_SHARED_LIBS. 2024-11-14 08:14:08 +01:00
build_vs160.cmd add build_vs160.cmd 2020-01-12 10:03:01 +01:00
build_vs170.cmd #3405 #3482 #3485 2022-05-24 18:35:58 -05:00
buildwin.cmd fix(build): fix build with openssl 3.1.0 on vs2022 (#3969) 2023-03-17 17:45:56 -05:00
buildwin.ps1 chore(buldwin): remove WEC2013 2024-04-03 14:06:06 +02:00
CHANGELOG Sync differences from branch 'master' into 'devel' after release 1.13.3 2024-04-06 10:21:08 +02:00
CMakeLists.txt feat(PocoDoc): search support (#4494) 2024-11-11 16:53:05 +01:00
CODE_OF_CONDUCT.md add CODE_OF_CONDUCT.md 2018-02-09 09:19:46 +01:00
components Stack trace (#4691) 2024-10-10 10:36:13 +02:00
configure feat(PocoDoc): search support (#4494) 2024-11-11 16:53:05 +01:00
CONTRIBUTING.md Update CONTRIBUTING.md for new branching scheme. 2024-04-15 13:11:34 +02:00
CONTRIBUTORS feature(FileStream): Allow using Poco::FileStream to wrap arbitrary file handles/descriptors as C++ streams (#4424) 2024-05-08 11:53:43 +02:00
cppignore.lnx cppignore: add testEchoIPv4Move (#4322) 2023-12-05 19:23:03 +01:00
cppignore.win fix(SocketReactorTest): deadlock test intermittently hangs #4400 (#4401) 2024-01-17 09:20:20 +01:00
DLLVersion.rc Sync differences from branch 'master' into 'devel' after release 1.13.3 2024-04-06 10:21:08 +02:00
env.bat Setup POCO_BASE on Windows 2018-06-20 09:44:33 +02:00
env.sh re-added MongoDB, improved buildwin and release scripts 2013-07-23 15:04:48 +02:00
gh-cli-for-release-notes.sh Sync differences from branch 'master' into 'devel' after release 1.13.3 2024-04-06 10:21:08 +02:00
libversion Sync differences from branch 'master' into 'devel' after release 1.13.3 2024-04-06 10:21:08 +02:00
LICENSE LICENSE: add info about SPDX-License-Identifier usage and use it 2014-05-14 08:38:09 +02:00
Makefile DB logger sample (#4759) 2024-11-18 17:06:20 +01:00
poco_env.bash Stack trace (#4691) 2024-10-10 10:36:13 +02:00
progen.ps1 chore(build): re-generated VS project files 2024-04-03 12:33:13 +02:00
README chore: README 2024-04-03 19:17:40 -05:00
README.md fix(cmake): increase minimum version to 3.15, fix Data::PostgreSQL include target, remove unnecessary cmake modules that are provided with CMake itself (#4540) 2024-10-16 12:09:24 +02:00
runLibTests.sh 4307/8/9/10 data races (#4312) 2023-12-09 21:16:24 +01:00
runVSCode.sh Build and dev system improvements (#4193) 2023-10-18 18:48:20 +02:00
tsan.suppress Add ProcessRunner and PIDFile (#4225) 2023-11-24 20:22:01 +01:00
VERSION Sync differences from branch 'master' into 'devel' after release 1.13.3 2024-04-06 10:21:08 +02:00

alt text

poco-ci CII Best Practices

POCO (Portable Components) C++ Libraries are:

  • A collection of C++ class libraries, conceptually similar to the Java Class Library or the .NET Framework.
  • Focused on solutions to frequently-encountered practical problems.
  • Focused on "internet-age" network-centric applications.
  • Written in efficient, modern, 100% ANSI/ISO Standard C++.
  • Based on and complementing the C++ Standard Library/STL.
  • Highly portable and available on many different platforms, from embedded to server.
  • Open Source, licensed under the Boost Software License.

alt text

To start using POCO, see the Guided Tour and Getting Started documents.

Quick Start (with CMake)

Prerequisites

  • CMake 3.15 or newer
  • A C++17 compiler (Visual C++ 2017, GCC 8.0, Clang 5, or newer)
  • OpenSSL headers and libraries (optional, but recommended)
  • MySQL, PostgreSQL and ODBC client libraries (optional)

Most Unix/Linux systems already have OpenSSL preinstalled. If your system does not have OpenSSL, please get it from https://www.openssl.org or another source. You do not have to build OpenSSL yourself - a binary distribution is fine. For example, via Debian APT:

$ apt-get install openssl libssl-dev

On macOS, the easiest way to install OpenSSL is via Homebrew:

$ brew install openssl

The easiest way to install OpenSSL on Windows is to use a binary (prebuild) release, for example the one from Shining Light Productions that comes with a Windows installer. OpenSSL can also be installed via the vcpkg package manager.

On Windows, POCO can also use the native Windows TLS APIs (SChannel).

Installing All Dependencies (Linux and macOS)

All dependencies can be installed with the following commands:

Debian Linux (including Ubuntu and Raspbian)

$ sudo apt-get -y update && sudo apt-get -y install git g++ make cmake libssl-dev libmysqlclient-dev libpq-dev

RedHat Linux

$ sudo yum install -y git gcc-c++ make cmake3 openssl-devel mysql-devel postgresql-devel 

macOS (with Homebrew)

$ brew install cmake openssl mysql-client libpq

Building with CMake (Linux, macOS, Windows)

CMake (version 3.15 or newer) is the recommended build system for building the POCO C++ Libraries.

$ git clone -b main https://github.com/pocoproject/poco.git
$ cd poco
$ mkdir cmake-build
$ cd cmake-build
$ cmake ..
$ cmake --build . --config Release

On macOS, it's necessary to tell CMake where to find the OpenSSL headers and libraries by setting the OPENSSL_ROOT_DIR CMake variable. For example, if OpenSSL has been installed with Homebrew, the cmake invocation becomes:

$ cmake .. -DOPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl@3

Similarly, the locations of other external libraries can be specified:

$ cmake .. -DOPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl@3 -DMYSQL_ROOT_DIR=/opt/homebrew/opt/mysql-client -DPostgreSQL_ROOT_DIR=/opt/homebrew/opt/libpq

Other common ways of building with CMake (e.g., cmake-gui) will also work.

There are also a number of project-specific CMake variables that can be changed.

Cross-Compiling

With a proper CMake toolchain file (specified via the CMAKE_TOOLCHAIN_FILE CMake variable), the POCO C++ Libraries can be cross-compiled for embedded Linux systems:

$ cmake .. -DCMAKE_TOOLCHAIN_FILE=/path/to/mytoolchain.cmake -DCMAKE_INSTALL_PREFIX=/path/to/target

Installing

The POCO C++ Libraries headers and libraries can be optionally be installed by building the install target.

$ sudo cmake --build . --target install

The default install location is /usr/local/ on Linux and macOS and C:\Program Files (x64)\ on Windows and can be overridden by setting the CMAKE_INSTALL_PREFIX CMake variable.

Building and Installing - Using vcpkg

You can download and install poco using the vcpkg dependency manager:

$ git clone https://github.com/Microsoft/vcpkg.git
$ cd vcpkg
$ ./bootstrap-vcpkg.sh
$ ./vcpkg integrate install
$ ./vcpkg install poco

The poco port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please create an issue or pull request on the vcpkg repository.

Building and Installing - Using Conan

You can download and install poco using the Conan(https://github.com/conan-io/conan) package manager. It needed to be installed first(https://conan.io/downloads.html):

You can install Poco libraries from Conan Center(https://conan.io/center.html):

$ conan install -r conancenter poco/1.12.0@

Or, you can download Poco recipe and build locally:

$ conan install -r conancenter poco/1.12.0@ --build=poco

The Poco recipe and packages in Conan Center are kept up to date by Conan team members and community contributors. If the version is out of date, or you detect any wrong behavior, please create an issue or pull request(https://github.com/conan-io/conan-center-index) on the Conan Center Index repository.

Building Without CMake

If you do not want to or cannot use CMake, POCO can also be built with Visual Studio (project and solution files included) or GNU Make (Linux, macOS and other supported Unix platforms).

Please refer to the documentation for more information.

Getting POCO via a Package Manager

POCO can also be obtained via different package managers.

Community and Contributing

POCO has an active user and contributing community, please visit our website and blog. Answers to POCO-related questions can also be found on Stack Overflow.

Please see CONTRIBUTING for submitting contributions, bugs reports, feature requests or security issues.

POCO vs. Boost

In regards to Boost, in spite of some functional overlapping, POCO is best thought of as a Boost complement (rather than replacement). Side-by-side use of Boost and POCO is a very common occurrence.