[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Fedora-packaging] Re: [Fedora-haskell-list] Revised Haskell Guidelines 2008.08.13



Jens Petersen さんは書きました:
Here is a slightly improved patch which also fixes rpmbuild and a few more tweaks that bring the output even closer to the current templates.

attached here
diff -rN -u old-cabal-rpm.darcs/src/Distribution/Package/Rpm.hs new-cabal-rpm.darcs/src/Distribution/Package/Rpm.hs
--- old-cabal-rpm.darcs/src/Distribution/Package/Rpm.hs	2008-08-29 14:09:57.000000000 +1000
+++ new-cabal-rpm.darcs/src/Distribution/Package/Rpm.hs	2008-08-29 14:09:57.000000000 +1000
@@ -149,20 +149,18 @@
     (compiler, pkgDesc) <- simplePackageDescription genPkgDesc flags
     let verbose = rpmVerbosity flags
         tmpDir = tgtPfx </> "src"
-    flip mapM_ ["BUILD", "RPMS", "SOURCES", "SPECS", "SRPMS"] $ \ subDir -> do
-      createDirectoryIfMissing True (tgtPfx </> subDir)
-    let specsDir = tgtPfx </> "SPECS"
+    createDirectoryIfMissing True (tgtPfx </> "rpm")
+    let rpmDir = tgtPfx </> "rpm"
     lbi <- localBuildInfo pkgDesc flags
     bracket (setFileCreationMask 0o022) setFileCreationMask $ \ _ -> do
       autoreconf verbose pkgDesc
       (specFile, extraDocs) <- createSpecFile True pkgDesc flags compiler
-                               specsDir
+                               rpmDir
       tree <- prepareTree pkgDesc verbose (Just lbi) False tmpDir
               knownSuffixHandlers 0
       mapM_ (copyTo verbose tree) extraDocs
-      createArchive pkgDesc verbose (Just lbi) tmpDir (tgtPfx </> "SOURCES")
-      ret <- system ("rpmbuild -ba --define \"_topdir " ++ tgtPfx ++ "\" " ++
-                     specFile)
+      createArchive pkgDesc verbose (Just lbi) tmpDir tgtPfx
+      ret <- system ("rpmbuild -ba --define \"_topdir " ++ rpmDir ++ "\" --define \"_sourcedir "  ++ tgtPfx ++ "\" " ++ specFile)
       case ret of
         ExitSuccess -> return ()
         ExitFailure n -> die ("rpmbuild failed with status " ++ show n)
@@ -196,25 +194,24 @@
     defRelease <- defaultRelease now
     let pkg = package pkgDesc
         verbose = rpmVerbosity flags
-        origName = pkgName pkg
-        name = maybe (map toLower origName) id (rpmName flags)
+        name = maybe (pkgName pkg) id (rpmName flags)
         version = maybe ((showVersion . pkgVersion) pkg) id (rpmVersion flags)
         release = maybe defRelease id (rpmRelease flags)
-        specPath = tgtPfx </> name ++ ".spec"
         group = "Development/Languages"
         buildRoot = "%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)"
         cmplrVersion = compilerVersion compiler
         doHaddock = rpmHaddock flags && hasLibs pkgDesc
         flavor = compilerFlavor compiler
         isExec = isExecutable pkgDesc
-        subPackage = if isExec then "-n %{hsc_name}-%{lc_name}" else ""
-    (cmplr, runner) <- case flavor of
-                         GHC -> return ("ghc", "runghc")
-                         Hugs -> return ("hugs", "runhugs")
-                         JHC -> return ("jhc", "runjhc")
-                         NHC -> return ("nhc", "runnhc")
-                         (OtherCompiler s) -> return (s, "run" ++ s)
+        subPackage = if isExec then " -n %{hsc_name}-%{pkg_name}" else ""
+    cmplr <- case flavor of
+                         GHC -> return "ghc"
+                         Hugs -> return "hugs"
+                         JHC -> return "jhc"
+                         NHC -> return "nhc"
+                         (OtherCompiler s) -> return s
                          _ -> die $ show flavor ++ " is not supported"
