Browse Source

Update new.lua

ruki 3 years ago
parent
commit
7a02a3687a
1 changed files with 39 additions and 2 deletions
  1. 39 2
      scripts/new.lua

+ 39 - 2
scripts/new.lua

@@ -2,7 +2,9 @@ import("core.base.option")
 import("core.base.semver")
 import("core.base.json")
 import("lib.detect.find_tool")
+import("lib.detect.find_file")
 import("net.http")
+import("utils.archive")
 
 local options = {
     {nil, "repo", "v", nil, "Set repository name.",
@@ -45,16 +47,28 @@ function _generate_package_from_github(reponame)
     file:print("")
 
     -- generate package urls and versions
+    local cmakefile
+    local autoconf
     local latest_release = repoinfo.latestRelease
     if type(latest_release) == "table" then
         local url = ("https://github.com/%s/archive/refs/tags/%s.tar.gz"):format(reponame, latest_release.tagName)
         local giturl = ("https://github.com/%s.git"):format(reponame)
         file:print('    add_urls("%s",', url)
         file:print('             "%s")', giturl)
-        local tmpfile = os.tmpfile()
+        local tmpfile = os.tmpfile({ramdisk = false})
+        local tmpdir = tmpfile .. ".dir"
         print("downloading %s", url)
         http.download(url, tmpfile)
         file:print('    add_versions("%s", "%s")', latest_release.tagName, hash.sha256(tmpfile))
+        archive.extract(tmpfile, tmpdir)
+        cmakefile = find_file("CMakeLists.txt", path.join(tmpdir, "**"))
+        if not cmakefile then
+            autoconf = find_file("configure", path.join(tmpdir, "**"))
+            if not autoconf then
+                autoconf = find_file("autogen.sh", path.join(tmpdir, "**"))
+            end
+        end
+        os.rm(tmpdir)
         os.rm(tmpfile)
     end
 
@@ -62,7 +76,30 @@ function _generate_package_from_github(reponame)
     file:print("")
     file:print("    on_install(function (package)")
     file:print("        local configs = {}")
-    file:print('        import("package.tools.xmake").install(package, configs)')
+    if cmakefile then
+        file:print('        table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))')
+        file:print('        table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))')
+        file:print('        import("package.tools.cmake").install(package, configs)')
+    elseif autoconf then
+        file:print('        table.insert(configs, "--enable-shared=" .. (package:config("shared") and "yes" or "no"))')
+        file:print('        if package:debug() then')
+        file:print('            table.insert(configs, "--enable-debug")')
+        file:print('        end')
+        file:print('        if package:is_plat("linux") and package:config("pic") ~= false then')
+        file:print('            table.insert(configs, "--with-pic")')
+        file:print('        end')
+    else
+        file:print('        io.writefile("xmake.lua", [[')
+        file:print('            add_rules("mode.release", "mode.debug")')
+        file:print('            target("%s")', packagename)
+        file:write('               set_kind("$(kind)")\n')
+        file:print('               add_files("src/*.c")')
+        file:print('        ]])')
+        file:print('        if package:config("shared") then')
+        file:print('            configs.kind = "shared"')
+        file:print('        end')
+        file:print('        import("package.tools.xmake").install(package, configs)')
+    end
     file:print("    end)")
 
     -- generate test scripts