From 01df7af2c5fec56344ab9e0661dee206d4a9647b Mon Sep 17 00:00:00 2001 From: Gabriel Colson Date: Sun, 18 Apr 2021 14:53:43 +0200 Subject: [PATCH 1/4] feat(adapter/sfml): added build for SFML adapter --- adapter/adapter.go | 3 ++ adapter/defaultadapter/defaultadapter.go | 5 +- adapter/sfml/sfml.go | 46 +++++++++++++++++++ .../cmake}/cmake.go | 6 +-- .../cmake}/cmake_test.go | 2 +- .../publishProjects/excludeManifest/c3pm.yml | 12 ++--- 6 files changed, 60 insertions(+), 14 deletions(-) create mode 100644 adapter/sfml/sfml.go rename {adapter/defaultadapter => internal/cmake}/cmake.go (90%) rename {adapter/defaultadapter => internal/cmake}/cmake_test.go (98%) diff --git a/adapter/adapter.go b/adapter/adapter.go index d39e132..987e870 100644 --- a/adapter/adapter.go +++ b/adapter/adapter.go @@ -3,6 +3,7 @@ package adapter import ( "errors" "github.com/c3pm-labs/c3pm/adapter/defaultadapter" + "github.com/c3pm-labs/c3pm/adapter/sfml" "github.com/c3pm-labs/c3pm/config" ) @@ -19,6 +20,8 @@ func FromPC(pc *config.ProjectConfig) (Adapter, error) { switch { case adp.Name == "c3pm" && adp.Version.String() == "0.0.1": return defaultadapter.New(), nil + case adp.Name == "sfml" && adp.Version.String() == "0.0.1": + return sfml.NewAdapter(), nil default: return nil, errors.New("only default adapter is supported") } diff --git a/adapter/defaultadapter/defaultadapter.go b/adapter/defaultadapter/defaultadapter.go index 048a6fe..9b29061 100644 --- a/adapter/defaultadapter/defaultadapter.go +++ b/adapter/defaultadapter/defaultadapter.go @@ -5,6 +5,7 @@ import ( "github.com/bmatcuk/doublestar" "github.com/c3pm-labs/c3pm/config" "github.com/c3pm-labs/c3pm/config/manifest" + "github.com/c3pm-labs/c3pm/internal/cmake" "path/filepath" ) @@ -50,12 +51,12 @@ func (a *DefaultAdapter) Build(pc *config.ProjectConfig) error { return fmt.Errorf("error generating config files: %w", err) } - err = cmakeGenerateBuildFiles(cmakeDirFromPc(pc), buildDirFromPc(pc), cmakeVariables) + err = cmake.GenerateBuildFiles(cmakeDirFromPc(pc), buildDirFromPc(pc), cmakeVariables) if err != nil { return fmt.Errorf("cmake build failed: %w", err) } - err = cmakeBuild(buildDirFromPc(pc)) + err = cmake.Build(buildDirFromPc(pc)) if err != nil { return fmt.Errorf("build failed: %w", err) } diff --git a/adapter/sfml/sfml.go b/adapter/sfml/sfml.go new file mode 100644 index 0000000..7ff1904 --- /dev/null +++ b/adapter/sfml/sfml.go @@ -0,0 +1,46 @@ +package sfml + +import ( + "fmt" + "github.com/c3pm-labs/c3pm/config" + "github.com/c3pm-labs/c3pm/internal/cmake" + "path/filepath" +) + +type Adapter struct{} + +func (a *Adapter) Build(pc *config.ProjectConfig) error { + cmakeVariables := map[string]string{ + "CMAKE_LIBRARY_OUTPUT_DIRECTORY": pc.ProjectRoot, + "CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE": pc.ProjectRoot, + "CMAKE_ARCHIVE_OUTPUT_DIRECTORY": pc.ProjectRoot, + "CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE": pc.ProjectRoot, + "CMAKE_RUNTIME_OUTPUT_DIRECTORY": pc.ProjectRoot, + "CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE": pc.ProjectRoot, + "CMAKE_BUILD_TYPE": "Release", + "BUILD_SHARED_LIB": "OFF", + } + + sourceDir := pc.ProjectRoot + buildDir := filepath.Join(pc.ProjectRoot, "build") + + err := cmake.GenerateBuildFiles(sourceDir, buildDir, cmakeVariables) + if err != nil { + return fmt.Errorf("cmake build failed: %w", err) + } + + err = cmake.Build(buildDir) + if err != nil { + return fmt.Errorf("build failed: %w", err) + } + + return nil +} + +func (a *Adapter) Targets(pc *config.ProjectConfig) (targets []string, err error) { + return +} + +func NewAdapter() *Adapter { + return &Adapter{} +} diff --git a/adapter/defaultadapter/cmake.go b/internal/cmake/cmake.go similarity index 90% rename from adapter/defaultadapter/cmake.go rename to internal/cmake/cmake.go index 2b62cf1..8a69e0c 100644 --- a/adapter/defaultadapter/cmake.go +++ b/internal/cmake/cmake.go @@ -2,7 +2,7 @@ // CMake is used internally by C3PM to manage the build and installation phases of using a C3PM project. // // More information about what the CMake CLI does can be found on CMake's website: https://cmake.org/cmake/help/latest/manual/cmake.1.html -package defaultadapter +package cmake import ( "fmt" @@ -28,7 +28,7 @@ func executeCMakeCLI(args ...string) error { //C3PM uses CMake's -S option for setting the source directory, the -B option for the build directory, and the -D option for setting build variables. // //See CMake's documentation for more information: https://cmake.org/cmake/help/latest/manual/cmake.1.html#generate-a-project-buildsystem -func cmakeGenerateBuildFiles(sourceDir, buildDir string, variables map[string]string) error { +func GenerateBuildFiles(sourceDir, buildDir string, variables map[string]string) error { args := []string{ "-S", sourceDir, "-B", buildDir, @@ -42,6 +42,6 @@ func cmakeGenerateBuildFiles(sourceDir, buildDir string, variables map[string]st //cmakeBuild runs the CMake CLI to build a C3PM project // //See CMake's documentation for more information: https://cmake.org/cmake/help/latest/manual/cmake.1.html#build-a-project -func cmakeBuild(buildDir string) error { +func Build(buildDir string) error { return executeCMakeCLI("--build", buildDir, "--config", "Release") } diff --git a/adapter/defaultadapter/cmake_test.go b/internal/cmake/cmake_test.go similarity index 98% rename from adapter/defaultadapter/cmake_test.go rename to internal/cmake/cmake_test.go index a050117..063be6f 100644 --- a/adapter/defaultadapter/cmake_test.go +++ b/internal/cmake/cmake_test.go @@ -1,4 +1,4 @@ -package defaultadapter +package cmake import ( "bufio" diff --git a/test_helpers/projects/publishProjects/excludeManifest/c3pm.yml b/test_helpers/projects/publishProjects/excludeManifest/c3pm.yml index 62d2c10..1c3331a 100644 --- a/test_helpers/projects/publishProjects/excludeManifest/c3pm.yml +++ b/test_helpers/projects/publishProjects/excludeManifest/c3pm.yml @@ -5,14 +5,10 @@ description: includeAndExcludeFile for publish tests version: 1.0.0 standard: "20" license: UNLICENSED -files: - sources: - - '**/*.cpp' - includes: - - '**/*.hpp' - include_dirs: [] - exported_dir: "" - exported_include_dirs: [] +build: + adaper: + name: c3pm + version: 0.0.1 publish: exclude: - 'c3pm.yml' From 33a661f48855065d6f937675c4ea3c9d585b5480 Mon Sep 17 00:00:00 2001 From: Gabriel Colson Date: Tue, 11 May 2021 18:30:53 +0200 Subject: [PATCH 2/4] add support for adding the sfml package to a c3pm project --- adapter/defaultadapter/cmakegen.go | 15 ++++++++------- adapter/defaultadapter/defaultadapter.go | 4 ++-- adapter/defaultadapter/exec.go | 17 ++++++++++++----- adapter/irrlichtadapter/irrlichtadapter.go | 2 +- adapter/sfml/sfml.go | 10 ++++++++-- 5 files changed, 31 insertions(+), 17 deletions(-) diff --git a/adapter/defaultadapter/cmakegen.go b/adapter/defaultadapter/cmakegen.go index 8a6030e..26c9bbf 100644 --- a/adapter/defaultadapter/cmakegen.go +++ b/adapter/defaultadapter/cmakegen.go @@ -60,19 +60,20 @@ func dependenciesToCMake(pc *config.ProjectConfig, adapterGetter adapter_interfa var depsConfig = "" i := 0 for n, v := range pc.Manifest.Dependencies { - m, err := manifest.Load(filepath.Join(config.LibCachePath(n, v), "c3pm.yml")) + p, err := config.Load(config.LibCachePath(n, v)) if err != nil { return nil, "", err } + adp, err := adapterGetter.FromPC(p.Manifest.Build.Adapter) + if err != nil { + return nil, "", err + } + targets, err := adp.Targets(pc) deps[i] = dependency{ Name: n, Version: v, - Targets: m.Targets(), - IncludeDirs: m.Publish.IncludeDirs, - } - adp, err := adapterGetter.FromPC(m.Build.Adapter) - if err != nil { - return nil, "", err + Targets: targets, + IncludeDirs: p.Manifest.Publish.IncludeDirs, } dependencyConfig, err := adp.CmakeConfig(pc) if err != nil { diff --git a/adapter/defaultadapter/defaultadapter.go b/adapter/defaultadapter/defaultadapter.go index 5969683..4731512 100644 --- a/adapter/defaultadapter/defaultadapter.go +++ b/adapter/defaultadapter/defaultadapter.go @@ -88,8 +88,8 @@ func hasFileMatchingRule(rules []string, projectRoot string) (bool, error) { return false, nil } -func (a *DefaultAdapter) Targets(_ *config.ProjectConfig) ([]string, error) { - return nil, nil +func (a *DefaultAdapter) Targets(pc *config.ProjectConfig) ([]string, error) { + return []string{pc.Manifest.Name}, nil } func (a *DefaultAdapter) CmakeConfig(_ *config.ProjectConfig) (string, error) { diff --git a/adapter/defaultadapter/exec.go b/adapter/defaultadapter/exec.go index bafdd6d..3223c0e 100644 --- a/adapter/defaultadapter/exec.go +++ b/adapter/defaultadapter/exec.go @@ -32,17 +32,24 @@ target_include_directories( {{- end }} {{- end }} ) -{{range .Dependencies}} -find_library({{ .Name | ToUpper}} {{.Name}} "{{$c3pmGlobalDir}}/cache/{{.Name}}/{{.Version}}/") -{{end}} + +{{- range $dep := .Dependencies}} +{{- range $target := $dep.Targets }} +find_library({{ $dep.Name | ToUpper}}-{{$target}} {{$target}} "{{$c3pmGlobalDir}}/cache/{{$dep.Name}}/{{$dep.Version}}/") +{{- end }} +{{- end}} {{.DependenciesConfig}} target_link_libraries( {{.ProjectName}} PUBLIC - {{range .Dependencies}} - $<$>:{{"${"}}{{.Name|ToUpper}}{{"}"}}> + {{- range $dep := .Dependencies}} + {{- range $target := $dep.Targets }} + {{- $lib := $dep.Name|ToUpper}} + {{- $libname := printf "%v-%v" $lib $target }} + $<$>:{{"${"}}{{$libname}}{{"}"}}> + {{- end }} {{- end}} ) ` diff --git a/adapter/irrlichtadapter/irrlichtadapter.go b/adapter/irrlichtadapter/irrlichtadapter.go index d5d165a..08f387e 100644 --- a/adapter/irrlichtadapter/irrlichtadapter.go +++ b/adapter/irrlichtadapter/irrlichtadapter.go @@ -104,5 +104,5 @@ func (a *IrrlichtAdapter) CmakeConfig(pc *config.ProjectConfig) (string, error) } func (a *IrrlichtAdapter) Targets(_ *config.ProjectConfig) ([]string, error) { - return nil, nil + return []string{"Irrlicht"}, nil } diff --git a/adapter/sfml/sfml.go b/adapter/sfml/sfml.go index 48cc972..f2352ae 100644 --- a/adapter/sfml/sfml.go +++ b/adapter/sfml/sfml.go @@ -37,8 +37,14 @@ func (a *Adapter) Build(pc *config.ProjectConfig) error { return nil } -func (a *Adapter) Targets(_ *config.ProjectConfig) (targets []string, err error) { - return +func (a *Adapter) Targets(_ *config.ProjectConfig) ([]string, error) { + return []string{ + "sfml-system", + "sfml-window", + "sfml-graphics", + "sfml-network", + "sfml-audio", + }, nil } func (a *Adapter) CmakeConfig(_ *config.ProjectConfig) (string, error) { From 346df9d09c7579bc1b9a2008f1e831b610878f06 Mon Sep 17 00:00:00 2001 From: Gabriel Colson Date: Tue, 11 May 2021 18:38:14 +0200 Subject: [PATCH 3/4] fix tests --- internal/cmake/cmake_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/cmake/cmake_test.go b/internal/cmake/cmake_test.go index 063be6f..0cff60a 100644 --- a/internal/cmake/cmake_test.go +++ b/internal/cmake/cmake_test.go @@ -19,13 +19,13 @@ var _ = Describe("CMake interaction", func() { _ = os.RemoveAll(BUILD_DIR) }) It("does generate the build directory", func() { - err := cmakeGenerateBuildFiles("../../test_helpers/projects/cmakeProject", BUILD_DIR, map[string]string{}) + err := GenerateBuildFiles("../../test_helpers/projects/cmakeProject", BUILD_DIR, map[string]string{}) Ω(err).ShouldNot(HaveOccurred()) _, err = os.Stat(BUILD_DIR) Ω(err).ShouldNot(HaveOccurred()) }) It("uses the variables added", func() { - err := cmakeGenerateBuildFiles("../../test_helpers/projects/cmakeProject", BUILD_DIR, map[string]string{"CMAKE_AR:FILEPATH": "/bin/ls"}) + err := GenerateBuildFiles("../../test_helpers/projects/cmakeProject", BUILD_DIR, map[string]string{"CMAKE_AR:FILEPATH": "/bin/ls"}) Ω(err).ShouldNot(HaveOccurred()) _, err = os.Stat(BUILD_DIR) Ω(err).ShouldNot(HaveOccurred()) @@ -55,13 +55,13 @@ var _ = Describe("CMake interaction", func() { }) It("builds the project", func() { // Generate files - err := cmakeGenerateBuildFiles("../../test_helpers/projects/cmakeProject", BUILD_DIR, map[string]string{}) + err := GenerateBuildFiles("../../test_helpers/projects/cmakeProject", BUILD_DIR, map[string]string{}) Ω(err).ShouldNot(HaveOccurred()) _, err = os.Stat(BUILD_DIR) Ω(err).ShouldNot(HaveOccurred()) // Build the project - err = cmakeBuild(BUILD_DIR) + err = Build(BUILD_DIR) Ω(err).ShouldNot(HaveOccurred()) _, err = os.Stat(filepath.Join(BUILD_DIR, "test1")) Ω(err).ShouldNot(HaveOccurred()) From d6040fb21180b6396ff968e821f091e2c098d226 Mon Sep 17 00:00:00 2001 From: Gabriel Colson Date: Tue, 11 May 2021 19:45:34 +0200 Subject: [PATCH 4/4] fix: lint --- adapter/defaultadapter/cmakegen.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/adapter/defaultadapter/cmakegen.go b/adapter/defaultadapter/cmakegen.go index 26c9bbf..b4ed508 100644 --- a/adapter/defaultadapter/cmakegen.go +++ b/adapter/defaultadapter/cmakegen.go @@ -69,6 +69,9 @@ func dependenciesToCMake(pc *config.ProjectConfig, adapterGetter adapter_interfa return nil, "", err } targets, err := adp.Targets(pc) + if err != nil { + return nil, "", err + } deps[i] = dependency{ Name: n, Version: v,