⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 package.module

📁 Gambas is a graphical development environment based on a Basic interpreter, like Visual Basic. It us
💻 MODULE
字号:
' Gambas module filePUBLIC Name AS StringPUBLIC Address AS StringPUBLIC Path AS StringPUBLIC Change AS StringPRIVATE SUB AddLog(sText AS String)  FMakeInstall.AddLog(sText)ENDPUBLIC FUNCTION Make() AS Boolean  DIM sSys AS String  DIM sMacro AS String  FormatChange  ' Save old rpm macro file  sMacro = System.Home &/ ".rpmmacros"  TRY RENAME sMacro AS sMacro & ".save"  TRY KILL sMacro  FOR EACH sSys IN Project.Systems    IF MakePackage(sSys) THEN RETURN TRUE  NEXT  ' Restore old rpm macro file  TRY KILL sMacro  TRY RENAME sMacro & ".save" AS sMacro  AddLog(("Saving CHANGELOG file."))  File.Save(Project.Dir &/ "CHANGELOG", Change)  AddLog(("The packages have been successfully created."))  Message(("The packages have been successfully created."))ENDPUBLIC FUNCTION GetChangeDate() AS String  DIM sLang AS String  DIM sDate AS String  sLang = System.Language  System.Language = "C"  sDate = Format$(Now, "ddd mmm dd yyyy") & " " & Name & " "  IF Address THEN sDate = sDate & "<" & Address & "> "  sDate = sDate & Subst("&1.&2-&3", Project.MajorVersion, Project.MinorVersion, Project.ReleaseVersion)  System.Language = sLang  RETURN sDateENDPRIVATE SUB FormatChange()  DIM aLine AS String[]  DIM sLine AS String  IF Change THEN    aLine = Split(Change, "\n")    Change = ""    FOR EACH sLine IN aLine      sLine = Trim(sLine)      IF NOT sLine THEN CONTINUE      IF Left(sLine) <> "-" THEN sLine = "- " & sLine      Change = Change & sLine & "\n"    NEXT    Change = "* " & GetChangeDate() & "\n" & Change & "\n"  ENDIF  TRY Change = Change & File.Load(Project.Dir &/ "CHANGELOG")ENDPRIVATE FUNCTION IsConsoleProject() AS Boolean  DIM sLib AS String  FOR EACH sLib IN Project.Libraries    IF CComponent.All[sLib].Type = "Form" THEN RETURN FALSE  NEXT  RETURN TRUEENDPRIVATE FUNCTION MakePackage(sSys AS String) AS Boolean  DIM sName AS String  DIM sExecName AS String  DIM sProjectName AS String  DIM sHome AS String  DIM sSrc AS String  DIM sDir AS String  DIM sCmd AS String  DIM hFile AS File  DIM sArch AS String  DIM sTemp AS String  DIM sOutput AS String  DIM sLang AS String  DIM sPackage AS String  DIM sVersionSuffix AS String  DIM hIcon AS NEW Image  DIM sIcon AS String  DIM sPrefix AS String  'DIM bKillRpm AS Boolean  DIM sDistribution AS String  DIM sVendor AS String  'DIM bDebianMenu AS Boolean  'DIM bRedhatMenu AS Boolean  DIM sRelease AS String  DIM sLib AS String  'DIM bNoMacro AS Boolean  DIM sMacro AS String  INC Application.Busy  SELECT CASE sSys    CASE "mandriva"      sDistribution = "Mandriva"      sVendor = "Mandriva"      'bDebianMenu = TRUE      sVersionSuffix = "mdk"    CASE "debian"      sDistribution = "Debian"      sVendor = "Debian"      'bDebianMenu = TRUE      'bNoMacro = TRUE    CASE "redhat"      sDistribution = "RedHat"      sVendor = "RedHat"      'bRedhatMenu = TRUE    CASE "suse"      sDistribution = "SuSE Linux"      sVendor = "SuSE Linux AG"      'bRedhatMenu = TRUE      sVersionSuffix = "suse"  END SELECT  sProjectName = Conv(Project.Name, Desktop.Charset, System.Charset)  IF Project.Prefix THEN sPrefix = "gambas-"  'sName = sPrefix & LCase(sProjectName)  sName = sPrefix & sProjectName  sHome = System.Home  ' step 1, set up RPM dirs and macros if they're not there already  AddLog(Subst(("Creating package for &1."), FMakeInstall.GetSystemName(sSys)))  AddLog(("Initializing ~/RPM directory."))  FOR EACH sCmd IN [ "RPM/", "RPM/BUILD/", "RPM/RPMS/", "RPM/SOURCES/", "RPM/SPECS/", "RPM/SRPMS/", "RPM/tmp/" ]    TRY MKDIR sHome &/ sCmd  NEXT  OPEN sHome &/ ".rpmmacros" FOR CREATE AS hFile  PRINT #hFile, "%_topdir " & sHome &/ "RPM"  PRINT #hFile, "%_tmppath " & sHome &/ "RPM/tmp"  PRINT #hFile, "%distribution "; sDistribution  PRINT #hFile, "%vendor "; sVendor  PRINT #hFile, "%packager "; Name & "<" & Conv(Address, Desktop.Charset, System.Charset) & ">"  PRINT #hFile, "%buildhost "; System.Host  CLOSE #hFile  ' step 2, write source tarball (with bzip) to SOURCES dir  AddLog(("Creating source package."))  sSrc = sHome &/ "RPM/SOURCES"  sDir = Project.Dir &/ ".icon"  SHELL "rm -rf " & Project.Quote(sDir) WAIT  TRY MKDIR sDir  IF Project.Icon THEN    hIcon.Load(Project.Dir &/ Project.Icon)  ELSE    hIcon.Load("img/gambas.png")  ENDIF  hIcon.Stretch(16, 16, TRUE).Save(sDir &/ "16.png")  hIcon.Stretch(32, 32, TRUE).Save(sDir &/ "32.png")  hIcon.Stretch(48, 48, TRUE).Save(sDir &/ "48.png")  sArch =  sSrc &/ Subst("&1-&2.&3.tar.bz2", sName, Project.MajorVersion, Project.MinorVersion, Project.ReleaseVersion)  Project.MakeSourcePackageTo(sArch)  AddLog(("Creating .spec file."))  OPEN sHome &/ "RPM/SPECS" &/ sName & ".spec" FOR CREATE AS hFile  PRINT #hFile, "%define name " & sName  PRINT #hFile, "%define version " & Subst("&1.&2", Project.MajorVersion, Project.MinorVersion)  sRelease = Project.ReleaseVersion & sVersionSuffix  PRINT #hFile, "%define release "; sRelease  PRINT #hFile  PRINT #hFile, "Summary: " & IIf(Project.Title, Project.Title, "Gambas project " & Project.Name)  PRINT #hFile, "Name: %{name}"  PRINT #hFile, "Version: %{version}"  PRINT #hFile, "Release: %{release}"  PRINT #hFile, "Source0: %{name}-%{version}.tar.bz2"  PRINT #hFile, "License: GPL"  PRINT #hFile, "Group: " & Project.Groups[sSys]  PRINT #hFile, "BuildRoot: %{_tmppath}/%{name}-buildroot"  PRINT #hFile, "Prefix: %{_prefix}"  'PRINT #hFile, "BuildRequires: gambas-gui"  PRINT #hFile, "BuildArch: noarch"  PRINT #hFile, "Requires: gambas-runtime >= 0.95,gambas-runtime < 1.1";  FOR EACH sLib IN Project.Libraries    PRINT #hFile, ",gambas-"; Replace(sLib, ".", "-"); " >= 1.0";    PRINT #hFile, ",gambas-"; Replace(sLib, ".", "-"); " < 1.1";  NEXT  PRINT #hFile  PRINT #hFile, "AutoReqProv: no"  PRINT #hFile, "\n%description\n" & Project.Description & "\nThis program is written in Gambas, so you will need Gambas to be installed."  PRINT #hFile, "\n%prep"  PRINT #hFile, "rm -rf $RPM_BUILD_ROOT"  PRINT #hFile, "\n%setup -q -n " & Project.Quote(sProjectName)  PRINT #hFile, "\n%build"  PRINT #hFile, Project.GetCompileCommand(TRUE, NOT Project.KeepDebugInfo, FALSE) & "\ngba"  PRINT #hFile, "\n%install"  PRINT #hFile, "install -d $RPM_BUILD_ROOT/usr/bin"  PRINT #hFile, "install -p "; Project.Quote(sProjectName); " $RPM_BUILD_ROOT/usr/bin/"; sName  sIcon = Project.Quote(sName) & ".png"  ' NOTE: There are explicit references to /usr/share.  '       I must find a way to use the rpm macros instead.  SELECT CASE sSys    CASE "mandriva"      PRINT #hFile, "install -d $RPM_BUILD_ROOT/%{_miconsdir}"      PRINT #hFile, "install -d $RPM_BUILD_ROOT/%{_iconsdir}"      PRINT #hFile, "install -d $RPM_BUILD_ROOT/%{_liconsdir}"      PRINT #hFile, "install -p .icon/16.png $RPM_BUILD_ROOT/%{_miconsdir}" &/ sIcon      PRINT #hFile, "install -p .icon/32.png $RPM_BUILD_ROOT/%{_iconsdir}" &/ sIcon      PRINT #hFile, "install -p .icon/48.png $RPM_BUILD_ROOT/%{_liconsdir}" &/ sIcon      PRINT #hFile, "install -d $RPM_BUILD_ROOT/%{_menudir}"      PRINT #hFile, "cat << EOF > $RPM_BUILD_ROOT/%{_menudir}/"; Project.Quote(sName)      PRINT #hFile, Subst("?package(&1):command=\"/usr/bin/&1\" icon=\"&1.png\" ", sName);      IF IsConsoleProject() THEN        PRINT #hFile, "needs=\"text\"";      ELSE        PRINT #hFile, "needs=\"X11\"";      ENDIF      PRINT #hFile," section=\""; Project.Menus[sSys]; "\" title=\"";      IF Project.Title THEN        PRINT #hFile, Project.Title;      ELSE        PRINT #hFile, Project.Name;      ENDIF      PRINT #hFile, "\" ";      PRINT #hFile, "longtitle=\"";      IF Project.Description THEN        PRINT #hFile, Replace(Project.Description, "\n", " ");      ELSE        PRINT #hFile, Project.Name;      ENDIF      PRINT #hFile, "\" ";      PRINT #hFile, "startup_notify=\"true\""      PRINT #hFile, "EOF"      PRINT #hFile, "\n%post"      PRINT #hFile, "%{update_menus}"      PRINT #hFile, "\n%postun"      PRINT #hFile, "%{clean_menus}"    CASE "debian"      PRINT #hFile, "install -d $RPM_BUILD_ROOT/%{_datadir}/pixmaps"      PRINT #hFile, "install -p .icon/32.png $RPM_BUILD_ROOT/%{_datadir}/pixmaps" &/ sIcon      PRINT #hFile, "install -d $RPM_BUILD_ROOT/%{_datadir}/menu"      PRINT #hFile, "cat << EOF > $RPM_BUILD_ROOT/%{_datadir}/menu/"; Project.Quote(sName)      PRINT #hFile, Subst("?package(&1):command=\"/usr/bin/&1\" icon=\"/usr/share/pixmaps/&1.png\" ", sName);      IF IsConsoleProject() THEN        PRINT #hFile, "needs=\"text\"";      ELSE        PRINT #hFile, "needs=\"X11\"";      ENDIF      PRINT #hFile," section=\""; Project.Menus[sSys]; "\" title=\"";      IF Project.Title THEN        PRINT #hFile, Project.Title;      ELSE        PRINT #hFile, Project.Name;      ENDIF      PRINT #hFile, "\" ";      PRINT #hFile, "longtitle=\"";      IF Project.Description THEN        PRINT #hFile, Replace(Project.Description, "\n", " ");      ELSE        PRINT #hFile, Project.Name;      ENDIF      PRINT #hFile, "\" ";      PRINT #hFile, "startup_notify=\"true\""      PRINT #hFile, "EOF"      'PRINT #hFile, "\n%post"      'PRINT #hFile, "%{update_menus}"      'PRINT #hFile, "\n%postun"      'PRINT #hFile, "%{clean_menus}"    CASE "redhat", "suse"      PRINT #hFile, "install -d $RPM_BUILD_ROOT/%{_datadir}/pixmaps"      PRINT #hFile, "install -d $RPM_BUILD_ROOT/%{_datadir}/applications"      PRINT #hFile, "install -p .icon/32.png $RPM_BUILD_ROOT/%{_datadir}/pixmaps" &/ sIcon      PRINT #hFile, "cat << EOF > $RPM_BUILD_ROOT/%{_datadir}/applications" &/ Project.Quote(sName) & ".desktop"      PRINT #hFile, "[Desktop Entry]"      PRINT #hFile, "Name="; Project.Title      PRINT #hFile, "Comment="; Replace(Project.Description, "\n", " ")      PRINT #hFile, "Categories="; Replace(Replace(Project.Menus[sSys], " ", ""), "/", ";");      IF sSys = "redhat" THEN        PRINT #hFile, ";X-Red-Hat-Extra"      ENDIF      PRINT #hFile      PRINT #hFile, "Icon=/usr/share/pixmaps" &/ sIcon      PRINT #hFile, "Exec=/usr/bin" &/ sName      PRINT #hFile, "Type=Application"      PRINT #hFile, "Terminal="; IIf(IsConsoleProject(), "True", "False")      PRINT #hfile, "Encoding=UTF-8"      PRINT #hFile, "EOF"  END SELECT  PRINT #hFile, "\n%clean"  PRINT #hFile, "rm -rf $RPM_BUILD_ROOT"  PRINT #hFile, "\n%files"  PRINT #hFile, "%defattr(-,root,root)"  PRINT #hFile, "/usr/bin/" & sName  SELECT CASE sSys    CASE "mandriva"      PRINT #hFile, "/%{_miconsdir}" &/ sIcon      PRINT #hFile, "/%{_iconsdir}" &/ sIcon      PRINT #hFile, "/%{_liconsdir}" &/ sIcon      PRINT #hFile, "/%{_menudir}" &/ sName    CASE "debian"      PRINT #hFile, "%{_datadir}/pixmaps" &/ sIcon      PRINT #hFile, "%{_datadir}/menu" &/ sName    CASE "redhat", "suse"      PRINT #hFile, "%{_datadir}/pixmaps" &/ sIcon      PRINT #hFile, "%{_datadir}/applications" &/ Project.Quote(sName) & ".desktop"  END SELECT  PRINT #hFile, "\n%changelog\n"  PRINT #hFile, Change  CLOSE #hFile  ' and step 4.... build that sucker.  AddLog(("Creating RPM packages."))  sLang = System.Language  System.Language = "C"  sTemp = Temp$  SHELL Project.RPMBUILD_PROG & " -ba " & Project.Quote(sHome &/ "RPM/SPECS" &/ sName & ".spec") & " > " & Project.Quote(sTemp) & " 2>&1" WAIT  sOutput = Conv(Replace(File.Load(sTemp), "\r", ""), System.Charset, Desktop.Charset)  TRY KILL sHome &/ ".rpmmacros"  System.Language = sLang  DEC Application.Busy  AddLog("\n")  FOR EACH sCmd IN Split(sOutput, "\n")    IF Left(sCmd, 6) = "Wrote:" AND Right$(sCmd, 10) = "noarch.rpm" THEN      sPackage = Subst("&1-&2.&3-&4.noarch.rpm", sName, Project.MajorVersion, Project.MinorVersion, sRelease)      IF sSys = "debian" THEN        SHELL "cd " & Project.Quote(sHome &/ "RPM/RPMS/noarch") & "; fakeroot alien --to-deb -k " & Project.Quote(sPackage) WAIT        sPackage = Subst("&1_&2.&3-&4_all.deb", sName, Project.MajorVersion, Project.MinorVersion, sRelease)        IF NOT Exist(sHome &/ "RPM/RPMS/noarch" &/ sPackage) THEN Error.Raise("alien command has failed")      ENDIF      MoveFile(sHome &/ "RPM/RPMS/noarch" &/ sPackage, Path &/ sPackage)      sPackage = Subst("&1-&2.&3-&4.src.rpm", sName, Project.MajorVersion, Project.MinorVersion, sRelease)      IF sSys = "debian" THEN        SHELL "cd " & Project.Quote(sHome &/ "RPM/SRPMS") & "; fakeroot alien --to-deb -k " & Project.Quote(sPackage) WAIT        sPackage = Subst("&1_&2.&3-&4_all.deb", sName, Project.MajorVersion, Project.MinorVersion, sRelease)        IF NOT Exist(sHome &/ "RPM/SRPMS" &/ sPackage) THEN Error.Raise("alien command has failed")        MoveFile(sHome &/ "RPM/SRPMS" &/ sPackage, Path &/ File.BaseName(sPackage) & ".src.deb")      ELSE        MoveFile(sHome &/ "RPM/SRPMS" &/ sPackage, Path &/ sPackage)      ENDIF      AddLog(sOutput)      RETURN    END IF  NEXT  Error.Raise(sOutput)' CATCH''   PRINT sOutput'   AddLog(("The package build has failed.") &"\n")'   AddLog(Error.Text)'   Message.Error(("The package build has failed."))'   RETURN TRUEENDPRIVATE SUB MoveFile(sSrc AS String, sDst AS String)  TRY KILL sDst  RENAME sSrc AS sDstEND

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -