diff --git a/.github/workflows/debian.yml b/.github/workflows/debian.yml new file mode 100644 index 00000000..8ee6f011 --- /dev/null +++ b/.github/workflows/debian.yml @@ -0,0 +1,92 @@ +name: Build for Debian + +# manually triggered workflow + +on: + workflow_dispatch: + push: + pull_request: + + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + build: + name: Debian postgis + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + postgres: [14, 15, 16, 17, 18] + postgis: [3.5, 3.6] + include: + - postgres: 18 + pqxx: '7.10' + - postgres: 17 + pqxx: '6.4' + - postgres: 16 + pqxx: '6.4' + - postgres: 15 + pqxx: '6.4' + - postgres: 14 + pqxx: '6.4' + exclude: + - postgres: 18 + postgis: 3.5 + - postgres: 17 + postgis: 3.6 + - postgres: 16 + postgis: 3.6 + - postgres: 15 + postgis: 3.6 + - postgres: 14 + postgis: 3.6 + + container: + image: postgis/postgis:${{ matrix.postgres }}-${{ matrix.postgis }} + + steps: + - uses: actions/checkout@v6 + + - name: Install dependencies + run: | + apt update + apt install -y \ + build-essential \ + cmake \ + libboost-program-options-dev \ + libpqxx-dev \ + libpqxx-${{ matrix.pqxx }} \ + libexpat1 \ + libexpat-dev \ + libosmium2-dev \ + zlib1g-dev + + - name: Configure compiler + run: | + mkdir build + cd build + cmake .. + + # Build osmium tool + cd ../tools/osmium + mkdir build + cd build + cmake .. + + - name: Build + run: | + cd build + make -j $(nproc) + make install + + # Build osmium tool + cd ../tools/osmium/build + make -j $(nproc) + make install diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index 949450f7..943406d3 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -28,6 +28,11 @@ jobs: release: [Debug, Release] os: [ubuntu-latest, ubuntu-22.04] compiler: [ gcc-latest, g++-11, clang ] + include: + - os: ubuntu-latest + pqxx: '7.8' # 7.8t64 + - os: ubuntu-22.04 + pqxx: '6.4' steps: - uses: actions/checkout@v5 @@ -66,6 +71,11 @@ jobs: postgresql-${{ matrix.psql }}-postgis-${{ matrix.postgis }}-scripts \ postgresql-${{ matrix.psql }}-pgrouting \ libpqxx-dev \ + libpqxx-${{ matrix.pqxx }} \ + libexpat1 \ + libexpat-dev \ + libosmium2-dev \ + zlib1g-dev \ postgresql-server-dev-${{ matrix.psql }} # should be 7 on latest and 6 on 22.04 apt-cache policy libpqxx-dev @@ -79,8 +89,19 @@ jobs: cd build cmake -DCMAKE_BUILD_TYPE=${{ matrix.release }} .. + # Build osmium tool + cd ../tools/osmium + mkdir build + cd build + cmake -DCMAKE_BUILD_TYPE=${{ matrix.release }} .. + - name: Build run: | cd build make -j 4 sudo make install + + # Build osmium tool + cd ../tools/osmium/build + make -j 4 + sudo make install diff --git a/CMakeLists.txt b/CMakeLists.txt index ebdb4f99..af8f560c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,7 +68,7 @@ message(STATUS "POSTGRESQL_INCLUDE_DIR: ${POSTGRESQL_INCLUDE_DIR}") message(STATUS "EXPAT_INCLUDE_DIRS: ${EXPAT_INCLUDE_DIRS}") message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}") message(STATUS "POSTGRESQL_LIBRARIES: ${POSTGRESQL_LIBRARIES}") -message(STATUS "Boost_LIBRARIES: ${boost_LIBRARIES}") +message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}") message(STATUS "PQXX_LIBRARIES: ${PQXX_LIBRARIES}") INCLUDE_DIRECTORIES(src diff --git a/cmake/FindPQXX.cmake b/cmake/FindPQXX.cmake index ea35d518..e3653040 100644 --- a/cmake/FindPQXX.cmake +++ b/cmake/FindPQXX.cmake @@ -28,7 +28,7 @@ find_library (PQXX_LIBRARIES NAMES pqxx DOC "pqxx library" ) -mark_as_advanced (PQXX_LIBRARY) +mark_as_advanced (PQXX_LIBRARIES) if (PQXX_INCLUDE_DIR) @@ -37,15 +37,15 @@ if (PQXX_INCLUDE_DIR) message(STATUS "PQXX_VERSION_FILE=${PQXX_VERSION_FILE}") file(READ "${PQXX_VERSION_FILE}" PQXX_FILE) string(REGEX MATCH "PQXX_VERSION \"([0-9]*).([0-9]*).([0-9]*)" PQXX_VERSION_LINE ${PQXX_FILE}) - string(REGEX REPLACE "PQXX_VERSION \"([0-9]*).([0-9]*).([0-9]*)" "\\1" PQXX_VERSION_MAYOR ${PQXX_VERSION_LINE}) + string(REGEX REPLACE "PQXX_VERSION \"([0-9]*).([0-9]*).([0-9]*)" "\\1" PQXX_VERSION_MAJOR ${PQXX_VERSION_LINE}) string(REGEX REPLACE "PQXX_VERSION \"([0-9]*).([0-9]*).([0-9]*)" "\\2" PQXX_VERSION_MINOR ${PQXX_VERSION_LINE}) string(REGEX REPLACE "PQXX_VERSION \"([0-9]*).([0-9]*).([0-9]*)" "\\3" PQXX_VERSION_MICRO ${PQXX_VERSION_LINE}) - set(PQXX_VERSION "${PQXX_VERSION_MAYOR}.${PQXX_VERSION_MINOR}.${PQXX_VERSION_MICRO}") + set(PQXX_VERSION "${PQXX_VERSION_MAJOR}.${PQXX_VERSION_MINOR}.${PQXX_VERSION_MICRO}") message(STATUS "PQXX_VERSION=${PQXX_VERSION}") - message(STATUS "PQXX_VERSION_MAYOR=${PQXX_VERSION_MAYOR}") + message(STATUS "PQXX_VERSION_MAJOR=${PQXX_VERSION_MAJOR}") message(STATUS "PQXX_VERSION_MINOR=${PQXX_VERSION_MINOR}") message(STATUS "PQXX_VERSION_MICRO=${PQXX_VERSION_MICRO}") - unset(PQXX_VERSION_MAYOR) + unset(PQXX_VERSION_MAJOR) unset(PQXX_VERSION_MINOR) unset(PQXX_VERSION_MICRO) unset(PQXX_FILE) diff --git a/tools/osmium/CMakeLists.txt b/tools/osmium/CMakeLists.txt index 6f7c914f..b6c8938e 100644 --- a/tools/osmium/CMakeLists.txt +++ b/tools/osmium/CMakeLists.txt @@ -1,5 +1,4 @@ -PROJECT(getrestirction) -CMAKE_MINIMUM_REQUIRED(VERSION 3.2) +cmake_minimum_required(VERSION 3.12 FATAL_ERROR) if ( ${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR} ) message(FATAL_ERROR "In-source builds not allowed. @@ -7,12 +6,16 @@ if ( ${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR} ) You may need to remove CMakeCache.txt." ) endif() +PROJECT(getrestrictions VERSION 3.0.0 + LANGUAGES C CXX) + LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") SET(SHARE_DIR "/usr/share/getrestrictions") -FIND_PACKAGE(PostgreSQL REQUIRED) -find_package(LibPQXX REQUIRED) -FIND_PACKAGE(EXPAT REQUIRED) +find_package(PostgreSQL REQUIRED) +find_package(PQXX REQUIRED) +include_directories(${PQXX_INCLUDE_DIR}) +find_package(EXPAT REQUIRED) find_package(Osmium REQUIRED COMPONENTS io pbf xml) @@ -22,46 +25,67 @@ endif() include_directories(SYSTEM ${OSMIUM_INCLUDE_DIRS}) +FILE(GLOB SRC "${CMAKE_SOURCE_DIR}/src/*.cpp" "${CMAKE_SOURCE_DIR}/src/*/*.cpp") +#--------------------------------------------- +# C++ Compiler requirements +#--------------------------------------------- +#--------------------------------------------- + +#--------------------------------------------- +# Boost +#--------------------------------------------- +#--------------------------------------------- +find_package(Boost ${BOOST_MINIMUM_VERSION} REQUIRED COMPONENTS program_options) +if (NOT Boost_VERSION_MACRO) + set(Boost_VERSION_MACRO ${Boost_VERSION}) +endif() +add_definitions(-DBoost_VERSION_MACRO=${Boost_VERSION_MACRO}) +add_definitions(-DBOOST_ALLOW_DEPRECATED_HEADERS) +include_directories(SYSTEM ${Boost_INCLUDE_DIRS}) +message(STATUS "PQXX_VERSION=${PQXX_VERSION}") +if (PQXX_VERSION VERSION_GREATER_EQUAL "7.0.0") + set(CMAKE_CXX_STANDARD 17) +else() + add_definitions(-DPQXX_DISCONNECT) + set(CMAKE_CXX_STANDARD 14) +endif() -FIND_PACKAGE(Boost) -if(Boost_INCLUDE_DIRS) - message(STATUS "Boost headers were found here: ${Boost_INCLUDE_DIRS}") -else(Boost_INCLUDE_DIRS) - message(FATAL_ERROR " Please check your Boost installation ") -endif(Boost_INCLUDE_DIRS) - -FIND_PACKAGE(Boost COMPONENTS program_options REQUIRED) - -FILE(GLOB SRC "${CMAKE_SOURCE_DIR}/src/*.cpp" "${CMAKE_SOURCE_DIR}/src/*/*.cpp") +set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FILE_OFFSET_BITS=64") +set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -g -Wconversion -pedantic -Wextra -frounding-math -Wno-deprecated") -set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FILE_OFFSET_BITS=64 -std=c++0x") -set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -g -Wconversion -pedantic -Wextra -frounding-math -Wno-deprecated -fmax-errors=10") +if(WIN32 AND MSVC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_DEPRECATE") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_SCL_SECURE_NO_DEPRECATE") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_SCL_SECURE_NO_WARNINGS") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_NONSTDC_NO_DEPRECATE") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -EHsc") +endif() +#-------------------------------------------------------- set (OSM2PGROUTING_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/include") -message(STATUS "LIBPQXX_INCLUDE_DIRS: ${LIBPQXX_INCLUDE_DIRS}") +message(STATUS "PQXX_INCLUDE_DIR: ${PQXX_INCLUDE_DIR}") message(STATUS "POSTGRESQL_INCLUDE_DIR: ${POSTGRESQL_INCLUDE_DIR}") message(STATUS "EXPAT_INCLUDE_DIRS: ${EXPAT_INCLUDE_DIRS}") message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}") message(STATUS "POSTGRESQL_LIBRARIES: ${POSTGRESQL_LIBRARIES}") -message(STATUS "Boost_LIBRARIES: ${boost_LIBRARIES}") -message(STATUS "LIBPQXX_LIBRARIES: ${LIBPQXX_LIBRARIES}") +message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}") +message(STATUS "PQXX_LIBRARIES: ${PQXX_LIBRARIES}") INCLUDE_DIRECTORIES(src - ${LIBPQXX_INCLUDE_DIRS} ${POSTGRESQL_INCLUDE_DIR} ${EXPAT_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} ${OSM2PGROUTING_INCLUDE_DIRS} ) ADD_EXECUTABLE(getrestrictions ${SRC}) TARGET_LINK_LIBRARIES(getrestrictions - ${LIBPQXX_LIBRARIES} + ${PQXX_LIBRARIES} ${POSTGRESQL_LIBRARIES} ${EXPAT_LIBRARIES} ${Boost_LIBRARIES} @@ -69,6 +93,9 @@ TARGET_LINK_LIBRARIES(getrestrictions ) INSTALL(TARGETS getrestrictions - RUNTIME DESTINATION "/usr/bin" + RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" ) +if(WIN32) + target_link_libraries(getrestrictions wsock32 ws2_32) +endif() diff --git a/tools/osmium/cmake/FindLibPQXX.cmake b/tools/osmium/cmake/FindLibPQXX.cmake deleted file mode 100644 index eec33608..00000000 --- a/tools/osmium/cmake/FindLibPQXX.cmake +++ /dev/null @@ -1,43 +0,0 @@ -# - Find libpqxx -# Find the libpqxx includes and client library -# This module defines -# PQXX_INCLUDE_DIRS -# PQXX_LIBRARIES -# PQXX_FOUND - -include (FindPackageHandleStandardArgs) - -# -# Look for an installation. -# -find_path(LIBPQXX_INCLUDE_DIR NAMES /include/pqxx/connection.hxx PATH_SUFFIXES ${SUFFIX_FOR_INCLUDE_PATH} PATHS - - # Look in other places. - ${LIBPQXX_DIR_SEARCH} - - # Help the user find it if we cannot. - DOC "The ${LIBPQXX_INCLUDE_DIR_MESSAGE}" - ) - -# Now try to get the include and library path. -if(LIBPQXX_INCLUDE_DIR) - - if(EXISTS "${LIBPQXX_INCLUDE_DIR}") - set(LIBPQXX_INCLUDE_DIRS - ${LIBPQXX_INCLUDE_DIR}/include - ) - endif() -endif() - -find_library (LIBPQXX_LIBRARIES - NAMES - pqxx - ) - -FIND_PACKAGE_HANDLE_STANDARD_ARGS("PQXX" - "libpqxx couldn't be found" - LIBPQXX_LIBRARIES - LIBPQXX_INCLUDE_DIRS - ) - -mark_as_advanced (PQXX_INCLUDE_DIR PQXX_LIBRARY) diff --git a/tools/osmium/cmake/FindOsmium.cmake b/tools/osmium/cmake/FindOsmium.cmake index 8738654d..df03bc41 100644 --- a/tools/osmium/cmake/FindOsmium.cmake +++ b/tools/osmium/cmake/FindOsmium.cmake @@ -65,7 +65,7 @@ set(_osmium_include_path ) # Look for the header file. -find_path(OSMIUM_INCLUDE_DIR osmium/osm.hpp +find_path(OSMIUM_INCLUDE_DIR osmium/version.hpp PATH_SUFFIXES include PATHS ${_osmium_include_path} ) diff --git a/tools/osmium/cmake/FindPQXX.cmake b/tools/osmium/cmake/FindPQXX.cmake new file mode 100644 index 00000000..e3653040 --- /dev/null +++ b/tools/osmium/cmake/FindPQXX.cmake @@ -0,0 +1,64 @@ +# - Find libpqxx +# Find the libpqxx includes and client library +# This module defines +# PQXX_INCLUDE_DIRS +# PQXX_LIBRARIES +# PQXX_FOUND + +include (FindPackageHandleStandardArgs) + +# +# Look for an installation. +# +find_path( + PQXX_INCLUDE_DIR + NAMES pqxx/pqxx + PATHS + ${_PQXX_DIR}/include + ${_PQXX_DIR} + ${CMAKE_INSTALL_PREFIX}/include + /usr/local/pgsql/include + /usr/local/include + /usr/include + DOC "pqxx include directories" + ) +mark_as_advanced (PQXX_INCLUDE_DIR) + +find_library (PQXX_LIBRARIES + NAMES pqxx + DOC "pqxx library" + ) +mark_as_advanced (PQXX_LIBRARIES) + + +if (PQXX_INCLUDE_DIR) + if (EXISTS "${PQXX_INCLUDE_DIR}/pqxx/version.hxx") + set (PQXX_VERSION_FILE "${PQXX_INCLUDE_DIR}/pqxx/version.hxx") + message(STATUS "PQXX_VERSION_FILE=${PQXX_VERSION_FILE}") + file(READ "${PQXX_VERSION_FILE}" PQXX_FILE) + string(REGEX MATCH "PQXX_VERSION \"([0-9]*).([0-9]*).([0-9]*)" PQXX_VERSION_LINE ${PQXX_FILE}) + string(REGEX REPLACE "PQXX_VERSION \"([0-9]*).([0-9]*).([0-9]*)" "\\1" PQXX_VERSION_MAJOR ${PQXX_VERSION_LINE}) + string(REGEX REPLACE "PQXX_VERSION \"([0-9]*).([0-9]*).([0-9]*)" "\\2" PQXX_VERSION_MINOR ${PQXX_VERSION_LINE}) + string(REGEX REPLACE "PQXX_VERSION \"([0-9]*).([0-9]*).([0-9]*)" "\\3" PQXX_VERSION_MICRO ${PQXX_VERSION_LINE}) + set(PQXX_VERSION "${PQXX_VERSION_MAJOR}.${PQXX_VERSION_MINOR}.${PQXX_VERSION_MICRO}") + message(STATUS "PQXX_VERSION=${PQXX_VERSION}") + message(STATUS "PQXX_VERSION_MAJOR=${PQXX_VERSION_MAJOR}") + message(STATUS "PQXX_VERSION_MINOR=${PQXX_VERSION_MINOR}") + message(STATUS "PQXX_VERSION_MICRO=${PQXX_VERSION_MICRO}") + unset(PQXX_VERSION_MAJOR) + unset(PQXX_VERSION_MINOR) + unset(PQXX_VERSION_MICRO) + unset(PQXX_FILE) + unset(PQXX_VERSION_LINE) + endif() +endif() + + + +FIND_PACKAGE_HANDLE_STANDARD_ARGS("PQXX" + VERSION_VAR PQXX_VERSION + REQUIRED_VARS PQXX_LIBRARIES PQXX_INCLUDE_DIR + FAIL_MESSAGE "libpqxx couldn't be found" + ) + + diff --git a/tools/osmium/src/getrestrictions.cpp b/tools/osmium/src/getrestrictions.cpp index ea9dfdf7..649bcbd1 100644 --- a/tools/osmium/src/getrestrictions.cpp +++ b/tools/osmium/src/getrestrictions.cpp @@ -43,13 +43,13 @@ -main(int argc, char *argv[]) { +int main(int argc, char *argv[]) { using index_type = osmium::index::map::SparseMemArray; using location_handler_type = osmium::handler::NodeLocationsForWays; if (argc != 2) { std::cerr << "file to process missing\n"; - exit(1); + return 1; } /* * the input file @@ -133,4 +133,5 @@ main(int argc, char *argv[]) { // relations have been cleaned up. std::cerr << "Memory:\n"; collector.used_memory(); + return 0; }