diff --git a/example/flint.toml b/example/flint.toml new file mode 100644 index 0000000..d36e943 --- /dev/null +++ b/example/flint.toml @@ -0,0 +1,13 @@ +[package] + name = "example-package" + version = "0.1.0" + authors = ["author1", "author2"] + description = "A example library for Flint programming language." + license = "MIT" + repository = "https://github.com/example/example-repo" + +[build] + type = "native" + language = "c" + entry = "example.c" + output = "example" diff --git a/go.mod b/go.mod index 25aea28..5349b7c 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module flint go 1.25.4 require ( + github.com/BurntSushi/toml v1.5.0 // indirect github.com/llir/llvm v0.3.6 // indirect github.com/mewmew/float v0.0.0-20201204173432-505706aa38fa // indirect github.com/pkg/errors v0.9.1 // indirect diff --git a/go.sum b/go.sum index 9ed4944..1003746 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= +github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= diff --git a/internal/toml/buildconfig.go b/internal/toml/buildconfig.go new file mode 100644 index 0000000..904d007 --- /dev/null +++ b/internal/toml/buildconfig.go @@ -0,0 +1,17 @@ +package toml + +type buildConfig struct { + Type string `toml:"type"` + Language string `toml:"language"` + Entry string `toml:"entry"` + Output string `toml:"output"` +} + +func newExampleBuildConfig() buildConfig { + return buildConfig{ + Type: "native", + Language: "c", + Entry: "example.c", + Output: "example", + } +} diff --git a/internal/toml/config.go b/internal/toml/config.go new file mode 100644 index 0000000..474b045 --- /dev/null +++ b/internal/toml/config.go @@ -0,0 +1,65 @@ +package toml + +import ( + "fmt" + "os" + + "github.com/BurntSushi/toml" +) + +type ( + ProjectConfig struct { + PackageConfig packageConfig `toml:"package"` + BuildConfig buildConfig `toml:"build"` + } +) + +var configFile = "flint.toml" + +func newExampleProjectConfig() ProjectConfig { + return ProjectConfig{ + PackageConfig: newExamplePackageConfig(), + BuildConfig: newExampleBuildConfig(), + } +} + +func newExampleProjectConfigAt(path string) { + saveProjectConfigAt(newExampleProjectConfig(), path) +} + +func loadProjectConfig() (ProjectConfig, error) { + return loadProjectConfigAt("") +} + +func loadProjectConfigAt(path string) (ProjectConfig, error){ + var config ProjectConfig + _, err := toml.DecodeFile(path + "/" + configFile, &config) + return config, err +} + +func saveProjectConfig(config ProjectConfig) { + saveProjectConfigAt(config, "") +} + +func saveProjectConfigAt(config ProjectConfig, path string) error { + os.MkdirAll(path, os.ModePerm) + + file, fileErr := os.Create(path + "/" + configFile) + + if fileErr != nil { + return fileErr + } + + err := toml.NewEncoder(file).Encode(config) + + if err != nil { + return err + } + return nil +} + +func printProjectConfig(config ProjectConfig) { + fmt.Printf("%+v", config) +} + + diff --git a/internal/toml/packageconfig.go b/internal/toml/packageconfig.go new file mode 100644 index 0000000..860854c --- /dev/null +++ b/internal/toml/packageconfig.go @@ -0,0 +1,21 @@ +package toml + +type packageConfig struct { + Name string `toml:"name"` + Version string `toml:"version"` + Authors []string `toml:"authors"` + Description string `toml:"description"` + License string `toml:"license"` + Repository string `toml:"repository"` +} + +func newExamplePackageConfig() packageConfig { + return packageConfig{ + Name: "example-package", + Version: "0.1.0", + Authors: []string{"author1", "author2"}, + Description: "A example library for Flint programming language.", + License: "MIT", + Repository: "https://github.com/example/example-repo", + } +} diff --git a/scripts/build.sh b/scripts/build.sh old mode 100644 new mode 100755