From 88c90b39bbacd7873a0966cad992070edcf5023e Mon Sep 17 00:00:00 2001 From: JackCarterSmith Date: Mon, 18 Sep 2023 17:48:53 +0200 Subject: [PATCH 1/3] Find new transform elements --- CMakeLists.txt | 2 +- RSPModelLib/include/RSPModel_datatypes.h | 3 ++ RSPModelLib/src/hob_parser.c | 50 +++++++++++++++--------- RSPModelLib/src/hob_struct.h | 50 ++++++++++++------------ 4 files changed, 61 insertions(+), 44 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ae874a0..481953b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,7 @@ if(DEFINED ENV{CI}) # Jenkins CI integration mode project(rse-model VERSION $ENV{CI_VERSION}.$ENV{CI_BUILD_NUMBER} DESCRIPTION "RogueSquadron Extractor - Model" LANGUAGES C) set(RSE_MODEL_NAME $ENV{CI_OUTPUT_NAME}) else() # Standalone project mode, should not be used for release. - project(rse-model VERSION 2.3.0 DESCRIPTION "RogueSquadron Extractor - Model" LANGUAGES C) + project(rse-model VERSION 2.4.0 DESCRIPTION "RogueSquadron Extractor - Model" LANGUAGES C) set(RSE_MODEL_NAME RSEModel) endif() set(RSP_MODEL_LIB_NAME RSPModel${PROJECT_VERSION_MAJOR}${PROJECT_VERSION_MINOR}) diff --git a/RSPModelLib/include/RSPModel_datatypes.h b/RSPModelLib/include/RSPModel_datatypes.h index 44243c2..cb74d89 100644 --- a/RSPModelLib/include/RSPModel_datatypes.h +++ b/RSPModelLib/include/RSPModel_datatypes.h @@ -90,6 +90,9 @@ typedef struct rspmodel_obj_parts { unsigned int vertex_block_offset; unsigned int id; + T_RSPMODEL_VECTOR3 vec1r; + T_RSPMODEL_VECTOR3 vec2s; + T_RSPMODEL_VECTOR3 vec3t; T_RSPMODEL_VECTOR3 transform; unsigned int face_count; diff --git a/RSPModelLib/src/hob_parser.c b/RSPModelLib/src/hob_parser.c index cf94435..7bfbed3 100644 --- a/RSPModelLib/src/hob_parser.c +++ b/RSPModelLib/src/hob_parser.c @@ -350,17 +350,45 @@ static unsigned short ParseObjectMeshDef(T_RSPMODEL_OBJ_PARTS* pObjPartStruct, c // Get meshdef0 datas //pObjPartStruct->id = hobObjMeshDef0->object_id; // Get object part ID, used by animation? bones? - pObjPartStruct->transform.x = hobObjMeshDef0->transform_x; // Get the transform matrix, used by complex objects like at-st and at-at (at this time) + pObjPartStruct->vec1r.x = hobObjMeshDef0->vec_1_x; // used by complex objects like at-st and at-at (at this time) + pObjPartStruct->vec1r.y = hobObjMeshDef0->vec_1_y; + pObjPartStruct->vec1r.z = hobObjMeshDef0->vec_1_z; + pObjPartStruct->vec2s.x = hobObjMeshDef0->vec_2_x; // used by complex objects like at-st and at-at (at this time) + pObjPartStruct->vec2s.y = hobObjMeshDef0->vec_2_y; + pObjPartStruct->vec2s.z = hobObjMeshDef0->vec_2_z; + pObjPartStruct->vec3t.x = hobObjMeshDef0->vec_3_x; // used by complex objects like at-st and at-at (at this time) + pObjPartStruct->vec3t.y = hobObjMeshDef0->vec_3_y; + pObjPartStruct->vec3t.z = hobObjMeshDef0->vec_3_z; + pObjPartStruct->transform.x = hobObjMeshDef0->transform_x; // used by complex objects like at-st and at-at (at this time) pObjPartStruct->transform.y = hobObjMeshDef0->transform_y; pObjPartStruct->transform.z = hobObjMeshDef0->transform_z; if (pParams->verbose_mode) { - printf("[DBG] > Facegroup/object transform matrix: [%.8f %.8f %.8f]\n", + printf("[DBG] > Parent meshdef0 offset: 0x%X\n", hobObjMeshDef0->parent_meshdef0_offset); + printf("[DBG] > Children meshdef0 offset: 0x%X\n", hobObjMeshDef0->children_meshdef0_offset); + printf("[DBG] > Have rotation? vector: %d\n", hobObjMeshDef0->vecsFlags & 0x1); + printf("[DBG] > Have scaling? vector: %d\n", hobObjMeshDef0->vecsFlags & 0x2); + printf("[DBG] > Have translation? vector: %d\n", hobObjMeshDef0->vecsFlags & 0x4); + printf("[DBG] > Have offset? vector: %d\n", hobObjMeshDef0->vecsFlags & 0x8); + printf("[DBG] > Facegroup/object rotation? vector: [%.8f %.8f %.8f]\n", + pObjPartStruct->vec1r.x, + pObjPartStruct->vec1r.y, + pObjPartStruct->vec1r.z + ); + printf("[DBG] > Facegroup/object scaling? vector: [%.8f %.8f %.8f]\n", + pObjPartStruct->vec2s.x, + pObjPartStruct->vec2s.y, + pObjPartStruct->vec2s.z + ); + printf("[DBG] > Facegroup/object translation? vector: [%.8f %.8f %.8f]\n", + pObjPartStruct->vec3t.x, + pObjPartStruct->vec3t.y, + pObjPartStruct->vec3t.z + ); + printf("[DBG] > Facegroup/object offset? vector: [%.8f %.8f %.8f]\n", pObjPartStruct->transform.x, pObjPartStruct->transform.y, pObjPartStruct->transform.z ); - printf("[DBG] > Prev meshdef0 offset: 0x%X\n", hobObjMeshDef0->prev_meshdef0_offset); - printf("[DBG] > Next meshdef0 offset: 0x%X\n", hobObjMeshDef0->next_meshdef0_offset); } if (pParams->god_mode) { printf("[DBG] > meshdef0 offset1: 0x%X\n", hobObjMeshDef0->offset1); @@ -370,20 +398,6 @@ static unsigned short ParseObjectMeshDef(T_RSPMODEL_OBJ_PARTS* pObjPartStruct, c printf("[DBG] > meshdef0 unknown4: %.8f\n", hobObjMeshDef0->unknown4); printf("[DBG] > meshdef0 unknown5: %.8f\n", hobObjMeshDef0->unknown5); - printf("[DBG] > meshdef0 unknown6: 0x%X\n", hobObjMeshDef0->unknown6); - - printf("[DBG] > meshdef0 unknown7: %.8f\n", hobObjMeshDef0->unknown7); - printf("[DBG] > meshdef0 unknown8: %.8f\n", hobObjMeshDef0->unknown8); - printf("[DBG] > meshdef0 unknown9: %.8f\n", hobObjMeshDef0->unknown9); - - printf("[DBG] > meshdef0 unknown10: %.8f\n", hobObjMeshDef0->unknown10); - printf("[DBG] > meshdef0 unknown11: %.8f\n", hobObjMeshDef0->unknown11); - printf("[DBG] > meshdef0 unknown12: %.8f\n", hobObjMeshDef0->unknown12); - - printf("[DBG] > meshdef0 unknown13: %.8f\n", hobObjMeshDef0->unknown13); - printf("[DBG] > meshdef0 unknown14: %.8f\n", hobObjMeshDef0->unknown14); - printf("[DBG] > meshdef0 unknown15: %.8f\n", hobObjMeshDef0->unknown15); - printf("[DBG] > meshdef0 unknown16: %.8f\n", hobObjMeshDef0->unknown16); } diff --git a/RSPModelLib/src/hob_struct.h b/RSPModelLib/src/hob_struct.h index 8380add..fd63e4e 100644 --- a/RSPModelLib/src/hob_struct.h +++ b/RSPModelLib/src/hob_struct.h @@ -1,6 +1,6 @@ /** * @file hob_struct.h - * @date 21/02/2023 + * @date 18/09/2023 * @author JackCarterSmith * @copyright GPL-v3.0 * @brief HOB file mapping definition. @@ -69,18 +69,18 @@ typedef struct PACK hobfile_obj_header { unsigned int effects_offset; // Empty in gun_turret and no datas after, xwing have 0x5006, present in koelsch. worddevastator can have more answers... unsigned int properties_offset; // Offset to different string (a_b/zf/zt/zb/etc.) Animation datas ? Empty with 6x float in train_hob, a_b object is canon beams in gun_turret - float unknown4; // Probably scale: 1.0F/1.125F + float unknown4; // 1.0F/1.125F - Look forward angle correction? unsigned int reserved4; // 12B of zeros unsigned int reserved5; unsigned int reserved6; - float unknown5; //Scale? ~20.0F - float unknown6; //Scale? ~77-418.0F + float unknown5; // Something related to culling camera frustum (when reduced value, the gun_turret didn't render before getting out of camera view) + float unknown6; // Something related to collision detection (bigger float >100.0f) - float reserved7; //Translation matrix? Center of object? - float reserved8; - float reserved9; + float reserved7; // Something related to collision detection Translation matrix? Center of object? + float reserved8; // Something related to collision detection Translation matrix? Center of object? + float reserved9; // Something related to collision detection Translation matrix? Center of object? unsigned int footer_offset; //To redefine, seem to be a copy of following bounding box? Maybe there are 2 box: render and collision? @@ -142,48 +142,48 @@ typedef struct PACK hobfile_effects { */ typedef struct PACK hobfile_meshdef0 { - unsigned int offset1; - unsigned int offset2; - unsigned int prev_meshdef0_offset; - unsigned int next_meshdef0_offset; + unsigned int offset1; // Brothers meshdef? + unsigned int offset2; // Brothers meshdef? + unsigned int parent_meshdef0_offset; + unsigned int children_meshdef0_offset; unsigned int meshdef1_offset_plus_4; unsigned int reserved1; // 8B of zeros unsigned int reserved2; - float unknown3; + float unknown3; // Always 1.0f? unsigned int reserved3; // 12B of zeros unsigned int reserved4; unsigned int reserved5; - float unknown4; + float unknown4; // Always 1.0f? unsigned int reserved6; // 12B of zeros unsigned int reserved7; unsigned int reserved8; - float unknown5; + float unknown5; // Always 1.0f? unsigned int reserved9; // 12B of zeros unsigned int reserved10; unsigned int reserved11; - unsigned int unknown6; // Not fg_object_ID + unsigned int vecsFlags; // Enabled geo-modifiers (bit0=offset-vector #1; bit1=offset-vector #2; bit2=offset-vector #3; bit3=transform;) - float unknown7; // Can be a vector??? - float unknown8; - float unknown9; + float vec_1_x; // offset-vector #1 - Rotation? + float vec_1_y; + float vec_1_z; - float unknown10; // Can be a vector??? - float unknown11; - float unknown12; + float vec_2_x; // offset-vector #2 - Scale? + float vec_2_y; + float vec_2_z; - float unknown13; // Can be a matrix??? - float unknown14; - float unknown15; + float vec_3_x; // offset-vector #3 - Translation? + float vec_3_y; + float vec_3_z; - float unknown16; + float unknown16; // Always 1.0f? float transform_x; float transform_y; -- 2.39.5 From 1dbe9df0913eb0c155da2f95acb84c2f48075735 Mon Sep 17 00:00:00 2001 From: JackCarterSmith Date: Mon, 18 Sep 2023 19:41:22 +0200 Subject: [PATCH 2/3] Checked transform types Obj exporter include divide by 1024 (10bits rsh), keep this value in mind during parsing --- RSPModelLib/include/RSPModel_datatypes.h | 8 +-- RSPModelLib/src/hob_parser.c | 64 ++++++++++++------------ RSPModelLib/src/hob_struct.h | 28 +++++------ 3 files changed, 50 insertions(+), 50 deletions(-) diff --git a/RSPModelLib/include/RSPModel_datatypes.h b/RSPModelLib/include/RSPModel_datatypes.h index cb74d89..9cd7d30 100644 --- a/RSPModelLib/include/RSPModel_datatypes.h +++ b/RSPModelLib/include/RSPModel_datatypes.h @@ -90,10 +90,10 @@ typedef struct rspmodel_obj_parts { unsigned int vertex_block_offset; unsigned int id; - T_RSPMODEL_VECTOR3 vec1r; - T_RSPMODEL_VECTOR3 vec2s; - T_RSPMODEL_VECTOR3 vec3t; - T_RSPMODEL_VECTOR3 transform; + T_RSPMODEL_VECTOR3 offset_transform; + T_RSPMODEL_VECTOR3 scale_transform; + T_RSPMODEL_VECTOR3 rotate_transform; + T_RSPMODEL_VECTOR3 translate_transform; unsigned int face_count; T_RSPMODEL_FACE* faces; diff --git a/RSPModelLib/src/hob_parser.c b/RSPModelLib/src/hob_parser.c index 7bfbed3..ddd88e7 100644 --- a/RSPModelLib/src/hob_parser.c +++ b/RSPModelLib/src/hob_parser.c @@ -350,44 +350,44 @@ static unsigned short ParseObjectMeshDef(T_RSPMODEL_OBJ_PARTS* pObjPartStruct, c // Get meshdef0 datas //pObjPartStruct->id = hobObjMeshDef0->object_id; // Get object part ID, used by animation? bones? - pObjPartStruct->vec1r.x = hobObjMeshDef0->vec_1_x; // used by complex objects like at-st and at-at (at this time) - pObjPartStruct->vec1r.y = hobObjMeshDef0->vec_1_y; - pObjPartStruct->vec1r.z = hobObjMeshDef0->vec_1_z; - pObjPartStruct->vec2s.x = hobObjMeshDef0->vec_2_x; // used by complex objects like at-st and at-at (at this time) - pObjPartStruct->vec2s.y = hobObjMeshDef0->vec_2_y; - pObjPartStruct->vec2s.z = hobObjMeshDef0->vec_2_z; - pObjPartStruct->vec3t.x = hobObjMeshDef0->vec_3_x; // used by complex objects like at-st and at-at (at this time) - pObjPartStruct->vec3t.y = hobObjMeshDef0->vec_3_y; - pObjPartStruct->vec3t.z = hobObjMeshDef0->vec_3_z; - pObjPartStruct->transform.x = hobObjMeshDef0->transform_x; // used by complex objects like at-st and at-at (at this time) - pObjPartStruct->transform.y = hobObjMeshDef0->transform_y; - pObjPartStruct->transform.z = hobObjMeshDef0->transform_z; + pObjPartStruct->offset_transform.x = hobObjMeshDef0->offsett_x; // used by complex/animated objects like at-st, at-at, xwing, etc. + pObjPartStruct->offset_transform.y = hobObjMeshDef0->offsett_y; + pObjPartStruct->offset_transform.z = hobObjMeshDef0->offsett_z; + pObjPartStruct->scale_transform.x = hobObjMeshDef0->scalet_x; // used by complex/animated objects like at-st, at-at, xwing, etc. + pObjPartStruct->scale_transform.y = hobObjMeshDef0->scalet_y; + pObjPartStruct->scale_transform.z = hobObjMeshDef0->scalet_z; + pObjPartStruct->rotate_transform.x = hobObjMeshDef0->rott_x; // used by complex/animated objects like at-st, at-at, xwing, etc. + pObjPartStruct->rotate_transform.y = hobObjMeshDef0->rott_y; + pObjPartStruct->rotate_transform.z = hobObjMeshDef0->rott_z; + pObjPartStruct->translate_transform.x = hobObjMeshDef0->transt_x; // used by complex/animated objects like at-st, at-at, xwing, etc. + pObjPartStruct->translate_transform.y = hobObjMeshDef0->transt_y; + pObjPartStruct->translate_transform.z = hobObjMeshDef0->transt_z; if (pParams->verbose_mode) { printf("[DBG] > Parent meshdef0 offset: 0x%X\n", hobObjMeshDef0->parent_meshdef0_offset); printf("[DBG] > Children meshdef0 offset: 0x%X\n", hobObjMeshDef0->children_meshdef0_offset); - printf("[DBG] > Have rotation? vector: %d\n", hobObjMeshDef0->vecsFlags & 0x1); - printf("[DBG] > Have scaling? vector: %d\n", hobObjMeshDef0->vecsFlags & 0x2); - printf("[DBG] > Have translation? vector: %d\n", hobObjMeshDef0->vecsFlags & 0x4); - printf("[DBG] > Have offset? vector: %d\n", hobObjMeshDef0->vecsFlags & 0x8); - printf("[DBG] > Facegroup/object rotation? vector: [%.8f %.8f %.8f]\n", - pObjPartStruct->vec1r.x, - pObjPartStruct->vec1r.y, - pObjPartStruct->vec1r.z + printf("[DBG] > Have offset transform: %d\n", (hobObjMeshDef0->vecsFlags & 0x1)?1:0); + printf("[DBG] > Have scaling? vector: %d\n", (hobObjMeshDef0->vecsFlags & 0x2)?1:0); + printf("[DBG] > Have translation? vector: %d\n", (hobObjMeshDef0->vecsFlags & 0x4)?1:0); + printf("[DBG] > Have offset? vector: %d\n", (hobObjMeshDef0->vecsFlags & 0x8)?1:0); + printf("[DBG] > ObjPart offset transform: [%.8f %.8f %.8f]\n", + pObjPartStruct->offset_transform.x, + pObjPartStruct->offset_transform.y, + pObjPartStruct->offset_transform.z ); - printf("[DBG] > Facegroup/object scaling? vector: [%.8f %.8f %.8f]\n", - pObjPartStruct->vec2s.x, - pObjPartStruct->vec2s.y, - pObjPartStruct->vec2s.z + printf("[DBG] > ObjPart scale transform: [%.8f %.8f %.8f]\n", + pObjPartStruct->scale_transform.x, + pObjPartStruct->scale_transform.y, + pObjPartStruct->scale_transform.z ); - printf("[DBG] > Facegroup/object translation? vector: [%.8f %.8f %.8f]\n", - pObjPartStruct->vec3t.x, - pObjPartStruct->vec3t.y, - pObjPartStruct->vec3t.z + printf("[DBG] > ObjPart rotate transform: [%.8f %.8f %.8f]\n", + pObjPartStruct->rotate_transform.x, + pObjPartStruct->rotate_transform.y, + pObjPartStruct->rotate_transform.z ); - printf("[DBG] > Facegroup/object offset? vector: [%.8f %.8f %.8f]\n", - pObjPartStruct->transform.x, - pObjPartStruct->transform.y, - pObjPartStruct->transform.z + printf("[DBG] > ObjPart translate transform: [%.8f %.8f %.8f]\n", + pObjPartStruct->translate_transform.x, + pObjPartStruct->translate_transform.y, + pObjPartStruct->translate_transform.z ); } if (pParams->god_mode) { diff --git a/RSPModelLib/src/hob_struct.h b/RSPModelLib/src/hob_struct.h index fd63e4e..cc7064f 100644 --- a/RSPModelLib/src/hob_struct.h +++ b/RSPModelLib/src/hob_struct.h @@ -169,25 +169,25 @@ typedef struct PACK hobfile_meshdef0 { unsigned int reserved10; unsigned int reserved11; - unsigned int vecsFlags; // Enabled geo-modifiers (bit0=offset-vector #1; bit1=offset-vector #2; bit2=offset-vector #3; bit3=transform;) + unsigned int vecsFlags; // Enabled local transforms (bit0=offset #1; bit1=scale #2; bit2=rotation #3; bit3=translation;) - float vec_1_x; // offset-vector #1 - Rotation? - float vec_1_y; - float vec_1_z; + float offsett_x; // Offset transform (aka. reverse translation) + float offsett_y; + float offsett_z; - float vec_2_x; // offset-vector #2 - Scale? - float vec_2_y; - float vec_2_z; + float scalet_x; // Local transform - Scale + float scalet_y; + float scalet_z; - float vec_3_x; // offset-vector #3 - Translation? - float vec_3_y; - float vec_3_z; + float rott_x; // Local transform - Rotation + float rott_y; + float rott_z; - float unknown16; // Always 1.0f? + float unknown16; // Always 0? - float transform_x; - float transform_y; - float transform_z; + float transt_x; // Local transform - Translation + float transt_y; + float transt_z; } T_HOBFILE_MESHDEF0; typedef struct PACK hobfile_meshdef1 { -- 2.39.5 From 1dbe69cd8beac49790d2aaf45438c763d74859f8 Mon Sep 17 00:00:00 2001 From: JackCarterSmith Date: Sun, 22 Sep 2024 15:11:49 +0200 Subject: [PATCH 3/3] Final work on Conan v2 support --- Jenkinsfile | 13 ++--- conanfile.py | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++ conanfile.txt | 18 ------- 3 files changed, 136 insertions(+), 27 deletions(-) create mode 100644 conanfile.py delete mode 100644 conanfile.txt diff --git a/Jenkinsfile b/Jenkinsfile index 5908221..94c7369 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -12,7 +12,6 @@ pipeline { stage('Prepare') { steps { cleanWs() - rtConanClient(id: "conan", userHome: "/home/jackcartersmith") } } stage('Build') { @@ -22,20 +21,16 @@ pipeline { dir("linux") { checkout([$class: 'GitSCM', branches: [[name: '**']], browser: [$class: 'GiteaBrowser', repoUrl: 'https://git.jcsmith.fr/JCS-Prod/RSE-Model'], extensions: [], userRemoteConfigs: [[credentialsId: 'jenkins-ssh', url: 'ssh://git@git.jcsmith.fr:2322/JCS-Prod/RSE-Model.git']]]) sh 'git submodule update --init --recursive' - dir("build") { - rtConanRun(clientId: "conan", command: "install .. -s build_type=Release -pr:b=default -pr:h=default --build=missing") - } - cmakeBuild buildDir: 'build', cmakeArgs: '-DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake" -DCMAKE_BUILD_TYPE=Release', installation: 'latest', steps: [[args: 'all']] + sh 'conan install . -of build -s build_type=Release -o "&:tools=True" -pr:b=default -pr:h=default --build=missing' + cmakeBuild buildDir: 'build', cmakeArgs: '-DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -RSPMODEL_SHARED=ON -RSPMODEL_STATIC=OFF -DBUILD_TOOLS=ON -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_BUILD_TYPE=Release', installation: 'latest', steps: [[args: 'all']] } }, windows: { dir("windows") { checkout([$class: 'GitSCM', branches: [[name: '**']], browser: [$class: 'GiteaBrowser', repoUrl: 'https://git.jcsmith.fr/JCS-Prod/RSE-Model'], extensions: [], userRemoteConfigs: [[credentialsId: 'jenkins-ssh', url: 'ssh://git@git.jcsmith.fr:2322/JCS-Prod/RSE-Model.git']]]) sh 'git submodule update --init --recursive' - dir("build") { - rtConanRun(clientId: "conan", command: "install .. -s build_type=Release -pr:b=default -pr:h=windows --build=missing") - } - cmakeBuild buildDir: 'build', cmakeArgs: '-DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -DCMAKE_RC_COMPILER=x86_64-w64-mingw32-windres -DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake" -DCMAKE_BUILD_TYPE=Release', installation: 'latest', steps: [[args: 'all']] + sh 'conan install . -of build -s build_type=Release -o "&:tools=True" -pr:b=default -pr:h=windows --build=missing' + cmakeBuild buildDir: 'build', cmakeArgs: '-DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -RSPMODEL_SHARED=ON -RSPMODEL_STATIC=OFF -DBUILD_TOOLS=ON -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_BUILD_TYPE=Release -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -DCMAKE_RC_COMPILER=x86_64-w64-mingw32-windres', installation: 'latest', steps: [[args: 'all']] } } ) diff --git a/conanfile.py b/conanfile.py new file mode 100644 index 0000000..4be1157 --- /dev/null +++ b/conanfile.py @@ -0,0 +1,132 @@ +import os +from conan import ConanFile +from conan.tools.cmake import CMakeToolchain, CMakeDeps, CMake +from conan.tools.files import copy +from conan.tools.scm import Git, Version + +required_conan_version = ">=2.3" + +class rse_model(ConanFile): + name = "rspmodellib" + package_type = "library" + version = "2.3.1" + revision_mode = "scm" + license = "GPL-3.0" + author = "JackCarterSmith " + url = "https://git.jcsmith.fr/JCS-Prod/RSE-Model" + description = "Rogue Squadron 3D (PC) game models files (HOB) extractor" + settings = "os", "compiler", "build_type", "arch" + generators = "CMakeDeps" + options = { + "shared": [True, False], + "tools": [True, False], + "fPIC": [True, False] + } + + default_options = { + "shared": True, + "tools": False, + "fPIC": True + } + + @property + def _is_msvc(self): + return str(self.settings.compiler) in ["Visual Studio", "msvc"] + + #def validate(self): + # if self.settings.os == "Macos": + # raise ConanInvalidConfiguration("MacOS not supported") + + def config_options(self): + if self.settings.os == "Windows": + del self.options.fPIC + + def configure(self): + self.options["glew"].shared = True + #self.options["vulkan-loader"].shared = True + if self.options.shared: + self.options.rm_safe("fPIC") + + def requirements(self): + if self.options.tools: + #self.requires("opengl/system") + #self.requires("glu/system") + self.requires("glew/2.2.0") + #self.requires("vulkan-headers/1.3.236.0") + #self.requires("vulkan-memory-allocator/3.0.1") + #self.requires("vulkan-loader/1.3.236.0") + + def source(self): + git = Git(self) + cargs = ['--single-branch', '--recursive', '--depth', '1', '--branch', 'v' + self.version] + git.clone(url="https://git.jcsmith.fr/JCS-Prod/RSE-Model.git", target=".", args=cargs) + +# def _patch(self): +# replace_in_file(self, os.path.join(self.source_folder, "RSPModelLib", "CMakeLists.txt"), +# 'set_target_properties(rsp-texture-libstatic PROPERTIES OUTPUT_NAME "${RSP_TEXTURE_LIB_NAME}_static")', +# 'set_target_properties(rsp-texture-libstatic PROPERTIES OUTPUT_NAME "${RSP_TEXTURE_LIB_NAME}")') + + def export_sources(self): + copy(self, "CMakeLists.txt", self.recipe_folder, self.export_sources_folder) + +# def layout(self): +# cmake_layout(self, src_folder='.', build_folder='build') + + def generate(self): + tc = CMakeToolchain(self) + tc.cache_variables["RSPMODEL_SHARED"] = self.options.shared + tc.cache_variables["RSPMODEL_STATIC"] = not self.options.shared + tc.cache_variables["BUILD_TOOLS"] = self.options.tools + #tc.cache_variables["BUILD_DEBUG"] = self.settings.build_type == "Debug" + tc.generate() + + #cmdeps = CMakeDeps(self) + #cmpdeps.set_property("glew", "cmake_find_mode", "both") + #if self.options.shared: + #cmdeps.configuration = "ReleaseShared" + #cmdeps.generate() + + for dep in self.dependencies.values(): + if len(dep.cpp_info.bindirs) > 0: + if self.settings.os == "Windows": + if self._is_msvc: + copy(self, "*.dll", dep.cpp_info.bindirs[0], os.path.join(self.build_folder, "bin", str(self.settings.build_type))) + else: + copy(self, "*.dll", dep.cpp_info.bindirs[0], os.path.join(self.build_folder, "bin")) + else: + copy(self, "*.so", dep.cpp_info.bindirs[0], os.path.join(self.build_folder, "bin")) + + def build(self): + cmbuilder = CMake(self) + #self._patch() + cmbuilder.configure() + cmbuilder.build() + + def package(self): + copy(self, "LICENSE", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses")) + copy(self, pattern="*.h", src=os.path.join(self.source_folder, "include"), dst=os.path.join(self.package_folder, "include")) + copy(self, pattern="*.a", src=self.build_folder, dst=os.path.join(self.package_folder, "lib"), keep_path=False) + copy(self, pattern="*.so", src=self.build_folder, dst=os.path.join(self.package_folder, "lib"), keep_path=False) + copy(self, pattern="*.lib", src=self.build_folder, dst=os.path.join(self.package_folder, "lib"), keep_path=False) + copy(self, pattern="*.dll", src=self.build_folder, dst=os.path.join(self.package_folder, "bin"), keep_path=False) + + def package_info(self): + self.cpp_info.set_property("cmake_file_name", "RSEModel") + self.cpp_info.set_property("cmake_target_name", "RSEModel") + self.cpp_info.set_property("cmake_module_target_name", "RSEModel::RSEModel") + self.cpp_info.set_property("cmake_find_mode", "both") + + self.cpp_info.names["cmake_find_package"] = "RSEModel" + self.cpp_info.names["cmake_find_package_multi"] = "RSEModel" + + self.cpp_info.includedirs = ["include"] + + prefix = "lib" if self._is_msvc else "" + #suffix = "d" if self.settings.build_type == "Debug" else "" + suffix = "" + major_min_version = f"{Version(self.version).major}{Version(self.version).minor}" + + self.cpp_info.libs = ["{}RSEModel{}{}".format(prefix, major_min_version, suffix)] + if self.settings.os in ["Linux", "Android", "FreeBSD", "SunOS", "AIX"]: + self.cpp_info.system_libs.append("m") + self.cpp_info.system_libs.append("dl") diff --git a/conanfile.txt b/conanfile.txt deleted file mode 100644 index a490eb4..0000000 --- a/conanfile.txt +++ /dev/null @@ -1,18 +0,0 @@ -[requires] -#opengl/system -#glu/system -glew/2.2.0 -#vulkan-headers/1.3.236.0 -#vulkan-memory-allocator/3.0.1 -#vulkan-loader/1.3.236.0 - -[generators] -CMakeDeps -CMakeToolchain - -[options] -glew/*:shared=True -#vulkan-loader/*:shared=True - -[imports] -bin, *.dll -> ./bin \ No newline at end of file -- 2.39.5