Report abuse

define source_package ($cfgopts = "", $makeopts = "", $postcmd = ":") {
   file {
      "/usr/src/$name":
         ensure  => "directory",
         recurse => "true",
         source  => "puppet://$server/files/src/$name";
      "/usr/src/$name/build.sh":
         ensure  => "present",
         mode    => "755",
         content => template("build_source_package.sh.erb");
   }

   exec {
      "/usr/src/$name/build.sh":
         require => File["/usr/src/$name/build.sh"],
         onlyif  => "/usr/bin/test [ ! -e /usr/src/.$name.built ]";
      "$postcmd":
         command => "/bin/bash -c $postcmd && /usr/bin/touch /usr/src/.$name.postcmd_executed",
         require => File["/usr/src/$name/build.sh"],
         onlyif  => "/usr/bin/test [ ! -e /usr/src/.$name.postcmd_executed ]";
   }
}


build_source_package.sh.erb:

#!/bin/bash
pushd /usr/src/<%= name %>
./configure <%= cfgopts %> || exit -1
make clean
make || exit -2
<% [ makeopts ].flatten.each_with_index do |opt,index| -%>
make <%= opt %> || exit <%= index + 1 %>
<% end -%>
touch /usr/src/.<%= name %>.built && exit 0
exit 42