# ------------------------------------------------------------------------------
# Database Connector for PostgreSQL
# ------------------------------------------------------------------------------


# -- 1. Find PostgreSQL installation. Do nothing if not found ------------------

message(STATUS "Trying to find PostgreSQL installation")
find_package(PostgreSQL)

# -- 2. If PostgreSQL is found, specify files that will be compiled into the
#       shared library ---------------------------------------------------------

if(POSTGRESQL_FOUND)
    message(STATUS "***")
    message(STATUS "*** Adding PostgreSQL to target list...")
    message(STATUS "***")

    add_library(postgres STATIC IMPORTED)
    set_target_properties(postgres PROPERTIES
        IMPORTED_LOCATION "${POSTGRESQL_EXECUTABLE}"
    )

    set(MAD_DBAL_SOURCES_POSTGRES
        dbconnector/PGAbstractType.cpp
        dbconnector/PGAbstractType.hpp
        dbconnector/PGAllocator.cpp
        dbconnector/PGAllocator.hpp
        dbconnector/PGArrayHandle.cpp
        dbconnector/PGArrayHandle.hpp
        dbconnector/PGCommon.hpp
        dbconnector/PGCompatibility.cpp
        dbconnector/PGCompatibility.hpp
        dbconnector/PGInterface.cpp
        dbconnector/PGInterface.hpp
        dbconnector/PGMain.cpp
        dbconnector/PGNewDelete.cpp
        dbconnector/PGToDatumConverter.cpp
        dbconnector/PGToDatumConverter.hpp
        dbconnector/PGType.cpp
        dbconnector/PGType.hpp
    )
    if(LINUX)
        list(APPEND MAD_DBAL_SOURCES_POSTGRES
            linux/dbconnector/PGArmadilloGlue.cpp
        )
        include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../linux)
    endif(LINUX)
    
    # FIXME: Convert legacy source code written in C
    # BEGIN Legacy Code
    
        if(CMAKE_COMPILER_IS_GNUCC)
            # FIXME: In the C code, we have several places where strict aliasing
            # rules are violated. See this web page for some background:
            # http://dbp-consulting.com/tutorials/StrictAliasing.html
            # For now, we tell GCC that it cannot rely on strict aliasing rules.
            # Downside: We forgo some potential optimization.
            # The warning GCC would output without -fno-strict-aliasing is:
            # dereferencing type-punned pointer will break strict-aliasing rules
            set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing")
        endif(CMAKE_COMPILER_IS_GNUCC)
        file(GLOB_RECURSE LEGACY_C_FILES_POSTGRES RELATIVE
            "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}/methods/*.c")

        # errOmitLocation is used in legacy C code, but it is Greenplum only
        # we define it so that it has no effect for PostgreSQL.
        set_source_files_properties(${LEGACY_C_FILES_POSTGRES} PROPERTIES
            COMPILE_DEFINITIONS "NO_PG_MODULE_MAGIC;errOmitLocation=(int)"
        )
        list(APPEND MAD_DBAL_SOURCES_POSTGRES ${LEGACY_C_FILES_POSTGRES})
    
    # END Legacy Code

    include_directories(${CMAKE_CURRENT_SOURCE_DIR})
    include_directories(${POSTGRESQL_SERVER_INCLUDE_DIR})


# -- 3. Build MADlib connector -------------------------------------------------

    add_madlib_connector_library(postgres "${POSTGRESQL_EXECUTABLE}"
        MADLIB_POSTGRES_TARGETNAME ${MAD_DBAL_SOURCES_POSTGRES}
    )
    target_link_libraries(${MADLIB_POSTGRES_TARGETNAME} madlib)
    if(LINUX)
        # On Linux, we declare Armadillo a dependency of the connector not the
        # core library. See main CMakeLists.txt file why.
        target_link_libraries(${MADLIB_POSTGRES_TARGETNAME} armadillo)
    endif(LINUX)


# -- 4. Old versions of PostgreSQL ship with header files that need a patch to
#       be compatible with C++ -------------------------------------------------

    # Directory we will use for patches
    set(PATCH_DIR ${CMAKE_CURRENT_BINARY_DIR}/patch)
    set(_PG_VERSION "${POSTGRESQL_VERSION_MAJOR}.${POSTGRESQL_VERSION_MINOR}.${POSTGRESQL_VERSION_PATCH}")

    # Version 8.4 of PostgreSQL and below ship with server/nodes/parsenodes.h
    # and server/nodes/primnodes.h that have C++ keywords as identifiers.
    # We need to patch this.
    if(${_PG_VERSION} VERSION_LESS "9.0")
        message(STATUS "Installed PostgreSQL version has header files that need a patch for C++ compatibility. Will apply patch for versions below 9.0.")
        
        add_custom_command(
            OUTPUT
                "${PATCH_DIR}/server/nodes/parsenodes.h"
                "${PATCH_DIR}/server/nodes/primnodes.h"
                "${PATCH_DIR}/server/utils/builtins.h"
            COMMAND
                "${CMAKE_CURRENT_BINARY_DIR}/patch/Versions_8_4_and_below.sh"
            DEPENDS
                "${POSTGRESQL_SERVER_INCLUDE_DIR}/nodes/parsenodes.h"
                "${POSTGRESQL_SERVER_INCLUDE_DIR}/nodes/primnodes.h"
                "${POSTGRESQL_SERVER_INCLUDE_DIR}/utils/builtins.h"
                "${CMAKE_CURRENT_BINARY_DIR}/patch/Versions_8_4_and_below.sh"
            WORKING_DIRECTORY "${PATCH_DIR}"
            COMMENT "Patching parsenodes.h, primnodes.h, builtins.h, memnodes.h: Renaming identifiers that are C++ keywords."
        )
        list(APPEND POSTGRESQL_PATCH_FILES
            "${PATCH_DIR}/server/nodes/parsenodes.h"
            "${PATCH_DIR}/server/nodes/primnodes.h"
            "${PATCH_DIR}/server/utils/builtins.h"
        )
    endif(${_PG_VERSION} VERSION_LESS "9.0")

    if(POSTGRESQL_PATCH_FILES)
        add_subdirectory(patch)
        add_custom_target(postgresPatches ALL DEPENDS ${POSTGRESQL_PATCH_FILES})
        # Append directory with patched header file at beginning
        include_directories(BEFORE ${PATCH_DIR}/server)
        add_dependencies(madlib_postgres postgresPatches)
    endif(POSTGRESQL_PATCH_FILES)


