diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7dea2b9 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "cSpell.words": [ + "bytecode" + ] +} \ No newline at end of file diff --git a/src/ncc/Objects/ProjectConfiguration/Build.php b/src/ncc/Objects/ProjectConfiguration/Build.php index 4a6d646..b695756 100644 --- a/src/ncc/Objects/ProjectConfiguration/Build.php +++ b/src/ncc/Objects/ProjectConfiguration/Build.php @@ -1,8 +1,62 @@ Options = []; + $this->StaticLinking = false; + $this->OutputPath = 'build'; + $this->DefineConstants = []; + $this->StrictConstants = false; + $this->ExcludeFiles = []; + $this->Dependencies = []; + } + + // TODO: Add a function to validate the object data + + /** + * Returns an array representation of the object + * + * @param boolean $bytecode + * @return array + */ + public function toArray(bool $bytecode=false): array + { + $ReturnResults = []; + + $ReturnResults[($bytecode ? \ncc\Utilities\Functions::cbc('name') : 'name')] = $this->Name; + $ReturnResults[($bytecode ? \ncc\Utilities\Functions::cbc('options') : 'options')] = $this->Options; + $ReturnResults[($bytecode ? \ncc\Utilities\Functions::cbc('static_linking') : 'static_linking')] = $this->StaticLinking; + $ReturnResults[($bytecode ? \ncc\Utilities\Functions::cbc('output_path') : 'output_path')] = $this->OutputPath; + $ReturnResults[($bytecode ? \ncc\Utilities\Functions::cbc('define_constants') : 'define_constants')] = $this->DefineConstants; + $ReturnResults[($bytecode ? \ncc\Utilities\Functions::cbc('strict_constants') : 'strict_constants')] = $this->StrictConstants; + $ReturnResults[($bytecode ? \ncc\Utilities\Functions::cbc('exclude_files') : 'exclude_files')] = $this->ExcludeFiles; + $ReturnResults[($bytecode ? \ncc\Utilities\Functions::cbc('dependencies') : 'dependencies')] = []; + + foreach($this->Dependencies as $dependency) + { + $ReturnResults[($bytecode ? \ncc\Utilities\Functions::cbc('dependencies') : 'dependencies')][] = $dependency->toArray(); + } + + return $ReturnResults; + } + + /** + * Constructs the object from an array representation + * + * @param array $data + * @return BuildConfiguration + */ + public static function fromArray(array $data): BuildConfiguration + { + $BuildConfigurationObject = new BuildConfiguration(); + + if(\ncc\Utilities\Functions::array_bc($data, 'name') !== null) + { + $BuildConfigurationObject = \ncc\Utilities\Functions::array_bc($data, 'name'); + } + + if(\ncc\Utilities\Functions::array_bc($data, 'options') !== null) + { + $BuildConfigurationObject = \ncc\Utilities\Functions::array_bc($data, 'options'); + } + + if(\ncc\Utilities\Functions::array_bc($data, 'static_linking') !== null) + { + $BuildConfigurationObject = \ncc\Utilities\Functions::array_bc($data, 'static_linking'); + } + + if(\ncc\Utilities\Functions::array_bc($data, 'output_path') !== null) + { + $BuildConfigurationObject = \ncc\Utilities\Functions::array_bc($data, 'output_path'); + } + + if(\ncc\Utilities\Functions::array_bc($data, 'define_constants') !== null) + { + $BuildConfigurationObject = \ncc\Utilities\Functions::array_bc($data, 'define_constants'); + } + + if(\ncc\Utilities\Functions::array_bc($data, 'strict_constants') !== null) + { + $BuildConfigurationObject = \ncc\Utilities\Functions::array_bc($data, 'strict_constants'); + } + + if(\ncc\Utilities\Functions::array_bc($data, 'exclude_files') !== null) + { + $BuildConfigurationObject = \ncc\Utilities\Functions::array_bc($data, 'exclude_files'); + } + + if(\ncc\Utilities\Functions::array_bc($data, 'dependencies') !== null) + { + $BuildConfigurationObject = \ncc\Utilities\Functions::array_bc($data, 'dependencies'); + } + + return $BuildConfigurationObject; + } + } \ No newline at end of file diff --git a/templates/project.json b/templates/project.json index aec8b15..3658298 100644 --- a/templates/project.json +++ b/templates/project.json @@ -26,7 +26,7 @@ ], "options": {}, "scope": "user", - "define_constants": ["%ASSEMBLY.NAME%_HELLO"], + "define_constants": {"%ASSEMBLY.NAME%_HELLO": "Hello World!"}, "dependencies": [ {"name": "mbstring", "source": "extension", "version": "latest"}, {"name": "com.example.dependency", "source": "default@github/example/ncc_dependency", "version": "latest"}, @@ -38,7 +38,7 @@ "options": {}, "static_linking": true, "output_path": "build/debug", - "define_constants": ["%ASSEMBLY.NAME%_DEBUG"], + "define_constants": {"%ASSEMBLY.NAME%_DEBUG": "1"}, "strict_constants": false, "exclude_files": [], "dependencies": [ @@ -50,7 +50,7 @@ "options": {}, "static_linking": true, "output_path": "build/release", - "define_constants": [], + "define_constants": {}, "strict_constants": false, "exclude_files": [], "dependencies": []