Warning, /sdk/codevis/thirdparty/soci/docs/installation.md is written in an unsupported language. File is not indexed.
0001 # Installation 0002 0003 ## Requirements 0004 0005 Below is an overall list of SOCI core: 0006 0007 * C++ compiler: [GCC](http://gcc.gnu.org/), [Microsoft Visual C++](http://msdn.microsoft.com/en-us/visualc), [LLVM/clang](http://clang.llvm.org/) 0008 * [CMake](http://www.cmake.org) 2.8+ - in order to use build configuration for CMake 0009 * [Boost C++ Libraries](http://www.boost.org): DateTime, Fusion, Optional, Preprocessor, Tuple 0010 0011 and backend-specific dependencies: 0012 0013 * [DB2 Call Level Interface (CLI)](http://pic.dhe.ibm.com/infocenter/db2luw/v10r1/topic/com.ibm.swg.im.dbclient.install.doc/doc/c0023452.html) 0014 * [Firebird client library](http://www.firebirdsql.org/manual/ufb-cs-clientlib.html) 0015 * [mysqlclient](https://dev.mysql.com/doc/refman/5.6/en/c-api.html) - C API to MySQL 0016 * ODBC (Open Database Connectivity) implementation: [Microsoft ODBC](http://msdn.microsoft.com/en-us/library/windows/desktop/ms710252.aspx) [iODBC](http://www.iodbc.org/), [unixODBC](http://www.unixodbc.org/) 0017 * [Oracle Call Interface (OCI)](http://www.oracle.com/technetwork/database/features/oci/index.html) 0018 * [libpq](http://www.postgresql.org/docs/current/static/libpq.html) - C API to PostgreSQL 0019 * [SQLite 3](http://www.sqlite.org/) library 0020 0021 ## Downloads 0022 0023 Download package with latest release of the SOCI source code: 0024 [soci-X.Y.Z](https://sourceforge.net/projects/soci/), 0025 where X.Y.Z is the version number. Unpack the archive. 0026 0027 You can always clone SOCI from the Git repository: 0028 0029 ```console 0030 git clone git://github.com/SOCI/soci.git 0031 ``` 0032 0033 ## Building with CMake 0034 0035 SOCI is configured to build using [CMake](http://cmake.org/) system in version 2.8+. 0036 0037 The build configuration allows to control various aspects of compilation and 0038 installation by setting common CMake variables that change behaviour, describe 0039 system or control build (see [CMake help](http://cmake.org/cmake/help/documentation.html)) 0040 as well as SOCI-specific variables described below. 0041 All these variables are available regardless of platform or compilation toolset used. 0042 0043 Running CMake from the command line allows to set variables in the CMake cache 0044 with the following syntax: `-DVARIABLE:TYPE=VALUE`. If you are new to CMake, 0045 you may find the tutorial [Running CMake](http://cmake.org/cmake/help/runningcmake.html) helpful. 0046 0047 ### Running CMake on Unix 0048 0049 Steps outline using GNU Make `Makefile`-s: 0050 0051 ```console 0052 mkdir build 0053 cd build 0054 cmake -G "Unix Makefiles" -DWITH_BOOST=OFF -DWITH_ORACLE=OFF (...) /path/to/soci-X.Y.Z 0055 make 0056 make install 0057 ``` 0058 0059 ### Running CMake on Windows 0060 0061 Steps outline using Visual Studio 2010 and MSBuild: 0062 0063 ```console 0064 mkdir build 0065 cd build 0066 cmake -G "Visual Studio 10" -DWITH_BOOST=OFF -DWITH_ORACLE=OFF (...) C:\path\to\soci-X.Y.Z 0067 msbuild.exe SOCI.sln 0068 ``` 0069 0070 ### CMake configuration 0071 0072 By default, CMake will try to determine availability of all dependencies automatically. 0073 If you are lucky, you will not need to specify any of the CMake variables explained below. 0074 However, if CMake reports some of the core or backend-specific dependencies 0075 as missing, you will need specify relevant variables to tell CMake where to look 0076 for the required components. 0077 0078 CMake configures SOCI build performing sequence of steps. 0079 Each subsequent step is dependant on result of previous steps corresponding with particular feature. 0080 First, CMake checks system platform and compilation toolset. 0081 Next, CMake tries to find all external dependencies. 0082 Then, depending on the results of the dependency check, CMake determines SOCI backends which are possible to build. 0083 The SOCI-specific variables described below provide users with basic control of this behaviour. 0084 0085 The following sections provide summary of variables accepted by CMake scripts configuring SOCI build. 0086 The lists consist of common variables for SOCI core and all backends as well as variables specific to SOCI backends and their direct dependencies. 0087 0088 List of a few essential CMake variables: 0089 0090 * `CMAKE_BUILD_TYPE` - string - Specifies the build type for make based generators (see CMake [help](http://cmake.org/cmake/help/cmake-2-8-docs.html#variable:CMAKE_BUILD_TYPE)). 0091 * `CMAKE_INSTALL_PREFIX` - path - Install directory used by install command (see CMake [help](http://cmake.org/cmake/help/cmake-2-8-docs.html#variable:CMAKE_INSTALL_PREFIX)). 0092 * `CMAKE_VERBOSE_MAKEFILE` - boolean - If ON, create verbose makefile (see CMake [help](http://cmake.org/cmake/help/cmake-2-8-docs.html#variable:CMAKE_VERBOSE_MAKEFILE)). 0093 0094 List of variables to control common SOCI features and dependencies: 0095 0096 * `SOCI_SHARED` - boolean - Request to build shared libraries for SOCI core and all successfully configured backends. Default is `ON`. 0097 * `SOCI_STATIC` - boolean - Request to build static libraries for SOCI core and all successfully configured backends. Default is `ON`. 0098 * `SOCI_TESTS` - boolean - Request to build regression tests for SOCI core and all successfully configured backends. 0099 * `WITH_BOOST` - boolean - Should CMake try to detect [Boost C++ Libraries](http://www.boost.org/). If ON, CMake will try to find Boost headers and binaries of [Boost.Date_Time](http://www.boost.org/doc/libs/release/doc/html/date_time.html) library. 0100 0101 Some other build options: 0102 0103 * `SOCI_ASAN` - boolean - Build with address sanitizer (ASAN) support. Useful for finding problems when debugging, but shouldn't be used for the production builds due to extra overhead. Default is `OFF`. 0104 * `SOCI_LTO` - boolean - Build with link-time optimizations, if supported. This produces noticeably smaller libraries. Default is `OFF`, but turning it on is recommended for the production builds. 0105 * `SOCI_VISIBILITY` - boolean - Use hidden ELF visibility for private symbols if supported by the platform. This option produces smaller libraries by avoiding exporting internal function symbols. Default is `ON`. 0106 0107 #### Empty (sample backend) 0108 0109 * `SOCI_EMPTY` - boolean - Builds the [sample backend](backends/index.md) called Empty. Always ON by default. 0110 * `SOCI_EMPTY_TEST_CONNSTR` - string - Connection string used to run regression tests of the Empty backend. It is a dummy value. Example: `-DSOCI_EMPTY_TEST_CONNSTR="dummy connection"` 0111 0112 #### IBM DB2 0113 0114 * `WITH_DB2` - boolean - Should CMake try to detect IBM DB2 Call Level Interface (CLI) library. 0115 * `DB2_INCLUDE_DIR` - string - Path to DB2 CLI include directories where CMake should look for `sqlcli1.h` header. 0116 * `DB2_LIBRARIES` - string - Full paths to `db2` or `db2api` libraries to link SOCI against to enable the backend support. 0117 * `SOCI_DB2` - boolean - Requests to build [DB2](backends/db2.md) backend. Automatically switched on, if `WITH_DB2` is set to ON. 0118 * `SOCI_DB2_TEST_CONNSTR` - string - See [DB2 backend reference](backends/db2.md) for details. Example: `-DSOCI_DB2_TEST_CONNSTR:STRING="DSN=SAMPLE;Uid=db2inst1;Pwd=db2inst1;autocommit=off"` 0119 0120 #### Firebird 0121 0122 * `WITH_FIREBIRD` - boolean - Should CMake try to detect Firebird client library. 0123 * `FIREBIRD_INCLUDE_DIR` - string - Path to Firebird include directories where CMake should look for `ibase.h` header. 0124 * `FIREBIRD_LIBRARIES` - string - Full paths to Firebird `fbclient` or `fbclient_ms` libraries to link SOCI against to enable the backend support. 0125 * `SOCI_FIREBIRD` - boolean - Requests to build [Firebird](backends/firebird.md) backend. Automatically switched on, if `WITH_FIREBIRD` is set to ON. 0126 * `SOCI_FIREBIRD_TEST_CONNSTR` - string - See [Firebird backend reference](backends/firebird.md) for details. Example: `-DSOCI_FIREBIRD_TEST_CONNSTR:STRING="service=LOCALHOST:/tmp/soci_test.fdb user=SYSDBA password=masterkey"` 0127 0128 #### MySQL 0129 0130 * `WITH_MYSQL` - boolean - Should CMake try to detect [mysqlclient](https://dev.mysql.com/doc/refman/5.5/en/c-api.html) libraries providing MySQL C API. Note, currently the [mysql_config](https://dev.mysql.com/doc/refman/5.5/en/c-api-building-clients.html) program is not being used. 0131 * `MYSQL_DIR` - string - Path to MySQL installation root directory. CMake will scan subdirectories `MYSQL_DIR/include` and `MYSQL_DIR/lib` respectively for MySQL headers and libraries. 0132 * `MYSQL_INCLUDE_DIR` - string - Path to MySQL include directory where CMake should look for `mysql.h` header. 0133 * `MYSQL_LIBRARIES` - string - Full paths to libraries to link SOCI against to enable the backend support. 0134 * `SOCI_MYSQL` - boolean - Requests to build [MySQL](backends/mysql.md) backend. Automatically switched on, if `WITH_MYSQL` is set to ON. 0135 * `SOCI_MYSQL_TEST_CONNSTR` - string - Connection string to MySQL test database. Format of the string is explained [MySQL backend reference](backends/mysql.md). Example: `-DSOCI_MYSQL_TEST_CONNSTR:STRING="db=mydb user=mloskot password=secret"` 0136 0137 #### ODBC 0138 0139 * `WITH_ODBC` - boolean - Should CMake try to detect ODBC libraries. On Unix systems, CMake tries to find [unixODBC](http://www.unixodbc.org/) or [iODBC](http://www.iodbc.org/) implementations. 0140 * `ODBC_INCLUDE_DIR` - string - Path to ODBC implementation include directories where CMake should look for `sql.h` header. 0141 * `ODBC_LIBRARIES` - string - Full paths to libraries to link SOCI against to enable the backend support. 0142 * `SOCI_ODBC` - boolean - Requests to build [ODBC](backends/odbc.md) backend. Automatically switched on, if `WITH_ODBC` is set to ON. 0143 * `SOCI_ODBC_TEST_{database}_CONNSTR` - string - ODBC Data Source Name (DSN) or ODBC File Data Source Name (FILEDSN) to test database: Microsoft Access (.mdb), Microsoft SQL Server, MySQL, PostgreSQL or any other ODBC SQL data source. {database} is placeholder for name of database driver ACCESS, MYSQL, POSTGRESQL, etc. See [ODBC](backends/odbc.md) backend reference for details. Example: `-DSOCI_ODBC_TEST_POSTGRESQL_CONNSTR="FILEDSN=/home/mloskot/soci/build/test-postgresql.dsn"` 0144 0145 #### Oracle 0146 0147 * `WITH_ORACLE` - boolean - Should CMake try to detect [Oracle Call Interface (OCI)](http://en.wikipedia.org/wiki/Oracle_Call_Interface) libraries. 0148 * `ORACLE_INCLUDE_DIR` - string - Path to Oracle include directory where CMake should look for `oci.h` header. 0149 * `ORACLE_LIBRARIES` - string - Full paths to libraries to link SOCI against to enable the backend support. 0150 * `SOCI_ORACLE` - boolean - Requests to build [Oracle](backends/oracle.md) backend. Automatically switched on, if `WITH_ORACLE` is set to ON. 0151 * `SOCI_ORACLE_TEST_CONNSTR` - string - Connection string to Oracle test database. Format of the string is explained [Oracle backend reference](backends/oracle.md). Example: `-DSOCI_ORACLE_TEST_CONNSTR:STRING="service=orcl user=scott password=tiger"` 0152 0153 #### PostgreSQL 0154 0155 * `WITH_POSTGRESQL` - boolean - Should CMake try to detect PostgreSQL client interface libraries. SOCI relies on [libpq](http://www.postgresql.org/docs/current/static/libpq.html") C library. 0156 * `POSTGRESQL_INCLUDE_DIR` - string - Path to PostgreSQL include directory where CMake should look for `libpq-fe.h` header. 0157 * `POSTGRESQL_LIBRARY` - string - Full paths to libraries to link SOCI against to enable the backend support. The `POSTGRESQL_LIBRARIES` will be set with PostgreSQL libraries needed for linking. 0158 * `SOCI_POSTGRESQL` - boolean - Requests to build [PostgreSQL](backends/postgresql.md) backend. Automatically switched on, if `WITH_POSTGRESQL` is set to ON. 0159 * `SOCI_POSTGRESQL_TEST_CONNSTR` - string - Connection string to PostgreSQL test database. Format of the string is explained PostgreSQL backend reference. Example: `-DSOCI_POSTGRESQL_TEST_CONNSTR:STRING="dbname=mydb user=scott"` 0160 0161 #### SQLite 3 0162 0163 * `WITH_SQLITE3` - boolean - Should CMake try to detect SQLite C/C++ library. As bonus, the configuration tries OSGeo4W distribution if OSGEO4W_ROOT environment variable is set. 0164 * `SQLITE3_INCLUDE_DIR` - string - Path to SQLite 3 include directory where CMake should look for `sqlite3.h` header. 0165 * `SQLITE3_LIBRARY` - string - Full paths to libraries to link SOCI against to enable the backend support. 0166 * `SOCI_SQLITE3` - boolean - Requests to build [SQLite3](backends/sqlite3.md) backend. Automatically switched on, if `WITH_SQLITE3` is set to ON. 0167 * `SOCI_SQLITE3_TEST_CONNSTR` - string - Connection string is simply a file path where SQLite3 test database will be created (e.g. /home/john/soci_test.db). Check [SQLite3 backend reference](backends/sqlite3.md) for details. Example: `-DSOCI_SQLITE3_TEST_CONNSTR="my.db"` or `-DSOCI_SQLITE3_TEST_CONNSTR=":memory:"`. 0168 0169 ## Building with Makefiles on Unix 0170 0171 *NOTE: These (classic) Makefiles have not been maintained for long time. 0172 The officially maintained build configuration is CMake. 0173 If you still want to use these Makefiles, you've been warned that you may need to patch them.* 0174 0175 The classic set of Makefiles for Unix/Linux systems is provided for those users who need complete control over the whole processand who can benefit from the basic scaffolding that they can extend on their own. 0176 In this sense, the basic Makefiles are supposed to provide a minimal starting point for custom experimentation and are not intended to be a complete build/installation solution. 0177 At the same time, they are complete in the sense that they can compile the library with all test programs and for some users this level of support will be just fine. 0178 0179 The `core` directory of the library distribution contains the `Makefile.basic` that can be used to compile the core part of the library. 0180 Run `make -f Makefile.basic` or `make -f Makefile.basic shared` to get the static and shared versions, respectively. 0181 Similarly, the `backends/<i>name</i>` directory contains the backend part for each supported backend with the appropriate `Makefile.basic` and the `backends/<i>name</i>/test` directory contains the test program for the given backend. 0182 0183 For example, the simplest way to compile the static version of the library and the test program for PostgreSQL is: 0184 0185 ```console 0186 cd src/core 0187 make -f Makefile.basic 0188 cd ../backends/postgresql 0189 make -f Makefile.basic 0190 cd test 0191 make -f Makefile.basic 0192 ``` 0193 0194 For each backend and its test program, the `Makefile.basic`s contain the variables that can have values specific to the given environment - they usually name the include and library paths. 0195 These variables are placed at the beginning of the `Makefile.basic`s. 0196 Please review their values in case of any compilation problems. 0197 0198 The Makefiles for test programs can be a good starting point to find out correct compiler and linker options. 0199 0200 ## Building with Conan 0201 0202 SOCI is available as a [Conan](https://docs.conan.io/en/latest/) package since 0203 February 2021 for the version [4.0.1](https://conan.io/center/soci) for the 0204 following backends: sqlite3, odbc, mysql, and postgresql. 0205 0206 This section lists the steps required to use SOCI in a CMake project with Conan: 0207 0208 ### Install Conan 0209 0210 Install Conan if it is not installed yet: 0211 0212 ```console 0213 pip3 install conan 0214 ``` 0215 0216 ### Create `conanfile.txt` 0217 0218 Create a `conanfile.txt` in the same directory of the `CMakeLists.txt`, with a 0219 _reference to a recipe_ (which is a string with the library name and the 0220 version to use), the build options, and the CMake generator: 0221 0222 ```text 0223 # conanfile.txt 0224 [requires] 0225 soci/4.0.1 0226 0227 [options] 0228 soci:shared = True 0229 soci:with_sqlite3 = True 0230 0231 [generators] 0232 cmake 0233 ``` 0234 0235 The option `soci:with_sqlite3 = True` indicates that the `sqlite3` backend will 0236 be downloaded and used. 0237 0238 ### Update `CMakeLists.txt` 0239 0240 Add the following Conan-specific lines to the `CMakeLists.txt` of your project: 0241 0242 ```cmake 0243 include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) 0244 conan_basic_setup(TARGETS) 0245 conan_target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS}) 0246 ``` 0247 0248 The command `conan_target_link_libraries` replaces `target_link_libraries`. 0249 0250 ### Run Conan 0251 0252 Run `conan install` to install SOCI, and then build your project as usual: 0253 0254 ```bash 0255 mkdir build 0256 cd build 0257 conan install .. --build=soci 0258 cmake .. 0259 cmake . --build 0260 ``` 0261 0262 ## Running tests 0263 0264 The process of running regression tests highly depends on user's environment and build configuration, so it may be quite involving process. 0265 The CMake configuration provides variables to allow users willing to run the tests to configure build and specify database connection parameters (see the lists above for variable names). 0266 0267 In order to run regression tests, configure and build desired SOCI backends and prepare working database instances for them. 0268 0269 While configuring build with CMake, specify `SOCI_TESTS=ON` to enable building regression tests. 0270 Also, specify `SOCI_{backend name}_TEST_CONNSTR` variables to tell the tests runner how to connect with your test databases. 0271 0272 Dedicated `make test` target can be used to execute regression tests on build completion: 0273 0274 ```console 0275 mkdir build 0276 cd build 0277 cmake -G "Unix Makefiles" \ 0278 -DWITH_BOOST=OFF \ 0279 -DSOCI_TESTS=ON \ 0280 -DSOCI_EMPTY_TEST_CONNSTR="dummy connection" \ 0281 -DSOCI_SQLITE3_TEST_CONNSTR="test.db" \ 0282 (...) 0283 ../soci-X.Y.Z 0284 make 0285 make test 0286 make install 0287 ``` 0288 0289 In the example above, regression tests for the sample Empty backend and SQLite 3 backend are configured for execution by `make test` target. 0290 0291 ## Using library 0292 0293 CMake build produces set of shared and static libraries for SOCI core and backends separately. 0294 On Unix, for example, `build/lib` directory will consist of the static libraries named like `libsoci_core.a`, `libsoci_sqlite3.a` and shared libraries with names like `libsoci_core.so.4.0.0`, `libsoci_sqlite3.so.4.0.0`, and so on. 0295 0296 If your project also uses CMake, you can simply use `find_package(Soci)` to check for SOCI availability and `target_link_libraries()` to link with the SOCI libraries available under the names `Soci::core` and `Soci::<backend>` (or `Soci::<backend>_static` if you prefer linking statically) and ensure that SOCI headers can be included (i.e. there is no need to use `target_include_directories()` explicitly). An example of a very simple CMake-based project using SOCI is provided in the `examples/connect` directory. 0297 0298 Alternatively, you can add SOCI as a subdirectory to your project and include it via `add_subdirectory()`. As before, `target_link_libraries()` is used to link with the SOCI libraries available under the same names `Soci::core` and `Soci::<backend>` as above. An example of this can be found in the directory `examples/subdir-include`. 0299 0300 If you don't use CMake but want to use SOCI in your program, you need to specify the paths to the SOCI headers and libraries in your build configuration and to 0301 tell the linker to link against the libraries you want to use in your program.