+    let specPath = tgtPfx </> (if isExec then name else cmplr ++ "-" ++ name) ++ ".spec"
     unless force $ do
         specAlreadyExists <- doesFileExist specPath
         when specAlreadyExists $
@@ -230,25 +227,22 @@
         putNewline = hPutStrLn h ""
         put s = hPutStrLn h s
         putDef v s = put $ "%define " ++ v ++ ' ' : s
-        putSetup s = put $ runner ++ " Setup " ++ s
+        putSetup s = put $ "%{_cabal}" ++ " " ++ s
         date = formatTime defaultTimeLocale "%a %b %d %Y" now
+    put "# Haskell package name"
+    putDef "pkg_name" name
+    put "# Haskell compiler"
     putDef "hsc_name" cmplr
     putDef "hsc_version" $ showVersion cmplrVersion
-    putDef "hsc_namever" $ compilerNameVersion compiler
-    put "# Original Haskell package name, and lowercased form."
-    putDef "pkg_name" origName
-    putDef "lc_name" name
-    putDef "pkg_libdir" "%{_libdir}/%{hsc_name}-%{hsc_version}/%{pkg_name}-%{version}"
-    putDef "tar_dir" "%{_builddir}/%{?buildsubdir}"
     putNewline
+    putDef "pkg_libdir" "%{_libdir}/%{hsc_name}-%{hsc_version}/%{pkg_name}-%{version}"
+    putDef "_cabal" $ "%{_bindir}/run" ++ "%{hsc_name}" ++ " Setup"
     put "# Haskell compilers do not emit debug information."
     putDef "debug_package" "%{nil}"
     putNewline
     
-    when isExec $ do
-      putHdr "Name" "%{lc_name}"
-    unless isExec $ do
-      putHdr "Name" "%{hsc_name}-%{lc_name}"
+    if isExec then putHdr "Name" "%{pkg_name}"
+              else putHdr "Name" "%{hsc_name}-%{pkg_name}"
     putHdr "Version" version
     putHdr "Release" $ release ++ "%{?dist}"
     putHdr "License" $ (showLicense . license) pkgDesc
@@ -266,7 +260,7 @@
                   else rstrip (== '.') syn'
     when synTooLong $
         warn verbose "The synopsis for this package spans multiple lines."
-    putHdrD "Summary" summary "This package has no summary"
+    putHdrD "Summary" summary "FIXME: This package has no summary"
     putHdr "BuildRoot" buildRoot
     putHdr "BuildRequires" buildReq
     -- External libraries incur both build-time and runtime
@@ -279,16 +273,14 @@
     unless isExec $ do
       putHdr_ "Requires" extraReq
       putHdr_ "Requires" runtimeReq
-      putHdr "Provides" "%{pkg_name}-%{hsc_namever} = %{version}"
 
     putNewline
-    putNewline
 
     let putDesc = do
         put $ if (null . description) pkgDesc
               then if synTooLong
                    then syn
-                   else "This package does not have a description."
+                   else "FIXME: This package does not have a description."
               else description pkgDesc
     put "%description"
     putDesc
@@ -303,17 +295,15 @@
        management system. -}
 
     when isExec $ withLib pkgDesc () $ \_ -> do
-        put "%package -n %{hsc_name}-%{lc_name}"
-        putHdrD "Summary" summary "This library package has no summary"
+        put "%package -n %{hsc_name}-%{pkg_name}"
+        putHdrD "Summary" summary "FIXME: This library package has no summary"
         putHdr "Group" "Development/Libraries"
         putHdr "Requires" "%{hsc_name} = %{hsc_version}"
         putHdr_ "Requires" extraReq
         putHdr_ "Requires" runtimeReq
-        putHdr "Provides" "%{pkg_name}-%{hsc_namever} = %{version}"
-        putNewline
         putNewline
 
-        put "%description -n %{hsc_name}-%{lc_name}"
+        put "%description -n %{hsc_name}-%{pkg_name}"
         putDesc
         putNewline
         put "This package contains libraries for %{hsc_name} %{hsc_version}."
