diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..8b9e595 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,26 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${workspaceFolder}/**", + "${workspaceFolder}/src", + "${workspaceFolder}/vendor/lua/include", + "${workspaceFolder}/vendor/libpq/include" + ], + "defines": [ + "_DEBUG", + "UNICODE", + "_UNICODE", + "WINDOWS", + "WIN32" + ], + "windowsSdkVersion": "10.0.18362.0", + "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe", + "cStandard": "c17", + "cppStandard": "c++17", + "intelliSenseMode": "msvc-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..503d5d4 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "Lua.diagnostics.globals": [ + "workspace", + "configurations", + "location" + ] +} \ No newline at end of file diff --git a/BUILD.md b/BUILD.md new file mode 100644 index 0000000..0f2a752 --- /dev/null +++ b/BUILD.md @@ -0,0 +1,45 @@ +# Postgre.SQL module for MTA-SA +## Build instructions + +### Linux +Note: This guide will use Arch Linux as an example. For Red Hat/RHEL based systems, check our Dockerfile. + + +Install premake5, build tools and pgsql libs +``` +sudo pacman -S base-devel premake postgresql-libs +``` + +Compile +``` +premake5 gmake2 +cd build +make +``` + +### Windows +Note: This guide assumes you have scoop installed. If you do not, then install it [here](https://scoop.sh). + +Install premake5 and GNU make +``` +scoop install premake make +``` + +Install tdm-gcc, or VS 2019 +``` +TDM-GCC: https://github.com/jmeubank/tdm-gcc/releases/download/v9.2.0-tdm64-1/tdm64-gcc-9.2.0.exe +VS 2019: Microsoft's website. +``` + +Compile +``` +# for gcc/mingw +premake5 gmake2 +cd build +make + +# for vs2019 +premake5 vs2019 +cd build +explorer . +``` \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..69a3dce --- /dev/null +++ b/Dockerfile @@ -0,0 +1,51 @@ +FROM centos:centos7 + +ENV PREMAKE_VERSION="5.0.0-alpha15" + +## +# Update system +## +RUN \ + yum update -y && \ + yum upgrade -y + +## +# Install packages +## +RUN \ + yum install -y \ + gcc \ + gcc-c++ \ + make \ + kernel-devel \ + postgresql-libs \ + postgresql-dev \ + wget \ + curl \ + tar + +## +# Add premake5 to /usr/local/bin +## +RUN \ + mkdir premake5 && \ + cd premake5 && \ + wget https://github.com/premake/premake-core/releases/download/v${PREMAKE_VERSION}/premake-${PREMAKE_VERSION}-linux.tar.gz && \ + tar -zxvf premake-${PREMAKE_VERSION}-linux.tar.gz && \ + cp premake5 /usr/local/bin && \ + cd .. && \ + rm -rf premake5 + +## +# Configure workdir +## +WORKDIR /app +COPY . /app + +## +# Start building... +## +RUN \ + premake5 gmake2 && \ + cd build && \ + make \ No newline at end of file diff --git a/README.md b/README.md index 0e325d6..e53df4f 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,9 @@ I accept any support regarding the module development. Feel free to make PRs and # Installation Information about **Installation** provided on the **[Releases](https://github.com/Disinterpreter/ml_pgsql/releases)** page. +# Build from source +Check our [builds](BUILD.md) file. + # Functions ## pg_conn function ### Syntax diff --git a/linux-build.sh b/linux-build.sh deleted file mode 100644 index 4afde2b..0000000 --- a/linux-build.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -MODE=$1 -PLATFORM=$2 - -if [ -z $MODE ]; then - MODE="debug" -fi; - -if [ -z $PLATFORM ]; then - PLATFORM="64" -fi; - -# clean up prev. builds -rm -rf {Bin,Build} - -utils/premake5 gmake2 - -cd Build - -make config="${MODE}_x${PLATFORM}" all diff --git a/ml_pgsql/premake5.lua b/ml_pgsql/premake5.lua deleted file mode 100644 index 056de7f..0000000 --- a/ml_pgsql/premake5.lua +++ /dev/null @@ -1,32 +0,0 @@ -project "ml_pgsql" - language "C++" - cppdialect "C++17" - kind "SharedLib" - targetname "ml_pgsql" - - includedirs { "include", ".", "../vendor" } - libdirs { "../libs" } - - vpaths { - ["Headers/*"] = "include/**.h", - ["Sources/*"] = "src/**.cpp", - ["*"] = "premake5.lua" - } - - files { - "premake5.lua", - "**.cpp", - "**.h" - } - - filter { "system:windows", "platforms:x86" } - links { "x86\\lua5.1.lib", "x86\\libpq.lib" } - - filter { "system:windows", "platforms:x64" } - links { "x64\\lua5.1.lib", "x64\\libpq.lib" } - - filter "system:linux" - links { "pq" } - - filter "system:not linux" - excludes { "include/lua/luaimports.h", "src/lua/luaimports.cpp" } diff --git a/premake5.lua b/premake5.lua index 7ca0438..de63555 100644 --- a/premake5.lua +++ b/premake5.lua @@ -1,21 +1,44 @@ -solution "ml_pgsql" +workspace "ml_pgsql" configurations { "Debug", "Release" } - location ( "Build" ) - targetdir "Bin/%{cfg.platform}/%{cfg.buildcfg}" - platforms { "x86", "x64" } - - targetprefix "" - - pic "On" - symbols "On" - - filter "system:windows" + location "build" + +project "ml_pgsql" + kind "SharedLib" + language "C++" + + cppdialect "C++17" + files { "src/**.cpp", "src/**.hpp" } + + includedirs { + "src/", + "vendor/lua/include", + "vendor/lua/include/lua", + "vendor/libpq/include" + } + + filter { "architecture:x86", "system:windows" } defines { "WINDOWS", "WIN32" } + libdirs { "vendor/lua/lib/x86", "vendor/libpq/lib/x86" } + links { "lua5.1", "libpq" } + + filter { "architecture:x64", "system:windows" } + defines { "WINDOWS", "WIN32" } + libdirs { "vendor/lua/lib/x64", "vendor/libpq/lib/x64" } + links { "lua5.1", "libpq" } + + filter { "architecture:x86", "system:linux" } + defines { "LINUX" } + links { "pq" } + + filter { "architecture:x64", "system:linux" } + defines { "LINUX" } + links { "pq" } + + filter { "configurations:Debug" } + defines { "DEBUG" } + symbols "On" - filter "configurations:Debug" - defines { "DEBUG" } + filter { "configurations:Release" } + defines { "NDEBUG" } + optimize "On" - filter "configurations:Release" - optimize "On" - - include "ml_pgsql" diff --git a/ml_pgsql/src/CFunctions.cpp b/src/CFunctions.cpp similarity index 97% rename from ml_pgsql/src/CFunctions.cpp rename to src/CFunctions.cpp index ccf6630..4b0ba9d 100644 --- a/ml_pgsql/src/CFunctions.cpp +++ b/src/CFunctions.cpp @@ -15,9 +15,9 @@ * PROVIDED WITH THIS PACKAGE. * *********************************************************/ -#include "ml_pgsql.h" -#include "CFunctions.h" -#include "CPostgresManager.h" +#include "ml_pgsql.hpp" +#include "CFunctions.hpp" +#include "CPostgresManager.hpp" int CFunctions::pg_conn(lua_State* luaVM) { diff --git a/ml_pgsql/include/CFunctions.h b/src/CFunctions.hpp similarity index 100% rename from ml_pgsql/include/CFunctions.h rename to src/CFunctions.hpp diff --git a/ml_pgsql/src/CPostgresConnection.cpp b/src/CPostgresConnection.cpp similarity index 98% rename from ml_pgsql/src/CPostgresConnection.cpp rename to src/CPostgresConnection.cpp index 02e5966..dbea482 100644 --- a/ml_pgsql/src/CPostgresConnection.cpp +++ b/src/CPostgresConnection.cpp @@ -16,7 +16,7 @@ * *********************************************************/ -#include "CPostgresConnection.h" +#include "CPostgresConnection.hpp" CPostgresConnection::CPostgresConnection(lua_State* pLuaVM, const char* szConnectionInfo) : m_pLuaVM{pLuaVM} { diff --git a/ml_pgsql/include/CPostgresConnection.h b/src/CPostgresConnection.hpp similarity index 97% rename from ml_pgsql/include/CPostgresConnection.h rename to src/CPostgresConnection.hpp index ec03447..f161636 100644 --- a/ml_pgsql/include/CPostgresConnection.h +++ b/src/CPostgresConnection.hpp @@ -18,7 +18,7 @@ #pragma once -#include "ml_pgsql.h" +#include "ml_pgsql.hpp" class CPostgresConnection { diff --git a/ml_pgsql/src/CPostgresManager.cpp b/src/CPostgresManager.cpp similarity index 98% rename from ml_pgsql/src/CPostgresManager.cpp rename to src/CPostgresManager.cpp index ee20e62..4fc0f08 100644 --- a/ml_pgsql/src/CPostgresManager.cpp +++ b/src/CPostgresManager.cpp @@ -15,7 +15,7 @@ * PROVIDED WITH THIS PACKAGE. * *********************************************************/ -#include "CPostgresManager.h" +#include "CPostgresManager.hpp" CPostgresManager::CPostgresManager() diff --git a/ml_pgsql/include/CPostgresManager.h b/src/CPostgresManager.hpp similarity index 94% rename from ml_pgsql/include/CPostgresManager.h rename to src/CPostgresManager.hpp index 59ff116..73bb419 100644 --- a/ml_pgsql/include/CPostgresManager.h +++ b/src/CPostgresManager.hpp @@ -18,8 +18,8 @@ #pragma once -#include "ml_pgsql.h" -#include "CPostgresConnection.h" +#include "ml_pgsql.hpp" +#include "CPostgresConnection.hpp" #include diff --git a/ml_pgsql/include/Common.h b/src/Common.hpp similarity index 87% rename from ml_pgsql/include/Common.h rename to src/Common.hpp index 5c407a8..2800495 100644 --- a/ml_pgsql/include/Common.h +++ b/src/Common.hpp @@ -4,9 +4,9 @@ * * ml_base, External lua add-on module * -* Copyright © 2003-2008 MTA. All Rights Reserved. +* Copyright � 2003-2008 MTA. All Rights Reserved. * -* Grand Theft Auto is © 2002-2003 Rockstar North +* Grand Theft Auto is � 2002-2003 Rockstar North * * THE FOLLOWING SOURCES ARE PART OF THE MULTI THEFT * AUTO SOFTWARE DEVELOPMENT KIT AND ARE RELEASED AS @@ -16,12 +16,7 @@ * *********************************************************/ -extern "C" -{ - #include "lua/lua.h" - #include "lua/lualib.h" - #include "lua/lauxlib.h" -} +#include #ifdef WIN32 #define MTAEXPORT extern "C" __declspec(dllexport) diff --git a/ml_pgsql/include/ILuaModuleManager.h b/src/ILuaModuleManager.hpp similarity index 100% rename from ml_pgsql/include/ILuaModuleManager.h rename to src/ILuaModuleManager.hpp diff --git a/ml_pgsql/src/ml_pgsql.cpp b/src/ml_pgsql.cpp similarity index 96% rename from ml_pgsql/src/ml_pgsql.cpp rename to src/ml_pgsql.cpp index 148abb6..c456748 100644 --- a/ml_pgsql/src/ml_pgsql.cpp +++ b/src/ml_pgsql.cpp @@ -15,9 +15,9 @@ * PROVIDED WITH THIS PACKAGE. * *********************************************************/ -#include "ml_pgsql.h" -#include "CFunctions.h" -#include "CPostgresManager.h" +#include "ml_pgsql.hpp" +#include "CFunctions.hpp" +#include "CPostgresManager.hpp" std::unique_ptr g_pLuaModuleManager; std::unique_ptr g_pPostgresManager; diff --git a/ml_pgsql/include/ml_pgsql.h b/src/ml_pgsql.hpp similarity index 93% rename from ml_pgsql/include/ml_pgsql.h rename to src/ml_pgsql.hpp index 3eb3d91..02cb7f1 100644 --- a/ml_pgsql/include/ml_pgsql.h +++ b/src/ml_pgsql.hpp @@ -27,9 +27,9 @@ #define MODULE_VERSION 0.6f /* MTA-SA Module SDK */ -#include "Common.h" -#include "ILuaModuleManager.h" -#include "lua/lua.h" +#include "Common.hpp" +#include "ILuaModuleManager.hpp" +#include /* Function-related defines for easier working with API */ #define LUA_FUNCTION_DECLARE(function) static int function(lua_State* luaVM) @@ -38,7 +38,7 @@ #define SAFE_DELETE(ptr) { delete ptr; ptr = nullptr; } /* LUA imports */ -#include "lua/luaimports.h" +#include /* Standard Library useful includes */ #include // smart pointers diff --git a/utils/premake5 b/utils/premake5 deleted file mode 100644 index 3ab5536..0000000 Binary files a/utils/premake5 and /dev/null differ diff --git a/utils/premake5.exe b/utils/premake5.exe deleted file mode 100644 index 3ea09b7..0000000 Binary files a/utils/premake5.exe and /dev/null differ diff --git a/vendor/libpq/internal/c.h b/vendor/libpq/include/libpq/internal/c.h similarity index 100% rename from vendor/libpq/internal/c.h rename to vendor/libpq/include/libpq/internal/c.h diff --git a/vendor/libpq/internal/libpq-int.h b/vendor/libpq/include/libpq/internal/libpq-int.h similarity index 100% rename from vendor/libpq/internal/libpq-int.h rename to vendor/libpq/include/libpq/internal/libpq-int.h diff --git a/vendor/libpq/internal/libpq/pqcomm.h b/vendor/libpq/include/libpq/internal/libpq/pqcomm.h similarity index 100% rename from vendor/libpq/internal/libpq/pqcomm.h rename to vendor/libpq/include/libpq/internal/libpq/pqcomm.h diff --git a/vendor/libpq/internal/port.h b/vendor/libpq/include/libpq/internal/port.h similarity index 100% rename from vendor/libpq/internal/port.h rename to vendor/libpq/include/libpq/internal/port.h diff --git a/vendor/libpq/internal/postgres_fe.h b/vendor/libpq/include/libpq/internal/postgres_fe.h similarity index 100% rename from vendor/libpq/internal/postgres_fe.h rename to vendor/libpq/include/libpq/internal/postgres_fe.h diff --git a/vendor/libpq/internal/pqexpbuffer.h b/vendor/libpq/include/libpq/internal/pqexpbuffer.h similarity index 100% rename from vendor/libpq/internal/pqexpbuffer.h rename to vendor/libpq/include/libpq/internal/pqexpbuffer.h diff --git a/vendor/libpq/libpq-events.h b/vendor/libpq/include/libpq/libpq-events.h similarity index 100% rename from vendor/libpq/libpq-events.h rename to vendor/libpq/include/libpq/libpq-events.h diff --git a/vendor/libpq/libpq-fe.h b/vendor/libpq/include/libpq/libpq-fe.h similarity index 100% rename from vendor/libpq/libpq-fe.h rename to vendor/libpq/include/libpq/libpq-fe.h diff --git a/vendor/libpq/pg_config.h b/vendor/libpq/include/libpq/pg_config.h similarity index 100% rename from vendor/libpq/pg_config.h rename to vendor/libpq/include/libpq/pg_config.h diff --git a/vendor/libpq/pg_config_ext.h b/vendor/libpq/include/libpq/pg_config_ext.h similarity index 100% rename from vendor/libpq/pg_config_ext.h rename to vendor/libpq/include/libpq/pg_config_ext.h diff --git a/vendor/libpq/pg_config_manual.h b/vendor/libpq/include/libpq/pg_config_manual.h similarity index 100% rename from vendor/libpq/pg_config_manual.h rename to vendor/libpq/include/libpq/pg_config_manual.h diff --git a/vendor/libpq/pg_config_os.h b/vendor/libpq/include/libpq/pg_config_os.h similarity index 100% rename from vendor/libpq/pg_config_os.h rename to vendor/libpq/include/libpq/pg_config_os.h diff --git a/vendor/libpq/postgres_ext.h b/vendor/libpq/include/libpq/postgres_ext.h similarity index 100% rename from vendor/libpq/postgres_ext.h rename to vendor/libpq/include/libpq/postgres_ext.h diff --git a/libs/x64/libpq.lib b/vendor/libpq/lib/x64/libpq.lib similarity index 100% rename from libs/x64/libpq.lib rename to vendor/libpq/lib/x64/libpq.lib diff --git a/libs/x86/libpq.lib b/vendor/libpq/lib/x86/libpq.lib similarity index 100% rename from libs/x86/libpq.lib rename to vendor/libpq/lib/x86/libpq.lib diff --git a/ml_pgsql/include/lua/lauxlib.h b/vendor/lua/include/lua/lauxlib.h similarity index 100% rename from ml_pgsql/include/lua/lauxlib.h rename to vendor/lua/include/lua/lauxlib.h diff --git a/ml_pgsql/include/lua/lua.h b/vendor/lua/include/lua/lua.h similarity index 100% rename from ml_pgsql/include/lua/lua.h rename to vendor/lua/include/lua/lua.h diff --git a/ml_pgsql/include/lua/lua.hpp b/vendor/lua/include/lua/lua.hpp similarity index 100% rename from ml_pgsql/include/lua/lua.hpp rename to vendor/lua/include/lua/lua.hpp diff --git a/ml_pgsql/include/lua/luaconf.h b/vendor/lua/include/lua/luaconf.h similarity index 100% rename from ml_pgsql/include/lua/luaconf.h rename to vendor/lua/include/lua/luaconf.h diff --git a/ml_pgsql/src/lua/luaimports.cpp b/vendor/lua/include/lua/luaimports.cpp similarity index 100% rename from ml_pgsql/src/lua/luaimports.cpp rename to vendor/lua/include/lua/luaimports.cpp diff --git a/ml_pgsql/include/lua/luaimports.h b/vendor/lua/include/lua/luaimports.h similarity index 100% rename from ml_pgsql/include/lua/luaimports.h rename to vendor/lua/include/lua/luaimports.h diff --git a/ml_pgsql/include/lua/lualib.h b/vendor/lua/include/lua/lualib.h similarity index 100% rename from ml_pgsql/include/lua/lualib.h rename to vendor/lua/include/lua/lualib.h diff --git a/libs/x64/lua5.1.lib b/vendor/lua/lib/x64/lua5.1.lib similarity index 100% rename from libs/x64/lua5.1.lib rename to vendor/lua/lib/x64/lua5.1.lib diff --git a/libs/x86/lua5.1.lib b/vendor/lua/lib/x86/lua5.1.lib similarity index 100% rename from libs/x86/lua5.1.lib rename to vendor/lua/lib/x86/lua5.1.lib diff --git a/win-create-project.bat b/win-create-project.bat deleted file mode 100644 index 4ae223f..0000000 --- a/win-create-project.bat +++ /dev/null @@ -1,18 +0,0 @@ -@echo off - -rem Generate solutions -utils\premake5.exe vs2019 - -rem Create a shortcut to the solution - http://superuser.com/questions/392061/how-to-make-a-shortcut-from-cmd -set SCRIPTFILE="%TEMP%\CreateMyShortcut.vbs" -( - echo Set oWS = WScript.CreateObject^("WScript.Shell"^) - echo sLinkFile = oWS.ExpandEnvironmentStrings^("ml_pgsql.sln - Shortcut.lnk"^) - echo Set oLink = oWS.CreateShortcut^(sLinkFile^) - echo oLink.TargetPath = oWS.ExpandEnvironmentStrings^("%~dp0\Build\ml_pgsql.sln"^) - echo oLink.Save -) 1>%SCRIPTFILE% -cscript //nologo %SCRIPTFILE% -del /f /q %SCRIPTFILE% - -if %0 == "%~0" pause