# -- 5. Install MADlib connector -----------------------------------------------

    install(TARGETS ${MADLIB_POSTGRES_TARGETNAME}
        LIBRARY DESTINATION ports/postgres/lib
        COMPONENT postgres
    )

# -- 6. Preprocess/copy all Python/SQL files -----------------------------------
    
    add_python_files(
        PYTHON_TARGET_FILES_POSTGRES
        "modules"
        "${CMAKE_CURRENT_BINARY_DIR}/modules"
    )
    # FIXME: Check legacy code for compliance with new architecture
    # BEGIN Legacy Code
        
        file(GLOB_RECURSE LEGACY_SQL_FILES_POSTGRES RELATIVE
            "${CMAKE_SOURCE_DIR}/methods"
            "${CMAKE_SOURCE_DIR}/methods/*.py_in")
        foreach(CURRENT_FILE ${LEGACY_SQL_FILES_POSTGRES})
            get_filename_component(CURRENT_PATH "${CMAKE_SOURCE_DIR}/methods/${CURRENT_FILE}" ABSOLUTE)
            set(OUTFILE "${CMAKE_CURRENT_BINARY_DIR}/modules/${CURRENT_FILE}")
            string(REPLACE "/src/pg_gp" "" OUTFILE ${OUTFILE})
            string(REGEX REPLACE ".py_in\$" ".py" OUTFILE ${OUTFILE})
            get_dir_name(OUTDIR ${OUTFILE})
            add_custom_command(OUTPUT "${OUTFILE}"
                COMMAND ${CMAKE_COMMAND} -E make_directory "${OUTDIR}"
                COMMAND ${M4_BINARY} ${M4_ARGUMENTS} "${CURRENT_PATH}" > "${OUTFILE}"
                DEPENDS "${CURRENT_PATH}"
                COMMENT "Preprocessing ${CURRENT_FILE} with m4."
            )
            list(APPEND PYTHON_TARGET_FILES_POSTGRES ${OUTFILE})
        endforeach(CURRENT_FILE ${LEGACY_SQL_FILES_POSTGRES})
        
    # END Legacy Code
    add_custom_target(pythonFiles_Postgres ALL DEPENDS ${PYTHON_TARGET_FILES_POSTGRES})
    
    add_sql_files(
        SQL_TARGET_FILES_POSTGRES
        "modules"
        "${CMAKE_CURRENT_BINARY_DIR}/modules"
    )
    # FIXME: Check legacy code for compliance with new architecture
    # BEGIN Legacy Code
        
        file(GLOB_RECURSE LEGACY_SQL_FILES_POSTGRES RELATIVE
            "${CMAKE_SOURCE_DIR}/methods"
            "${CMAKE_SOURCE_DIR}/methods/*.sql_in")
        foreach(CURRENT_FILE ${LEGACY_SQL_FILES_POSTGRES})
            get_filename_component(CURRENT_PATH "${CMAKE_SOURCE_DIR}/methods/${CURRENT_FILE}" ABSOLUTE)
            set(OUTFILE "${CMAKE_CURRENT_BINARY_DIR}/modules/${CURRENT_FILE}")
            string(REPLACE "/src/pg_gp" "" OUTFILE ${OUTFILE})
            string(REPLACE "/sql/" "/test/" OUTFILE ${OUTFILE})
            add_custom_command(OUTPUT "${OUTFILE}"
                COMMAND ${CMAKE_COMMAND} -E copy "${CURRENT_PATH}" "${OUTFILE}"
                DEPENDS "${CURRENT_PATH}"
                COMMENT "Copying ${CURRENT_FILE}"
            )
            list(APPEND SQL_TARGET_FILES_POSTGRES ${OUTFILE})
        endforeach(CURRENT_FILE ${LEGACY_SQL_FILES_POSTGRES})
        
    # END Legacy Code
    add_custom_target(sqlFiles_Postgres ALL DEPENDS ${SQL_TARGET_FILES_POSTGRES})
    
# -- 7. Install all Python/SQL files -------------------------------------------

    install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/modules
        DESTINATION ports/postgres
        COMPONENT postgres
        REGEX "^(.*/)?\\.DS_Store\$" EXCLUDE
    )

    add_subdirectory(madpack)
else(POSTGRESQL_FOUND)
    message(STATUS "***")
    message(STATUS "*** No PostgreSQL installation found. Skipping.")
    message(STATUS "***")
endif(POSTGRESQL_FOUND)