@@ -321,15 +311,13 @@
         putNewline
 
     when (rpmLibProf flags) $ do
-        put "%package -n %{hsc_name}-%{lc_name}-prof"
-        putHdr "Summary" "Profiling libraries for %{hsc_name}-%{lc_name}"
+        put "%package -n %{hsc_name}-%{pkg_name}-prof"
+        putHdr "Summary" "Profiling libraries for %{hsc_name}-%{pkg_name}"
         putHdr "Group" "Development/Libraries"
-        putHdr "Requires" "%{hsc_name}-%{lc_name} = %{version}"
-        putHdr "Provides" "%{pkg_name}-%{hsc_namever}-prof = %{version}"
-        putNewline
+        putHdr "Requires" "%{hsc_name}-%{pkg_name} = %{version}-%{release}"
         putNewline
 
-        put "%description -n %{hsc_name}-%{lc_name}-prof"
+        put "%description -n %{hsc_name}-%{pkg_name}-prof"
         putDesc
         putNewline
         put "This package contains profiling libraries for %{hsc_name} %{hsc_version}."
@@ -344,14 +332,14 @@
     put "%build"
     put "if [ -f configure.ac -a ! -f configure ]; then autoreconf; fi"
     putSetup ("configure --prefix=%{_prefix} --libdir=%{_libdir} " ++
-              "--docdir=%{_docdir}/%{hsc_name}-%{lc_name}-%{version} " ++
+              "--docdir=%{_docdir}/%{hsc_name}-%{pkg_name}-%{version} " ++
               "--libsubdir='$compiler/$pkgid' " ++
               (let cfg = rpmConfigurationsFlags flags
                in if null cfg
                   then ""
                   else "--flags='" ++ joinConfigurations cfg ++ "' ") ++
               (if (rpmLibProf flags) then "--enable" else "--disable") ++
-              "-library-profiling --" ++ cmplr)
+              "-library-profiling --" ++ "%{hsc_name}")
     withLib pkgDesc () $ \_ -> do
         hPutStr h "if "
         putSetup "makefile -f cabal-rpm.mk"
@@ -374,15 +362,16 @@
     putSetup "copy --destdir=${RPM_BUILD_ROOT}"
     withLib pkgDesc () $ \_ -> do
         put "install -m 755 register.sh unregister.sh ${RPM_BUILD_ROOT}%{pkg_libdir}"
-        put "cd ${RPM_BUILD_ROOT}"
-        put "echo '%defattr (-,root,root,-)' > %{tar_dir}/%{name}-files.prof"
-        put "find .%{pkg_libdir} \\( -name '*_p.a' -o -name '*.p_hi' \\) | sed s/^.// >> %{tar_dir}/%{name}-files.prof"
-        put "echo '%defattr (-,root,root,-)' > %{tar_dir}/%{name}-files.nonprof"
-        put "find .%{pkg_libdir} -type d | sed 's/^./%dir /' >> %{tar_dir}/%{name}-files.nonprof"
-        put "find .%{pkg_libdir} ! \\( -type d -o -name '*_p.a' -o -name '*.p_hi' \\) | sed s/^.// >> %{tar_dir}/%{name}-files.nonprof"
-        put "sed 's,^/,%exclude /,' %{tar_dir}/%{name}-files.prof >> %{tar_dir}/%{name}-files.nonprof"
+        putNewline
+        put "rm -f %{name}.files %{name}-prof.files"
+        put "echo '%defattr(-,root,root,-)' > %{name}-prof.files"
+        put "find ${RPM_BUILD_ROOT}%{pkg_libdir} \\( -name '*_p.a' -o -name '*.p_hi' \\) >> %{name}-prof.files"
+        put "echo '%defattr(-,root,root,-)' > %{name}.files"
+        put "find ${RPM_BUILD_ROOT}%{pkg_libdir} -type d | sed 's/^/%dir /' >> %{name}.files"
+        put "find ${RPM_BUILD_ROOT}%{pkg_libdir} ! \\( -type d -o -name '*_p.a' -o -name '*.p_hi' \\) >> %{name}.files"
+        put $ "sed -i -e \"s!${RPM_BUILD_ROOT}!!g\"" ++ " " ++ "%{name}.files %{name}-prof.files"
     putNewline
