package soft

import (
	"fmt"
	"os"
	"os/exec"
	"sunhpc/internal/log"
	"sunhpc/pkg/utils"
)

// compileFromSource 通用源码编译流程
func compileFromSource(srcDir, prefix string, jobs int) error {
	// 切换到源码目录
	if err := os.Chdir(srcDir); err != nil {
		return fmt.Errorf("进入源码目录失败: %v", err)
	}

	// 检测 configure 脚本是否存在
	if utils.FileExists("./configure") {
		log.Debug("执行 configure ...")
		cmd := exec.Command("./configure", "--prefix="+prefix)
		cmd.Stdout = os.Stdout
		cmd.Stderr = os.Stderr
		if err := cmd.Run(); err != nil {
			return fmt.Errorf("configure 失败: %v", err)
		}
	}

	// make
	log.Debugf("执行 make -j%d ...", jobs)
	cmd := exec.Command("make", fmt.Sprintf("-j%d", jobs))
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr
	if err := cmd.Run(); err != nil {
		return fmt.Errorf("make 失败: %v", err)
	}

	// make install
	log.Debug("执行 make install ...")
	cmd = exec.Command("make", "install")
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr
	if err := cmd.Run(); err != nil {
		return fmt.Errorf("make install 失败: %v", err)
	}

	return nil
}