-    put "cd ${RPM_BUILD_ROOT}/%{_datadir}/doc/%{hsc_name}-%{lc_name}-%{version}"
+    put "cd ${RPM_BUILD_ROOT}/%{_datadir}/doc/%{hsc_name}-%{pkg_name}-%{version}"
     put $ "rm -rf doc " ++ concat (intersperse " " docs)
     putNewline
     putNewline
@@ -405,12 +394,12 @@
            same location as the about-to-be-installed library's
            script. -}
 
-        put $ "%pre " ++ subPackage
+        put $ "%pre" ++ subPackage
         put "[ \"$1\" = 2 ] && %{pkg_libdir}/unregister.sh >&/dev/null || :"
         putNewline
         putNewline
 
-        put $ "%post " ++ subPackage
+        put $ "%post" ++ subPackage
         put "%{pkg_libdir}/register.sh >&/dev/null"
         putNewline
         putNewline
@@ -420,7 +409,7 @@
            runtime's package system will be left with a phantom record
            for a package it can no longer use. -}
 
-        put $ "%preun " ++ subPackage
+        put $ "%preun" ++ subPackage
         put "%{pkg_libdir}/unregister.sh >&/dev/null"
         putNewline
         putNewline
@@ -430,12 +419,12 @@
            Cabal name+version, even though the RPM release differs);
            therefore, we must attempt to re-register it. -}
 
-        put $ "%postun " ++ subPackage
+        put $ "%postun" ++ subPackage
         put "[ \"$1\" = 1 ] && %{pkg_libdir}/register.sh >& /dev/null || :"
         putNewline
         putNewline
 
-        put $ "%files " ++ subPackage ++ " -f %{name}-files.nonprof"
+        put $ "%files" ++ subPackage ++ " -f %{name}.files"
         when doHaddock $
             put "%doc dist/doc/html"
         when ((not . null) docs) $
@@ -444,7 +433,7 @@
         putNewline
 
         when (rpmLibProf flags) $ do
-            put "%files -n %{hsc_name}-%{lc_name}-prof -f %{name}-files.prof"
+            put "%files -n %{hsc_name}-%{pkg_name}-prof -f %{name}-prof.files"
             put $ "%doc " ++ licenseFile pkgDesc
             putNewline
             putNewline
@@ -454,7 +443,7 @@
       put "%defattr (-,root,root,-)"
     withExe pkgDesc $ \exe -> put $ "%{_bindir}/" ++ exeName exe
     when (((not . null . dataFiles) pkgDesc) && isExec) $
-        put "%{_datadir}/%{lc_name}-%{version}"
+        put "%{_datadir}/%{pkg_name}-%{version}"
 
     -- Add the license file to the main package only if it wouldn't
     -- otherwise be empty.
@@ -537,18 +526,12 @@
              -> IO String
 
 showBuildReq verbose haddock c pkgDesc = do
-    cPkg <- case compilerFlavor c of
-              GHC -> return "ghc"
-              Hugs -> return "hugs98"
-              _ -> die $ "cannot deal with compiler " ++ show c
-    let cVersion = pkgVersion $ compilerId c
-        myDeps = [Dependency cPkg (ThisVersion cVersion)] ++
-                 if haddock then [Dependency "haddock" AnyVersion] else []
+    let myDeps = if haddock then [Dependency "haddock" AnyVersion] else []
         externalDeps = filter (not . isBundled c)
                        (buildDepends pkgDesc)
     exReqs <- mapM (showRpmReq verbose (virtualPackage c)) externalDeps
     myReqs <- mapM (showRpmReq verbose id) myDeps
-    return $ (commaSep . concat) (myReqs ++ exReqs)
+    return $ "%{hsc_name} = %{hsc_version}, " ++ (commaSep . concat) (myReqs ++ exReqs)
 
 -- | Represent a dependency in a form suitable for an RPM spec file.
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]