makepack-dolibarr.pl 55 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259
  1. #!/usr/bin/perl
  2. #----------------------------------------------------------------------------
  3. # \file build/makepack-dolibarr.pl
  4. # \brief Dolibarr package builder (tgz, zip, rpm, deb, exe, aps)
  5. # \author (c)2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
  6. #
  7. # This is list of constant you can set to have generated packages moved into a specific dir:
  8. #DESTIBETARC='/media/HDDATA1_LD/Mes Sites/Web/Dolibarr/dolibarr.org/files/lastbuild'
  9. #DESTISTABLE='/media/HDDATA1_LD/Mes Sites/Web/Dolibarr/dolibarr.org/files/stable'
  10. #DESTIMODULES='/media/HDDATA1_LD/Mes Sites/Web/Admin1/wwwroot/files/modules'
  11. #DESTIDOLIMEDBETARC='/media/HDDATA1_LD/Mes Sites/Web/DoliCloud/dolimed.com/htdocs/files/lastbuild'
  12. #DESTIDOLIMEDMODULES='/media/HDDATA1_LD/Mes Sites/Web/DoliCloud/dolimed.com/htdocs/files/modules'
  13. #DESTIDOLIMEDSTABLE='/media/HDDATA1_LD/Mes Sites/Web/DoliCloud/dolimed.com/htdocs/files/stable'
  14. #----------------------------------------------------------------------------
  15. use Cwd;
  16. # Change this to defined target for option 98 and 99
  17. $PROJECT="dolibarr";
  18. $PUBLISHSTABLE="eldy,dolibarr\@frs.sourceforge.net:/home/frs/project/dolibarr";
  19. $PUBLISHBETARC="ldestailleur\@asso.dolibarr.org:/home/dolibarr/dolibarr.org/httpdocs/files";
  20. #@LISTETARGET=("TGZ","ZIP","RPM_GENERIC","RPM_FEDORA","RPM_MANDRIVA","RPM_OPENSUSE","DEB","APS","EXEDOLIWAMP","SNAPSHOT"); # Possible packages
  21. @LISTETARGET=("TGZ","ZIP","RPM_GENERIC","RPM_FEDORA","RPM_MANDRIVA","RPM_OPENSUSE","DEB","EXEDOLIWAMP","SNAPSHOT"); # Possible packages
  22. %REQUIREMENTPUBLISH=(
  23. "SF"=>"git ssh rsync",
  24. "ASSO"=>"git ssh rsync"
  25. );
  26. %REQUIREMENTTARGET=( # Tool requirement for each package
  27. "TGZ"=>"tar",
  28. "ZIP"=>"7z",
  29. "XZ"=>"xz",
  30. "RPM_GENERIC"=>"rpmbuild",
  31. "RPM_FEDORA"=>"rpmbuild",
  32. "RPM_MANDRIVA"=>"rpmbuild",
  33. "RPM_OPENSUSE"=>"rpmbuild",
  34. "DEB"=>"dpkg",
  35. "APS"=>"zip",
  36. "EXEDOLIWAMP"=>"ISCC.exe",
  37. "SNAPSHOT"=>"tar"
  38. );
  39. %ALTERNATEPATH=(
  40. "7z"=>"7-ZIP",
  41. "makensis.exe"=>"NSIS"
  42. );
  43. $RPMSUBVERSION="auto"; # auto use value found into BUILD
  44. if (-d "/usr/src/redhat") { $RPMDIR="/usr/src/redhat"; } # redhat
  45. if (-d "/usr/src/packages") { $RPMDIR="/usr/src/packages"; } # opensuse
  46. if (-d "/usr/src/RPM") { $RPMDIR="/usr/src/RPM"; } # mandrake
  47. use vars qw/ $REVISION $VERSION /;
  48. $VERSION="4.0";
  49. #------------------------------------------------------------------------------
  50. # MAIN
  51. #------------------------------------------------------------------------------
  52. ($DIR=$0) =~ s/([^\/\\]+)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1;
  53. $DIR||='.'; $DIR =~ s/([^\/\\])[\\\/]+$/$1/;
  54. $SOURCE="$DIR/..";
  55. $DESTI="$SOURCE/build";
  56. if ($SOURCE !~ /^\//)
  57. {
  58. print "Error: Launch the script $PROG.$Extension with its full path from /.\n";
  59. print "$PROG.$Extension aborted.\n";
  60. sleep 2;
  61. exit 1;
  62. }
  63. if (! $ENV{"DESTIBETARC"} || ! $ENV{"DESTISTABLE"})
  64. {
  65. print "Error: Missing environment variables.\n";
  66. print "You must define the environment variable DESTIBETARC and DESTISTABLE to point to the\ndirectories where you want to save the generated packages.\n";
  67. print "Example: DESTIBETARC='/media/HDDATA1_LD/Mes Sites/Web/Dolibarr/dolibarr.org/files/lastbuild'\n";
  68. print "Example: DESTISTABLE='/media/HDDATA1_LD/Mes Sites/Web/Dolibarr/dolibarr.org/files/stable'\n";
  69. print "$PROG.$Extension aborted.\n";
  70. sleep 2;
  71. exit 1;
  72. }
  73. if (! -d $ENV{"DESTIBETARC"} || ! -d $ENV{"DESTISTABLE"})
  74. {
  75. print "Error: Directory of environment variable DESTIBETARC or DESTISTABLE does not exist.\n";
  76. print "$PROG.$Extension aborted.\n";
  77. sleep 2;
  78. exit 1;
  79. }
  80. # Detect OS type
  81. # --------------
  82. if ("$^O" =~ /linux/i || (-d "/etc" && -d "/var" && "$^O" !~ /cygwin/i)) { $OS='linux'; $CR=''; }
  83. elsif (-d "/etc" && -d "/Users") { $OS='macosx'; $CR=''; }
  84. elsif ("$^O" =~ /cygwin/i || "$^O" =~ /win32/i) { $OS='windows'; $CR="\r"; }
  85. if (! $OS) {
  86. print "Error: Can't detect your OS.\n";
  87. print "Can't continue.\n";
  88. print "$PROG.$Extension aborted.\n";
  89. sleep 2;
  90. exit 1;
  91. }
  92. # Define buildroot
  93. # ----------------
  94. if ($OS =~ /linux/) {
  95. $TEMP=$ENV{"TEMP"}||$ENV{"TMP"}||"/tmp";
  96. }
  97. if ($OS =~ /macos/) {
  98. $TEMP=$ENV{"TEMP"}||$ENV{"TMP"}||"/tmp";
  99. }
  100. if ($OS =~ /windows/) {
  101. $TEMP=$ENV{"TEMP"}||$ENV{"TMP"}||"c:/temp";
  102. $PROGPATH=$ENV{"ProgramFiles"};
  103. }
  104. if (! $TEMP || ! -d $TEMP) {
  105. print "Error: A temporary directory can not be find.\n";
  106. print "Check that TEMP or TMP environment variable is set correctly.\n";
  107. print "$PROG.$Extension aborted.\n";
  108. sleep 2;
  109. exit 2;
  110. }
  111. $BUILDROOT="$TEMP/buildroot";
  112. # Get version $MAJOR, $MINOR and $BUILD
  113. $result = open( IN, "<" . $SOURCE . "/htdocs/filefunc.inc.php" );
  114. if ( !$result ) { die "Error: Can't open descriptor file " . $SOURCE . "/htdocs/filefunc.inc.php\n"; }
  115. while (<IN>) {
  116. if ( $_ =~ /define\('DOL_VERSION','([\d\.a-z\-]+)'\)/ ) { $PROJVERSION = $1; break; }
  117. }
  118. close IN;
  119. ($MAJOR,$MINOR,$BUILD)=split(/\./,$PROJVERSION,3);
  120. if ($MINOR eq '') { die "Error can't detect version into ".$SOURCE . "/htdocs/filefunc.inc.php"; }
  121. # Set vars for packaging
  122. $FILENAME = "$PROJECT";
  123. $FILENAMESNAPSHOT = "$PROJECT-snapshot";
  124. $FILENAMETGZ = "$PROJECT-$MAJOR.$MINOR.$BUILD";
  125. $FILENAMEZIP = "$PROJECT-$MAJOR.$MINOR.$BUILD";
  126. $FILENAMEXZ = "$PROJECT-$MAJOR.$MINOR.$BUILD";
  127. $FILENAMEDEB = "see later";
  128. $FILENAMEAPS = "$PROJECT-$MAJOR.$MINOR.$BUILD.app";
  129. $FILENAMEEXEDOLIWAMP = "DoliWamp-$MAJOR.$MINOR.$BUILD";
  130. # For RPM
  131. $ARCH='noarch';
  132. $newbuild = $BUILD;
  133. $newbuild =~ s/(dev|alpha)/0.1.a/gi; # dev (fedora)
  134. $newbuild =~ s/beta(.?)/0.2.beta/gi; # beta (fedora) (we want beta1, beta2, betax to be same package name)
  135. $newbuild =~ s/rc(.?)/0.3.rc/gi; # rc (fedora) (we want rc1, rc2, rcx to be same package name)
  136. if ($newbuild !~ /-/) { $newbuild.='-0.4'; } # finale (fedora)
  137. #$newbuild =~ s/(dev|alpha)/0/gi; # dev
  138. #$newbuild =~ s/beta/1/gi; # beta
  139. #$newbuild =~ s/rc./2/gi; # rc
  140. #if ($newbuild !~ /-/) { $newbuild.='-3'; } # finale
  141. $REL1 = $newbuild; $REL1 =~ s/-.*$//gi;
  142. if ($RPMSUBVERSION eq 'auto') { $RPMSUBVERSION = $newbuild; $RPMSUBVERSION =~ s/^.*-//gi; }
  143. $FILENAMETGZ2="$PROJECT-$MAJOR.$MINOR.$REL1";
  144. $FILENAMERPM=$FILENAMETGZ2."-".$RPMSUBVERSION.".".$ARCH.".rpm";
  145. # For Deb
  146. $newbuild = $BUILD;
  147. $newbuild =~ s/(dev|alpha)/1/gi; # dev
  148. $newbuild =~ s/beta(.?)/2/gi; # beta (we want beta1, beta2, betax to be same package name)
  149. $newbuild =~ s/rc(.?)/3/gi; # rc (we want rc1, rc2, rcx to be same package name)
  150. if ($newbuild !~ /-/) { $newbuild.='-4'; } # finale is same than rc.
  151. # now newbuild is 0-1 or 0-4 for example. Note that for native package (see debian/source/format), we should not use a dash part but to get a better version management
  152. $build = $newbuild;
  153. $build =~ s/-.*$//g;
  154. # now build is 0 for example
  155. # $build .= '+nmu1';
  156. # now build is 0+nmu1 for example
  157. $FILENAMEDEBNATIVE="${PROJECT}_${MAJOR}.${MINOR}.${build}";
  158. $FILENAMEDEB="${PROJECT}_${MAJOR}.${MINOR}.${newbuild}";
  159. my $copyalreadydone=0;
  160. my $batch=0;
  161. for (0..@ARGV-1) {
  162. if ($ARGV[$_] =~ /^-*target=(\w+)/i) { $target=$1; $batch=1; }
  163. if ($ARGV[$_] =~ /^-*desti=(.+)/i) { $DESTI=$1; }
  164. if ($ARGV[$_] =~ /^-*prefix=(.+)/i) {
  165. $PREFIX=$1;
  166. $FILENAMESNAPSHOT.="-".$PREFIX;
  167. }
  168. }
  169. if ($ENV{"DESTIBETARC"} && $BUILD =~ /[a-z]/i) { $DESTI = $ENV{"DESTIBETARC"}; } # Force output dir if env DESTIBETARC is defined
  170. if ($ENV{"DESTISTABLE"} && $BUILD =~ /^[0-9]+$/) { $DESTI = $ENV{"DESTISTABLE"}; } # Force output dir if env DESTISTABLE is defined
  171. if ($ENV{"PUBLISHBETARC"} && $BUILD =~ /[a-z]/i) { $PUBLISHBETARC = $ENV{"PUBLISHBETARC"}; } # Force target site for publishing if env PUBLISHBETARC is defined
  172. if ($ENV{"PUBLISHSTABLE"} && $BUILD =~ /^[0-9]+$/) { $PUBLISHSTABLE = $ENV{"PUBLISHSTABLE"}; } # Force target site for publishing if env PUBLISHSTABLE is defined
  173. print "Makepack version $VERSION\n";
  174. print "Building/publishing package name: $PROJECT\n";
  175. print "Building/publishing package version: $MAJOR.$MINOR.$BUILD\n";
  176. print "Source directory (SOURCE): $SOURCE\n";
  177. print "Target directory (DESTI) : $DESTI\n";
  178. #print "Publishing target (PUBLISH): $PUBLISH\n";
  179. # Choose package targets
  180. #-----------------------
  181. if ($target) {
  182. if ($target eq "ALL") {
  183. foreach my $key (@LISTETARGET) {
  184. if ($key ne 'SNAPSHOT' && $key ne 'SF' && $key ne 'ASSO') { $CHOOSEDTARGET{$key}=1; }
  185. }
  186. }
  187. if ($target ne "ALL" && $target ne "SF" && $target ne "ASSO") { $CHOOSEDTARGET{uc($target)}=1; }
  188. if ($target eq "SF") { $CHOOSEDPUBLISH{"SF"}=1; }
  189. if ($target eq "ASSO") { $CHOOSEDPUBLISH{"ASSO"}=1; }
  190. }
  191. else {
  192. my $found=0;
  193. my $NUM_SCRIPT;
  194. my $cpt=0;
  195. while (! $found) {
  196. $cpt=0;
  197. printf(" %2d - %-14s (%s)\n",$cpt,"ALL (1..10)","Need ".join(",",values %REQUIREMENTTARGET));
  198. $cpt++;
  199. printf(" %2d - %-14s\n",$cpt,"Generate check file");
  200. foreach my $target (@LISTETARGET) {
  201. $cpt++;
  202. printf(" %2d - %-14s (%s)\n",$cpt,$target,"Need ".$REQUIREMENTTARGET{$target});
  203. }
  204. $cpt=98;
  205. printf(" %2d - %-14s (%s)\n",$cpt,"ASSO (publish)","Need ".$REQUIREMENTPUBLISH{"ASSO"});
  206. $cpt=99;
  207. printf(" %2d - %-14s (%s)\n",$cpt,"SF (publish)","Need ".$REQUIREMENTPUBLISH{"SF"});
  208. # Ask which target to build
  209. print "Choose one target number or several separated with space (0 - ".$cpt."): ";
  210. $NUM_SCRIPT=<STDIN>;
  211. chomp($NUM_SCRIPT);
  212. if ($NUM_SCRIPT !~ /^[0-9\s]+$/)
  213. {
  214. print "This is not a valid package number list.\n";
  215. $found = 0;
  216. }
  217. else
  218. {
  219. $found = 1;
  220. }
  221. }
  222. print "\n";
  223. if ($NUM_SCRIPT eq "98") {
  224. $CHOOSEDPUBLISH{"ASSO"}=1;
  225. }
  226. elsif ($NUM_SCRIPT eq "99") {
  227. $CHOOSEDPUBLISH{"SF"}=1;
  228. }
  229. elsif ($NUM_SCRIPT eq "0") {
  230. $CHOOSEDTARGET{"-CHKSUM"}=1;
  231. foreach my $key (@LISTETARGET) {
  232. if ($key ne 'SNAPSHOT' && $key ne 'ASSO' && $key ne 'SF') { $CHOOSEDTARGET{$key}=1; }
  233. }
  234. }
  235. elsif ($NUM_SCRIPT eq "1") {
  236. $CHOOSEDTARGET{"-CHKSUM"}=1
  237. }
  238. else {
  239. foreach my $num (split(/\s+/,$NUM_SCRIPT)) {
  240. $CHOOSEDTARGET{$LISTETARGET[$num-2]}=1;
  241. }
  242. }
  243. }
  244. # Test if requirement is ok
  245. #--------------------------
  246. $atleastonerpm=0;
  247. foreach my $target (sort keys %CHOOSEDTARGET) {
  248. if ($target =~ /RPM/i)
  249. {
  250. if ($atleastonerpm && ($DESTI eq "$SOURCE/build"))
  251. {
  252. print "Error: You asked creation of several rpms. Because all rpm have same name, you must defined an environment variable DESTI to tell packager where it can create subdirs for each generated package.\n";
  253. exit;
  254. }
  255. $atleastonerpm=1;
  256. }
  257. foreach my $req (split(/[,\s]/,$REQUIREMENTTARGET{$target}))
  258. {
  259. # Test
  260. print "Test requirement for target $target: Search '$req'... ";
  261. $newreq=$req; $newparam='';
  262. if ($newreq eq 'zip') { $newparam.='-h'; }
  263. if ($newreq eq 'xz') { $newparam.='-h'; }
  264. $cmd="\"$newreq\" $newparam 2>&1";
  265. print "Test command ".$cmd."... ";
  266. $ret=`$cmd`;
  267. $coderetour=$?; $coderetour2=$coderetour>>8;
  268. if ($coderetour != 0 && (($coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i) || ($coderetour2 == 127 && $OS !~ /windows/)) && $PROGPATH) {
  269. # Not found error, we try in PROGPATH
  270. $ret=`"$PROGPATH/$ALTERNATEPATH{$req}/$req\" 2>&1`;
  271. $coderetour=$?; $coderetour2=$coderetour>>8;
  272. $REQUIREMENTTARGET{$target}="$PROGPATH/$ALTERNATEPATH{$req}/$req";
  273. }
  274. if ($coderetour != 0 && (($coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i) || ($coderetour2 == 127 && $OS !~ /windows/))) {
  275. # Not found error
  276. print "Not found\nCan't build target $target. Requirement '$req' not found in PATH\n";
  277. $CHOOSEDTARGET{$target}=-1;
  278. last;
  279. } else {
  280. # Pas erreur ou erreur autre que programme absent
  281. print " Found ".$req."\n";
  282. }
  283. }
  284. }
  285. print "\n";
  286. # Build xml check file
  287. #-----------------------
  288. if ($CHOOSEDTARGET{'-CHKSUM'})
  289. {
  290. print 'Create xml check file with md5 checksum with command php '.$SOURCE.'/build/generate_filecheck_xml.php release='.$MAJOR.'.'.$MINOR.'.'.$BUILD."\n";
  291. $ret=`php $SOURCE/build/generate_filecheck_xml.php release=$MAJOR.$MINOR.$BUILD`;
  292. print $ret."\n";
  293. }
  294. #print join(',',sort keys %CHOOSEDTARGET)."\n";
  295. # Check if there is at least one target to build
  296. #----------------------------------------------
  297. $nboftargetok=0;
  298. $nboftargetneedbuildroot=0;
  299. $nbofpublishneedtag=0;
  300. foreach my $target (sort keys %CHOOSEDTARGET) {
  301. if ($CHOOSEDTARGET{$target} < 0) { next; }
  302. if ($target ne 'EXE' && $target ne 'EXEDOLIWAMP' && $target ne '-CHKSUM')
  303. {
  304. $nboftargetneedbuildroot++;
  305. }
  306. $nboftargetok++;
  307. }
  308. foreach my $target (sort keys %CHOOSEDPUBLISH) {
  309. if ($CHOOSEDPUBLISH{$target} < 0) { next; }
  310. if ($target eq 'ASSO') { $nbofpublishneedtag++; }
  311. if ($target eq 'SF') { $nbofpublishneedtag++; }
  312. $nboftargetok++;
  313. }
  314. if ($nboftargetok) {
  315. # Update GIT tag if required
  316. #---------------------------
  317. if ($nbofpublishneedtag)
  318. {
  319. print "Go to directory $SOURCE\n";
  320. $olddir=getcwd();
  321. chdir("$SOURCE");
  322. # Test that the ChangeLog is ok
  323. $TMPBUILDTOCHECKCHANGELOG=$BUILD;
  324. $TMPBUILDTOCHECKCHANGELOG =~ s/\-rc\d*//;
  325. $TMPBUILDTOCHECKCHANGELOG =~ s/\-beta\d*//;
  326. print "Check if ChangeLog is ok for version $MAJOR.$MINOR\.$TMPBUILDTOCHECKCHANGELOG\n";
  327. $ret=`grep "ChangeLog for $MAJOR.$MINOR\.$TMPBUILDTOCHECKCHANGELOG" "$SOURCE/ChangeLog" 2>&1`;
  328. if (! $ret)
  329. {
  330. print "Error: The ChangeLogFile was not updated. Run the following command before building package for $MAJOR.$MINOR.$BUILD:\n";
  331. if (! $BUILD || $BUILD eq '0-rc') # For a major version
  332. {
  333. print 'cd ~/git/dolibarr_'.$MAJOR.'.'.$MINOR.'; git log `git rev-list --boundary '.$MAJOR.'.'.$MINOR.'..origin/develop | grep ^- | cut -c2- | head -n 1`.. --no-merges --pretty=short --oneline | sed -e "s/^[0-9a-z]* //" | grep -e \'^FIX\|NEW\' | sort -u | sed \'s/FIXED:/FIX:/g\' | sed \'s/FIXED :/FIX:/g\' | sed \'s/FIX :/FIX:/g\' | sed \'s/FIX /FIX: /g\' | sed \'s/NEW :/NEW:/g\' | sed \'s/NEW /NEW: /g\' > /tmp/aaa';
  334. }
  335. else # For a maintenance release
  336. {
  337. print 'cd ~/git/dolibarr_'.$MAJOR.'.'.$MINOR.'; git log '.$MAJOR.'.'.$MINOR.'.'.($BUILD-1).'.. --no-merges --pretty=short --oneline | sed -e "s/^[0-9a-z]* //" | grep -e \'^FIX\|NEW\' | sort -u | sed \'s/FIXED:/FIX:/g\' | sed \'s/FIXED :/FIX:/g\' | sed \'s/FIX :/FIX:/g\' | sed \'s/FIX /FIX: /g\' | sed \'s/NEW :/NEW:/g\' | sed \'s/NEW /NEW: /g\' > /tmp/aaa';
  338. }
  339. print "\n";
  340. exit;
  341. }
  342. else
  343. {
  344. print "ChangeLog for $MAJOR.$MINOR\.$BUILD was found into '$SOURCE/ChangeLog'\n";
  345. }
  346. print 'Run git tag -a -m "'.$MAJOR.'.'.$MINOR.'.'.$BUILD.'" "'.$MAJOR.'.'.$MINOR.'.'.$BUILD.'"'."\n";
  347. $ret=`git tag -a -m "$MAJOR.$MINOR.$BUILD" "$MAJOR.$MINOR.$BUILD" 2>&1`;
  348. if ($ret =~ /(already exists|existe déjà)/)
  349. {
  350. print "WARNING: Tag ".$MAJOR.'.'.$MINOR.'.'.$BUILD." already exists. Overwrite (y/N) ? ";
  351. $QUESTIONOVERWRITETAG=<STDIN>;
  352. chomp($QUESTIONOVERWRITETAG);
  353. if ($QUESTIONOVERWRITETAG =~ /(o|y)/)
  354. {
  355. print 'Run git tag -a -f -m "'.$MAJOR.'.'.$MINOR.'.'.$BUILD.'" "'.$MAJOR.'.'.$MINOR.'.'.$BUILD.'"'."\n";
  356. $ret=`git tag -a -f -m "$MAJOR.$MINOR.$BUILD" "$MAJOR.$MINOR.$BUILD"`;
  357. }
  358. }
  359. print 'Run git push --tags'."\n";
  360. $ret=`git push --tags`;
  361. chdir("$olddir");
  362. }
  363. # Update buildroot if required
  364. #-----------------------------
  365. if ($nboftargetneedbuildroot)
  366. {
  367. if (! $copyalreadydone) {
  368. print "Creation of a buildroot used for all packages\n";
  369. print "Delete directory $BUILDROOT\n";
  370. $ret=`rm -fr "$BUILDROOT"`;
  371. mkdir "$BUILDROOT";
  372. mkdir "$BUILDROOT/$PROJECT";
  373. print "Copy $SOURCE into $BUILDROOT/$PROJECT\n";
  374. $ret=`cp -pr "$SOURCE" "$BUILDROOT/$PROJECT"`;
  375. #print "Copy $SOURCE/build/debian/apache/.htaccess into $BUILDROOT/$PROJECT/build/debian/apache/.htaccess\n";
  376. #$ret=`cp -pr "$SOURCE/build/debian/apache/.htaccess" "$BUILDROOT/$PROJECT/build/debian/apache/.htaccess"`;
  377. }
  378. print "Clean $BUILDROOT\n";
  379. $ret=`rm -f $BUILDROOT/$PROJECT/.buildpath`;
  380. $ret=`rm -fr $BUILDROOT/$PROJECT/.cache`;
  381. $ret=`rm -fr $BUILDROOT/$PROJECT/.editorconfig`;
  382. $ret=`rm -fr $BUILDROOT/$PROJECT/.externalToolBuilders`;
  383. $ret=`rm -fr $BUILDROOT/$PROJECT/.git*`;
  384. $ret=`rm -fr $BUILDROOT/$PROJECT/.project`;
  385. $ret=`rm -fr $BUILDROOT/$PROJECT/.settings`;
  386. $ret=`rm -fr $BUILDROOT/$PROJECT/.scrutinizer.yml`;
  387. $ret=`rm -fr $BUILDROOT/$PROJECT/.travis.yml`;
  388. $ret=`rm -fr $BUILDROOT/$PROJECT/.tx`;
  389. $ret=`rm -f $BUILDROOT/$PROJECT/build.xml`;
  390. $ret=`rm -f $BUILDROOT/$PROJECT/pom.xml`;
  391. $ret=`rm -fr $BUILDROOT/$PROJECT/build/html`;
  392. $ret=`rm -f $BUILDROOT/$PROJECT/build/Doli*-*`;
  393. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr_*.deb`;
  394. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr_*.dsc`;
  395. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr_*.tar.gz`;
  396. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.deb`;
  397. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.rpm`;
  398. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.tar`;
  399. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.tar.gz`;
  400. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.tgz`;
  401. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.xz`;
  402. $ret=`rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.zip`;
  403. $ret=`rm -f $BUILDROOT/$PROJECT/build/doxygen/doxygen_warnings.log`;
  404. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/cache.manifest`;
  405. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf.php`;
  406. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf.php.mysql`;
  407. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf.php.old`;
  408. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf.php.postgres`;
  409. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf*sav*`;
  410. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/install/mssql/README`;
  411. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/install/mysql/README`;
  412. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/install/pgsql/README`;
  413. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/install/mssql`;
  414. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/ansible`;
  415. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/codesniffer`;
  416. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/codetemplates`;
  417. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/dbmodel`;
  418. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/initdata`;
  419. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/initdemo`;
  420. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/iso-normes`;
  421. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/ldap`;
  422. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/licence`;
  423. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/mail`;
  424. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/multitail`;
  425. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/phpcheckstyle`;
  426. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/phpunit`;
  427. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/security`;
  428. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/spec`;
  429. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/test`;
  430. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/uml`;
  431. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/vagrant`;
  432. $ret=`rm -fr $BUILDROOT/$PROJECT/dev/xdebug`;
  433. $ret=`rm -f $BUILDROOT/$PROJECT/dev/dolibarr_changes.txt`;
  434. $ret=`rm -f $BUILDROOT/$PROJECT/dev/README`;
  435. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot2.png`;
  436. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot3.png`;
  437. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot4.png`;
  438. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot5.png`;
  439. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot6.png`;
  440. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot7.png`;
  441. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot8.png`;
  442. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot9.png`;
  443. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot10.png`;
  444. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot11.png`;
  445. $ret=`rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot12.png`;
  446. # Security to avoid to package data files
  447. $ret=`rm -fr $BUILDROOT/$PROJECT/document`;
  448. $ret=`rm -fr $BUILDROOT/$PROJECT/documents`;
  449. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/document`;
  450. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/documents`;
  451. # Removed known external modules to avoid any error when packaging from env where external modules are tested
  452. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/custom/*`; # For custom we want to keep dir
  453. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/allscreens*`;
  454. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/ancotec*`;
  455. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/cabinetmed*`;
  456. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/calling*`;
  457. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/bootstrap*`;
  458. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/dolimed*`;
  459. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/dolimod*`;
  460. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/factory*`;
  461. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/lead*`;
  462. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/management*`;
  463. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/multicompany*`;
  464. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/ndf*`;
  465. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/nltechno*`;
  466. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/oscim*`;
  467. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/pos*`;
  468. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/teclib*`;
  469. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/timesheet*`;
  470. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/webmail*`;
  471. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/accountingexport*`;
  472. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/themes/oblyon*`;
  473. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/themes/allscreen*`;
  474. # Removed other test files
  475. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/themes/eldy/*.new`;
  476. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/public/api/explorer`; # This is a dev tool
  477. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/public/test`;
  478. $ret=`rm -fr $BUILDROOT/$PROJECT/test`;
  479. $ret=`rm -fr $BUILDROOT/$PROJECT/Thumbs.db $BUILDROOT/$PROJECT/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/*/Thumbs.db`;
  480. $ret=`rm -f $BUILDROOT/$PROJECT/.cvsignore $BUILDROOT/$PROJECT/*/.cvsignore $BUILDROOT/$PROJECT/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/*/*/.cvsignore`;
  481. $ret=`rm -f $BUILDROOT/$PROJECT/.gitignore $BUILDROOT/$PROJECT/*/.gitignore $BUILDROOT/$PROJECT/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/*/*/*/.gitignore`;
  482. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/geoip/sample*.*`;
  483. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/jqueryFileTree/connectors/jqueryFileTree.pl`; # Avoid errors into rpmlint
  484. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/template`; # Package not valid for most linux distributions (errors reported into compile.js). Package should be embed by modules to avoid problems.
  485. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpmailer`; # Package not valid for most linux distributions (errors reported into file LICENSE). Package should be embed by modules to avoid problems.
  486. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/ckeditor/adapters`; # Keep this removal in case we embed libraries
  487. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/ckeditor/samples`; # Keep this removal in case we embed libraries
  488. #$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/_source`; # _source must be kept into tarball
  489. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/datatables/extensions/TableTools/swf`; # Source of this flash is not available
  490. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/datatables/extras/TableTools/swf`; # Source of this flash is not available
  491. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/multiselect/MIT-LICENSE.txt`;
  492. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/select2/release.sh`;
  493. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/mike42/escpos-php/doc`;
  494. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/mike42/escpos-php/example`;
  495. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/mike42/escpos-php/test`;
  496. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nusoap/lib/Mail`;
  497. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nusoap/samples`;
  498. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/php-iban/docs`;
  499. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/.gitattributes`;
  500. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/Classes/license.md`;
  501. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/Classes/PHPExcel/Shared/PDF`;
  502. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/Classes/PHPExcel/Shared/PCLZip`;
  503. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/Examples`;
  504. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/unitTests`;
  505. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/license.md`;
  506. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/fonts/dejavu-fonts-ttf-*`;
  507. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/fonts/freefont-*`;
  508. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/fonts/utils`;
  509. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/LICENSE.TXT`;
  510. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-*`;
  511. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/fonts/freefont-*`;
  512. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/fonts/utils`;
  513. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/tools`;
  514. $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/LICENSE.TXT`;
  515. $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/savant`;
  516. }
  517. # Build package for each target
  518. #------------------------------
  519. foreach my $target (sort keys %CHOOSEDTARGET)
  520. {
  521. if ($CHOOSEDTARGET{$target} < 0) { next; }
  522. if ($target eq '-CHKSUM') { next; }
  523. print "\nBuild package for target $target\n";
  524. if ($target eq 'SNAPSHOT')
  525. {
  526. $NEWDESTI=$DESTI;
  527. print "Remove target $FILENAMESNAPSHOT.tgz...\n";
  528. unlink("$NEWDESTI/$FILENAMESNAPSHOT.tgz");
  529. #rmdir "$BUILDROOT/$FILENAMESNAPSHOT";
  530. $ret=`rm -fr $BUILDROOT/$FILENAMESNAPSHOT`;
  531. print "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$FILENAMESNAPSHOT\n";
  532. $cmd="cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$FILENAMESNAPSHOT\"";
  533. $ret=`$cmd`;
  534. print "Compress $BUILDROOT into $FILENAMESNAPSHOT.tgz...\n";
  535. $cmd="tar --exclude doli*.tgz --exclude doli*.deb --exclude doli*.exe --exclude doli*.xz --exclude doli*.zip --exclude doli*.rpm --exclude .cache --exclude .settings --exclude conf.php --exclude conf.php.mysql --exclude conf.php.old --exclude conf.php.postgres --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$FILENAMESNAPSHOT.tgz\" $FILENAMESNAPSHOT";
  536. print $cmd."\n";
  537. $ret=`$cmd`;
  538. # Move to final dir
  539. print "Move $FILENAMESNAPSHOT.tgz to $NEWDESTI/$FILENAMESNAPSHOT.tgz\n";
  540. $ret=`mv "$FILENAMESNAPSHOT.tgz" "$NEWDESTI/$FILENAMESNAPSHOT.tgz"`;
  541. next;
  542. }
  543. if ($target eq 'TGZ')
  544. {
  545. $NEWDESTI=$DESTI;
  546. if ($NEWPUBLISH =~ /stable/)
  547. {
  548. mkdir($DESTI.'/standard');
  549. if (-d $DESTI.'/standard') { $NEWDESTI=$DESTI.'/standard'; }
  550. }
  551. print "Remove target $FILENAMETGZ.tgz...\n";
  552. unlink("$NEWDESTI/$FILENAMETGZ.tgz");
  553. #rmdir "$BUILDROOT/$FILENAMETGZ";
  554. $ret=`rm -fr $BUILDROOT/$FILENAMETGZ`;
  555. print "Copy $BUILDROOT/$PROJECT/ to $BUILDROOT/$FILENAMETGZ\n";
  556. $cmd="cp -pr \"$BUILDROOT/$PROJECT/\" \"$BUILDROOT/$FILENAMETGZ\"";
  557. $ret=`$cmd`;
  558. $ret=`rm -fr $BUILDROOT/$FILENAMETGZ/build/exe`;
  559. $ret=`rm -fr $BUILDROOT/$FILENAMETGZ/htdocs/includes/ckeditor/_source`; # We can't remove it with exclude file, we need it for some tarball packages
  560. print "Compress $FILENAMETGZ into $FILENAMETGZ.tgz...\n";
  561. $cmd="tar --exclude-vcs --exclude-from \"$BUILDROOT/$PROJECT/build/tgz/tar_exclude.txt\" --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$BUILDROOT/$FILENAMETGZ.tgz\" $FILENAMETGZ";
  562. print "$cmd\n";
  563. $ret=`$cmd`;
  564. # Move to final dir
  565. print "Move $BUILDROOT/$FILENAMETGZ.tgz to $NEWDESTI/$FILENAMETGZ.tgz\n";
  566. $ret=`mv "$BUILDROOT/$FILENAMETGZ.tgz" "$NEWDESTI/$FILENAMETGZ.tgz"`;
  567. next;
  568. }
  569. if ($target eq 'XZ')
  570. {
  571. $NEWDESTI=$DESTI;
  572. if ($NEWPUBLISH =~ /stable/)
  573. {
  574. mkdir($DESTI.'/standard');
  575. if (-d $DESTI.'/standard') { $NEWDESTI=$DESTI.'/standard'; }
  576. }
  577. print "Remove target $FILENAMEXZ.xz...\n";
  578. unlink("$NEWDESTI/$FILENAMEXZ.xz");
  579. #rmdir "$BUILDROOT/$FILENAMEXZ";
  580. $ret=`rm -fr $BUILDROOT/$FILENAMEXZ`;
  581. print "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$FILENAMEXZ\n";
  582. $cmd="cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$FILENAMEXZ\"";
  583. $ret=`$cmd`;
  584. $ret=`rm -fr $BUILDROOT/$FILENAMEXZ/build/exe`;
  585. $ret=`rm -fr $BUILDROOT/$FILENAMEXZ/htdocs/includes/ckeditor/_source`; # We can't remove it with exclude file, we need it for some tarball packages
  586. print "Compress $FILENAMEXZ into $FILENAMEXZ.xz...\n";
  587. print "Go to directory $BUILDROOT\n";
  588. $olddir=getcwd();
  589. chdir("$BUILDROOT");
  590. $cmd= "xz -9 -r $BUILDROOT/$FILENAMEAPS.xz \*";
  591. print $cmd."\n";
  592. $ret= `$cmd`;
  593. chdir("$olddir");
  594. # Move to final dir
  595. print "Move $FILENAMEXZ.xz to $NEWDESTI/$FILENAMEXZ.xz\n";
  596. $ret=`mv "$BUILDROOT/$FILENAMEXZ.xz" "$NEWDESTI/$FILENAMEXZ.xz"`;
  597. next;
  598. }
  599. if ($target eq 'ZIP')
  600. {
  601. $NEWDESTI=$DESTI;
  602. if ($NEWPUBLISH =~ /stable/)
  603. {
  604. mkdir($DESTI.'/standard');
  605. if (-d $DESTI.'/standard') { $NEWDESTI=$DESTI.'/standard'; }
  606. }
  607. print "Remove target $FILENAMEZIP.zip...\n";
  608. unlink("$NEWDESTI/$FILENAMEZIP.zip");
  609. #rmdir "$BUILDROOT/$FILENAMEZIP";
  610. $ret=`rm -fr $BUILDROOT/$FILENAMEZIP`;
  611. print "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$FILENAMEZIP\n";
  612. $cmd="cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$FILENAMEZIP\"";
  613. $ret=`$cmd`;
  614. $ret=`rm -fr $BUILDROOT/$FILENAMEZIP/build/exe`;
  615. $ret=`rm -fr $BUILDROOT/$FILENAMEZIP/htdocs/includes/ckeditor/_source`; # We can't remove it with exclude file, we need it for some tarball packages
  616. print "Compress $FILENAMEZIP into $FILENAMEZIP.zip...\n";
  617. print "Go to directory $BUILDROOT\n";
  618. $olddir=getcwd();
  619. chdir("$BUILDROOT");
  620. $cmd= "7z a -r -tzip -xr\@\"$BUILDROOT\/$FILENAMEZIP\/build\/zip\/zip_exclude.txt\" -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMEZIP\/*";
  621. print $cmd."\n";
  622. $ret= `$cmd`;
  623. chdir("$olddir");
  624. # Move to final dir
  625. print "Move $FILENAMEZIP.zip to $NEWDESTI/$FILENAMEZIP.zip\n";
  626. $ret=`mv "$BUILDROOT/$FILENAMEZIP.zip" "$NEWDESTI/$FILENAMEZIP.zip"`;
  627. next;
  628. }
  629. if ($target =~ /RPM/) # Linux only
  630. {
  631. $NEWDESTI=$DESTI;
  632. $subdir="package_rpm_generic";
  633. if ($target =~ /FEDO/i) { $subdir="package_rpm_redhat-fedora"; }
  634. if ($target =~ /MAND/i) { $subdir="package_rpm_mandriva"; }
  635. if ($target =~ /OPEN/i) { $subdir="package_rpm_opensuse"; }
  636. if ($NEWPUBLISH =~ /stable/)
  637. {
  638. mkdir($DESTI.'/'.$subdir);
  639. if (-d $DESTI.'/'.$subdir) { $NEWDESTI=$DESTI.'/'.$subdir; }
  640. }
  641. if ($RPMDIR eq "") { $RPMDIR=$ENV{'HOME'}."/rpmbuild"; }
  642. print "Version is $MAJOR.$MINOR.$REL1-$RPMSUBVERSION\n";
  643. print "Remove target ".$FILENAMERPM."...\n";
  644. unlink("$NEWDESTI/".$FILENAMERPM);
  645. print "Remove target ".$FILENAMETGZ2."-".$RPMSUBVERSION.".src.rpm...\n";
  646. unlink("$NEWDESTI/".$FILENAMETGZ2."-".$RPMSUBVERSION.".src.rpm");
  647. print "Create directory $BUILDROOT/$FILENAMETGZ2\n";
  648. $ret=`rm -fr $BUILDROOT/$FILENAMETGZ2`;
  649. print "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$FILENAMETGZ2\n";
  650. $cmd="cp -pr '$BUILDROOT/$PROJECT' '$BUILDROOT/$FILENAMETGZ2'";
  651. $ret=`$cmd`;
  652. # Removed files we don't need
  653. $ret=`rm -fr $BUILDROOT/$FILENAMETGZ2/htdocs/includes/ckeditor/_source`;
  654. print "Set permissions on files/dir\n";
  655. $ret=`chmod -R 755 $BUILDROOT/$FILENAMETGZ2`;
  656. $cmd="find $BUILDROOT/$FILENAMETGZ2 -type f -exec chmod 644 {} \\; ";
  657. $ret=`$cmd`;
  658. # Build tgz
  659. print "Compress $FILENAMETGZ2 into $FILENAMETGZ2.tgz...\n";
  660. $ret=`tar --exclude-from "$SOURCE/build/tgz/tar_exclude.txt" --directory "$BUILDROOT" -czvf "$BUILDROOT/$FILENAMETGZ2.tgz" $FILENAMETGZ2`;
  661. print "Move $BUILDROOT/$FILENAMETGZ2.tgz to $RPMDIR/SOURCES/$FILENAMETGZ2.tgz\n";
  662. $cmd="mv $BUILDROOT/$FILENAMETGZ2.tgz $RPMDIR/SOURCES/$FILENAMETGZ2.tgz";
  663. $ret=`$cmd`;
  664. $BUILDFIC="${FILENAME}.spec";
  665. $BUILDFICSRC="${FILENAME}_generic.spec";
  666. if ($target =~ /FEDO/i) { $BUILDFICSRC="${FILENAME}_fedora.spec"; }
  667. if ($target =~ /MAND/i) { $BUILDFICSRC="${FILENAME}_mandriva.spec"; }
  668. if ($target =~ /OPEN/i) { $BUILDFICSRC="${FILENAME}_opensuse.spec"; }
  669. use Date::Language;
  670. $lang=Date::Language->new('English');
  671. $datestring = $lang->time2str("%a %b %e %Y", time);
  672. $changelogstring="* ".$datestring." Laurent Destailleur (eldy) $MAJOR.$MINOR.$REL1-$RPMSUBVERSION\n- Upstream release\n";
  673. print "Generate file $BUILDROOT/$BUILDFIC from $SOURCE/build/rpm/${BUILDFICSRC}\n";
  674. open (SPECFROM,"<$SOURCE/build/rpm/${BUILDFICSRC}") || die "Error";
  675. open (SPECTO,">$BUILDROOT/$BUILDFIC") || die "Error";
  676. while (<SPECFROM>) {
  677. $_ =~ s/__FILENAMETGZ__/$FILENAMETGZ/;
  678. $_ =~ s/__VERSION__/$MAJOR.$MINOR.$REL1/;
  679. $_ =~ s/__RELEASE__/$RPMSUBVERSION/;
  680. $_ =~ s/__CHANGELOGSTRING__/$changelogstring/;
  681. print SPECTO $_;
  682. }
  683. close SPECFROM;
  684. close SPECTO;
  685. print "Copy patch file to $RPMDIR/SOURCES\n";
  686. $ret=`cp "$SOURCE/build/rpm/dolibarr-forrpm.patch" "$RPMDIR/SOURCES"`;
  687. $ret=`chmod 644 $RPMDIR/SOURCES/dolibarr-forrpm.patch`;
  688. print "Launch RPM build (rpmbuild --clean -ba $BUILDROOT/${BUILDFIC})\n";
  689. #$ret=`rpmbuild -vvvv --clean -ba $BUILDROOT/${BUILDFIC}`;
  690. $ret=`rpmbuild --clean -ba $BUILDROOT/${BUILDFIC}`;
  691. # Move to final dir
  692. print "Move $RPMDIR/RPMS/".$ARCH."/".$FILENAMETGZ2."-".$RPMSUBVERSION."*.".$ARCH.".rpm into $NEWDESTI/".$FILENAMETGZ2."-".$RPMSUBVERSION."*.".$ARCH.".rpm\n";
  693. $cmd="mv $RPMDIR/RPMS/".$ARCH."/".$FILENAMETGZ2."-".$RPMSUBVERSION."*.".$ARCH.".rpm \"$NEWDESTI/\"";
  694. $ret=`$cmd`;
  695. print "Move $RPMDIR/SRPMS/".$FILENAMETGZ2."-".$RPMSUBVERSION."*.src.rpm into $NEWDESTI/".$FILENAMETGZ2."-".$RPMSUBVERSION."*.src.rpm\n";
  696. $cmd="mv $RPMDIR/SRPMS/".$FILENAMETGZ2."-".$RPMSUBVERSION."*.src.rpm \"$NEWDESTI/\"";
  697. $ret=`$cmd`;
  698. print "Move $RPMDIR/SOURCES/".$FILENAMETGZ2.".tgz into $NEWDESTI/".$FILENAMETGZ2.".tgz\n";
  699. $cmd="mv \"$RPMDIR/SOURCES/".$FILENAMETGZ2.".tgz\" \"$NEWDESTI/".$FILENAMETGZ2.".tgz\"";
  700. #$ret=`$cmd`;
  701. next;
  702. }
  703. if ($target eq 'DEB')
  704. {
  705. $NEWDESTI=$DESTI;
  706. if ($NEWPUBLISH =~ /stable/)
  707. {
  708. mkdir($DESTI.'/package_debian-ubuntu');
  709. if (-d $DESTI.'/package_debian-ubuntu') { $NEWDESTI=$DESTI.'/package_debian-ubuntu'; }
  710. }
  711. $olddir=getcwd();
  712. print "Remove target ${FILENAMEDEB}_all.deb...\n";
  713. unlink("$NEWDESTI/${FILENAMEDEB}_all.deb");
  714. print "Remove target ${FILENAMEDEB}.dsc...\n";
  715. unlink("$NEWDESTI/${FILENAMEDEB}.dsc");
  716. print "Remove target ${FILENAMEDEB}.tar.gz...\n";
  717. unlink("$NEWDESTI/${FILENAMEDEB}.tar.gz");
  718. print "Remove target ${FILENAMEDEB}.changes...\n";
  719. unlink("$NEWDESTI/${FILENAMEDEB}.changes");
  720. print "Remove target ${FILENAMEDEB}.debian.tar.gz...\n";
  721. unlink("$NEWDESTI/${FILENAMEDEB}.debian.tar.gz");
  722. print "Remove target ${FILENAMEDEBNATIVE}.orig.tar.gz...\n";
  723. unlink("$NEWDESTI/${FILENAMEDEBNATIVE}.orig.tar.gz");
  724. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp`;
  725. $ret=`rm -fr $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build`;
  726. print "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$PROJECT.tmp\n";
  727. $cmd="cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$PROJECT.tmp\"";
  728. $ret=`$cmd`;
  729. $cmd="cp -pr \"$BUILDROOT/$PROJECT/build/debian/apache/.htaccess\" \"$BUILDROOT/$PROJECT.tmp/build/debian/apache/.htaccess\"";
  730. $ret=`$cmd`;
  731. print "Remove other files\n";
  732. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/README-FR`;
  733. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/README`;
  734. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/README-FR`;
  735. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/aps`;
  736. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/dmg`;
  737. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/pad/README`;
  738. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/tgz/README`;
  739. #$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/debian`;
  740. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/debian/po`;
  741. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/debian/source`;
  742. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/changelog`;
  743. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/compat`;
  744. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/control*`;
  745. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/copyright`;
  746. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.config`;
  747. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.desktop`;
  748. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.docs`;
  749. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.install`;
  750. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.lintian-overrides`;
  751. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.postrm`;
  752. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.postinst`;
  753. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.templates`;
  754. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.templates.futur`;
  755. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/rules`;
  756. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/README.Debian`;
  757. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/README.howto`;
  758. $ret=`rm -f $BUILDROOT/$PROJECT.tmp/build/debian/watch`;
  759. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/doap`;
  760. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/exe`;
  761. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/launchpad`;
  762. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/live`;
  763. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/patch`;
  764. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/perl`;
  765. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/rpm`;
  766. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/build/zip`;
  767. # Removed duplicate license files
  768. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor/ckeditor/_source/LICENSE.md`;
  769. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor/ckeditor/_source/plugins/scayt/LICENSE.md`;
  770. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor/ckeditor/_source/plugins/wsc/LICENSE.md`;
  771. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor/ckeditor/LICENSE.md`;
  772. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor/ckeditor/plugins/scayt/LICENSE.md`;
  773. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor/ckeditor/plugins/wsc/LICENSE.md`;
  774. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/php-iban/LICENSE`;
  775. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/jquery/plugins/flot/LICENSE.txt`;
  776. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/jquery/plugins/datatables/extensions/ColReorder/License.txt`;
  777. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/jquery/plugins/datatables/extensions/ColVis/License.txt`;
  778. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/jquery/plugins/datatables/extensions/FixedColumns/License.txt`;
  779. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/jquery/plugins/datatables/extensions/Responsive/License.txt`;
  780. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/jquery/plugins/datatables/license.txt`;
  781. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/jquery/plugins/select2/LICENSE`;
  782. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/mike42/escpos-php/LICENSE.md`;
  783. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/mobiledetect/mobiledetectlib/LICENSE.txt`;
  784. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34/LICENSE`;
  785. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/tecnickcom/tcpdf/fonts/freefont-20120503/COPYING`;
  786. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/tecnickcom/tcpdf/fonts/ae_fonts_2.0/COPYING`;
  787. # Removed files we don't need
  788. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor/ckeditor/_source`;
  789. # Rename upstream changelog to match debian rules
  790. $ret=`mv $BUILDROOT/$PROJECT.tmp/ChangeLog $BUILDROOT/$PROJECT.tmp/changelog`;
  791. # Prepare source package (init debian dir)
  792. print "Create directory $BUILDROOT/$PROJECT.tmp/debian\n";
  793. $ret=`mkdir "$BUILDROOT/$PROJECT.tmp/debian"`;
  794. print "Copy $SOURCE/build/debian/xxx to $BUILDROOT/$PROJECT.tmp/debian\n";
  795. # Add files for dpkg-source (changelog)
  796. #$ret=`cp -f "$SOURCE/build/debian/changelog" "$BUILDROOT/$PROJECT.tmp/debian"`;
  797. open (SPECFROM,"<$SOURCE/build/debian/changelog") || die "Error";
  798. open (SPECTO,">$BUILDROOT/$PROJECT.tmp/debian/changelog") || die "Error";
  799. while (<SPECFROM>) {
  800. $_ =~ s/__VERSION__/$MAJOR.$MINOR.$newbuild/;
  801. print SPECTO $_;
  802. }
  803. close SPECFROM;
  804. close SPECTO;
  805. # Add files for dpkg-source
  806. $ret=`cp -f "$SOURCE/build/debian/compat" "$BUILDROOT/$PROJECT.tmp/debian"`;
  807. $ret=`cp -f "$SOURCE/build/debian/control" "$BUILDROOT/$PROJECT.tmp/debian"`;
  808. $ret=`cp -f "$SOURCE/build/debian/copyright" "$BUILDROOT/$PROJECT.tmp/debian"`;
  809. $ret=`cp -f "$SOURCE/build/debian/dolibarr.desktop" "$BUILDROOT/$PROJECT.tmp/debian"`;
  810. $ret=`cp -f "$SOURCE/build/debian/dolibarr.docs" "$BUILDROOT/$PROJECT.tmp/debian"`;
  811. $ret=`cp -f "$SOURCE/build/debian/dolibarr.install" "$BUILDROOT/$PROJECT.tmp/debian"`;
  812. $ret=`cp -f "$SOURCE/build/debian/dolibarr.lintian-overrides" "$BUILDROOT/$PROJECT.tmp/debian"`;
  813. $ret=`cp -f "$SOURCE/build/debian/dolibarr.xpm" "$BUILDROOT/$PROJECT.tmp/debian"`;
  814. $ret=`cp -f "$SOURCE/build/debian/rules" "$BUILDROOT/$PROJECT.tmp/debian"`;
  815. $ret=`cp -f "$SOURCE/build/debian/watch" "$BUILDROOT/$PROJECT.tmp/debian"`;
  816. $ret=`cp -fr "$SOURCE/build/debian/patches" "$BUILDROOT/$PROJECT.tmp/debian"`;
  817. $ret=`cp -fr "$SOURCE/build/debian/po" "$BUILDROOT/$PROJECT.tmp/debian"`;
  818. $ret=`cp -fr "$SOURCE/build/debian/source" "$BUILDROOT/$PROJECT.tmp/debian"`;
  819. $ret=`cp -fr "$SOURCE/build/debian/apache" "$BUILDROOT/$PROJECT.tmp/debian/apache"`;
  820. $ret=`cp -f "$SOURCE/build/debian/apache/.htaccess" "$BUILDROOT/$PROJECT.tmp/debian/apache"`;
  821. $ret=`cp -fr "$SOURCE/build/debian/lighttpd" "$BUILDROOT/$PROJECT.tmp/debian/lighttpd"`;
  822. # Add files also required to build binary package
  823. $ret=`cp -f "$SOURCE/build/debian/dolibarr.config" "$BUILDROOT/$PROJECT.tmp/debian"`;
  824. $ret=`cp -f "$SOURCE/build/debian/dolibarr.postinst" "$BUILDROOT/$PROJECT.tmp/debian"`;
  825. $ret=`cp -f "$SOURCE/build/debian/dolibarr.postrm" "$BUILDROOT/$PROJECT.tmp/debian"`;
  826. $ret=`cp -f "$SOURCE/build/debian/dolibarr.templates" "$BUILDROOT/$PROJECT.tmp/debian"`;
  827. $ret=`cp -f "$SOURCE/build/debian/install.forced.php.install" "$BUILDROOT/$PROJECT.tmp/debian"`;
  828. # Set owners and permissions
  829. #print "Set owners on files/dir\n";
  830. #$ret=`chown -R root.root $BUILDROOT/$PROJECT.tmp`;
  831. print "Set permissions on files/dir\n";
  832. $ret=`chmod -R 755 $BUILDROOT/$PROJECT.tmp`;
  833. $cmd="find $BUILDROOT/$PROJECT.tmp -type f -exec chmod 644 {} \\; ";
  834. $ret=`$cmd`;
  835. $cmd="find $BUILDROOT/$PROJECT.tmp/build -name '*.php' -type f -exec chmod 755 {} \\; ";
  836. $ret=`$cmd`;
  837. $cmd="find $BUILDROOT/$PROJECT.tmp/build -name '*.dpatch' -type f -exec chmod 755 {} \\; ";
  838. $ret=`$cmd`;
  839. $cmd="find $BUILDROOT/$PROJECT.tmp/build -name '*.pl' -type f -exec chmod 755 {} \\; ";
  840. $ret=`$cmd`;
  841. $cmd="find $BUILDROOT/$PROJECT.tmp/dev -name '*.php' -type f -exec chmod 755 {} \\; ";
  842. $ret=`$cmd`;
  843. $ret=`chmod 755 $BUILDROOT/$PROJECT.tmp/debian/rules`;
  844. $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/translation/autotranslator.class.php`;
  845. $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/skeletons/modMyModule.class.php`;
  846. $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/skeletons/skeleton_api_class.class.php`;
  847. $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/skeletons/skeleton_card.php`;
  848. $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/skeletons/skeleton_class.class.php`;
  849. $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/skeletons/skeleton_list.php`;
  850. $ret=`chmod -R 755 $BUILDROOT/$PROJECT.tmp/dev/skeletons/skeleton_script.php`;
  851. $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/skeletons/skeleton_webservice_server.php`;
  852. $cmd="find $BUILDROOT/$PROJECT.tmp/scripts -name '*.php' -type f -exec chmod 755 {} \\; ";
  853. $ret=`$cmd`;
  854. $cmd="find $BUILDROOT/$PROJECT.tmp/scripts -name '*.sh' -type f -exec chmod 755 {} \\; ";
  855. $ret=`$cmd`;
  856. print "Rename directory $BUILDROOT/$PROJECT.tmp into $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build\n";
  857. $cmd="mv $BUILDROOT/$PROJECT.tmp $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build";
  858. $ret=`$cmd`;
  859. print "Go into directory $BUILDROOT\n";
  860. chdir("$BUILDROOT");
  861. # We need a tarball to be able to build "quilt" debian package (not required for native but we need patch so it is not a native)
  862. print "Compress $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build into $BUILDROOT/$FILENAMEDEBNATIVE.orig.tar.gz...\n";
  863. $cmd="tar --exclude-vcs --exclude-from \"$BUILDROOT/$PROJECT/build/tgz/tar_exclude.txt\" --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$BUILDROOT/$FILENAMEDEBNATIVE.orig.tar.gz\" $PROJECT-$MAJOR.$MINOR.$build";
  864. print $cmd."\n";
  865. $ret=`$cmd`;
  866. # Creation of source package
  867. print "Go into directory $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build\n";
  868. chdir("$BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build");
  869. #$cmd="dpkg-source -b $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build";
  870. $cmd="dpkg-buildpackage -us -uc";
  871. print "Launch DEB build ($cmd)\n";
  872. $ret=`$cmd 2>&1 3>&1`;
  873. print $ret."\n";
  874. chdir("$olddir");
  875. print "You can check bin package with lintian --pedantic -E -I \"$NEWDESTI/${FILENAMEDEB}_all.deb\"\n";
  876. print "You can check src package with lintian --pedantic -E -I \"$NEWDESTI/${FILENAMEDEB}.dsc\"\n";
  877. # Move to final dir
  878. print "Move *_all.deb *.dsc *.orig.tar.gz *.changes to $NEWDESTI\n";
  879. $ret=`mv $BUILDROOT/*_all.deb "$NEWDESTI/"`;
  880. $ret=`mv $BUILDROOT/*.dsc "$NEWDESTI/"`;
  881. $ret=`mv $BUILDROOT/*.orig.tar.gz "$NEWDESTI/"`;
  882. $ret=`mv $BUILDROOT/*.debian.tar.gz "$NEWDESTI/"`;
  883. $ret=`mv $BUILDROOT/*.changes "$NEWDESTI/"`;
  884. next;
  885. }
  886. if ($target eq 'APS')
  887. {
  888. $NEWDESTI=$DESTI;
  889. if ($NEWPUBLISH =~ /stable/)
  890. {
  891. mkdir($DESTI.'/package_aps');
  892. if (-d $DESTI.'/package_aps') { $NEWDESTI=$DESTI.'/package_aps'; }
  893. }
  894. $newbuild = $BUILD;
  895. $newbuild =~ s/(dev|alpha)/0/gi; # dev
  896. $newbuild =~ s/beta/1/gi; # beta
  897. $newbuild =~ s/rc./2/gi; # rc
  898. if ($newbuild !~ /-/) { $newbuild.='-3'; } # finale
  899. # now newbuild is 0-0 or 0-3 for example
  900. $REL1 = $newbuild; $REL1 =~ s/-.*$//gi;
  901. if ($RPMSUBVERSION eq 'auto') { $RPMSUBVERSION = $newbuild; $RPMSUBVERSION =~ s/^.*-//gi; }
  902. print "Version is $MAJOR.$MINOR.$REL1-$RPMSUBVERSION\n";
  903. print "Remove target $FILENAMEAPS.zip...\n";
  904. unlink "$NEWDESTI/$FILENAMEAPS.zip";
  905. #rmdir "$BUILDROOT/$PROJECT.tmp";
  906. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp`;
  907. print "Create directory $BUILDROOT/$PROJECT.tmp\n";
  908. $ret=`mkdir -p "$BUILDROOT/$PROJECT.tmp"`;
  909. print "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$PROJECT.tmp\n";
  910. $cmd="cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$PROJECT.tmp\"";
  911. $ret=`$cmd`;
  912. print "Remove other files\n";
  913. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/deb`;
  914. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/dmg`;
  915. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/doap`;
  916. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/exe`;
  917. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/live`;
  918. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/patch`;
  919. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/rpm`;
  920. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/zip`;
  921. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/perl`;
  922. $APSVERSION="1.2";
  923. print "Create APS files $BUILDROOT/$PROJECT.tmp/$PROJECT/APP-META.xml\n";
  924. open (SPECFROM,"<$BUILDROOT/$PROJECT/build/aps/APP-META-$APSVERSION.xml") || die "Error";
  925. open (SPECTO,">$BUILDROOT/$PROJECT.tmp/$PROJECT/APP-META.xml") || die "Error";
  926. while (<SPECFROM>) {
  927. $newbuild = $BUILD;
  928. $newbuild =~ s/(dev|alpha)/0/gi; # dev
  929. $newbuild =~ s/beta/1/gi; # beta
  930. $newbuild =~ s/rc./2/gi; # rc
  931. if ($newbuild !~ /-/) { $newbuild.='-3'; } # finale
  932. # now newbuild is 0-0 or 0-3 for example
  933. $_ =~ s/__VERSION__/$MAJOR.$MINOR.$REL1/;
  934. $_ =~ s/__RELEASE__/$RPMSUBVERSION/;
  935. print SPECTO $_;
  936. }
  937. close SPECFROM;
  938. close SPECTO;
  939. print "Version set to $MAJOR.$MINOR.$newbuild\n";
  940. $cmd="cp -pr \"$BUILDROOT/$PROJECT/build/aps/configure.php\" \"$BUILDROOT/$PROJECT.tmp/$PROJECT/scripts/configure.php\"";
  941. $ret=`$cmd`;
  942. $cmd="cp -pr \"$BUILDROOT/$PROJECT/doc/images\" \"$BUILDROOT/$PROJECT.tmp/$PROJECT/images\"";
  943. $ret=`$cmd`;
  944. print "Remove other files\n";
  945. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/dev`;
  946. $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/doc`;
  947. print "Build APP-LIST.xml files\n";
  948. print "Compress $BUILDROOT/$PROJECT.tmp/$PROJECT into $FILENAMEAPS.zip...\n";
  949. print "Go to directory $BUILDROOT/$PROJECT.tmp\/$PROJECT\n";
  950. $olddir=getcwd();
  951. chdir("$BUILDROOT\/$PROJECT.tmp\/$PROJECT");
  952. $cmd= "zip -9 -r $BUILDROOT/$FILENAMEAPS.zip \*";
  953. print $cmd."\n";
  954. $ret= `$cmd`;
  955. chdir("$olddir");
  956. # Move to final dir
  957. print "Move $BUILDROOT/$FILENAMEAPS.zip to $NEWDESTI/$FILENAMEAPS.zip\n";
  958. $ret=`mv "$BUILDROOT/$FILENAMEAPS.zip" "$NEWDESTI/$FILENAMEAPS.zip"`;
  959. next;
  960. }
  961. if ($target eq 'EXEDOLIWAMP')
  962. {
  963. $NEWDESTI=$DESTI;
  964. if ($NEWPUBLISH =~ /stable/)
  965. {
  966. mkdir($DESTI.'/package_windows');
  967. if (-d $DESTI.'/package_windows') { $NEWDESTI=$DESTI.'/package_windows'; }
  968. }
  969. print "Remove target $NEWDESTI/$FILENAMEEXEDOLIWAMP.exe...\n";
  970. unlink "$NEWDESTI/$FILENAMEEXEDOLIWAMP.exe";
  971. print "Check that in your Wine setup, you create a Z: drive that point to your / directory.\n";
  972. $SOURCEBACK=$SOURCE;
  973. $SOURCEBACK =~ s/\//\\/g;
  974. print "Prepare file \"$SOURCEBACK\\build\\exe\\doliwamp\\doliwamp.tmp.iss from \"$SOURCEBACK\\build\\exe\\doliwamp\\doliwamp.iss\"\n";
  975. $ret=`cat "$SOURCE/build/exe/doliwamp/doliwamp.iss" | sed -e 's/__FILENAMEEXEDOLIWAMP__/$FILENAMEEXEDOLIWAMP/g' > "$SOURCE/build/exe/doliwamp/doliwamp.tmp.iss"`;
  976. print "Compil exe $FILENAMEEXEDOLIWAMP.exe file from iss file \"$SOURCEBACK\\build\\exe\\doliwamp\\doliwamp.tmp.iss\"\n";
  977. $cmd= "ISCC.exe \"Z:$SOURCEBACK\\build\\exe\\doliwamp\\doliwamp.tmp.iss\"";
  978. print "$cmd\n";
  979. $ret= `$cmd`;
  980. #print "$ret\n";
  981. # Move to final dir
  982. print "Move \"$SOURCE\\build\\$FILENAMEEXEDOLIWAMP.exe\" to $NEWDESTI/$FILENAMEEXEDOLIWAMP.exe\n";
  983. rename("$SOURCE/build/$FILENAMEEXEDOLIWAMP.exe","$NEWDESTI/$FILENAMEEXEDOLIWAMP.exe");
  984. print "Move $SOURCE/build/$FILENAMEEXEDOLIWAMP.exe to $NEWDESTI/$FILENAMEEXEDOLIWAMP.exe\n";
  985. $ret=`mv "$SOURCE/build/$FILENAMEEXEDOLIWAMP.exe" "$NEWDESTI/$FILENAMEEXEDOLIWAMP.exe"`;
  986. $ret=`rm "$SOURCE/build/exe/doliwamp/doliwamp.tmp.iss"`;
  987. next;
  988. }
  989. }
  990. # Publish package for each target
  991. #--------------------------------
  992. foreach my $target (sort keys %CHOOSEDPUBLISH)
  993. {
  994. if ($CHOOSEDPUBLISH{$target} < 0) { next; }
  995. print "\nList of files to publish (BUILD=$BUILD)\n";
  996. %filestoscansf=(
  997. "$DESTI/package_rpm_generic/$FILENAMERPM"=>'Dolibarr installer for Fedora-Redhat-Mandriva-Opensuse (DoliRpm)',
  998. "$DESTI/package_debian-ubuntu/${FILENAMEDEB}_all.deb"=>'Dolibarr installer for Debian-Ubuntu (DoliDeb)',
  999. "$DESTI/package_windows/$FILENAMEEXEDOLIWAMP.exe"=>'Dolibarr installer for Windows (DoliWamp)',
  1000. "$DESTI/standard/$FILENAMETGZ.tgz"=>'Dolibarr ERP-CRM',
  1001. "$DESTI/standard/$FILENAMETGZ.zip"=>'Dolibarr ERP-CRM'
  1002. );
  1003. %filestoscanstableasso=(
  1004. "$DESTI/package_rpm_generic/$FILENAMERPM"=>'package_rpm_generic',
  1005. "$DESTI/package_debian-ubuntu/${FILENAMEDEB}_all.deb"=>'package_debian-ubuntu',
  1006. "$DESTI/package_windows/$FILENAMEEXEDOLIWAMP.exe"=>'package_windows',
  1007. "$DESTI/standard/$FILENAMETGZ.tgz"=>'standard',
  1008. "$DESTI/standard/$FILENAMETGZ.zip"=>'standard'
  1009. );
  1010. if ($target eq 'ASSO' && $BUILD =~ /[a-z]/i) { # Not stable
  1011. %filestoscansf=(
  1012. "$DESTI/$FILENAMERPM"=>'Dolibarr installer for Fedora-Redhat-Mandriva-Opensuse (DoliRpm)',
  1013. "$DESTI/${FILENAMEDEB}_all.deb"=>'Dolibarr installer for Debian-Ubuntu (DoliDeb)',
  1014. "$DESTI/$FILENAMEEXEDOLIWAMP.exe"=>'Dolibarr installer for Windows (DoliWamp)',
  1015. "$DESTI/$FILENAMETGZ.tgz"=>'Dolibarr ERP-CRM',
  1016. "$DESTI/$FILENAMETGZ.zip"=>'Dolibarr ERP-CRM'
  1017. );
  1018. %filestoscanstableasso=(
  1019. "$DESTI/$FILENAMERPM"=>'',
  1020. "$DESTI/${FILENAMEDEB}_all.deb"=>'',
  1021. "$DESTI/$FILENAMEEXEDOLIWAMP.exe"=>'',
  1022. "$DESTI/$FILENAMETGZ.tgz"=>'',
  1023. "$DESTI/$FILENAMETGZ.zip"=>''
  1024. );
  1025. }
  1026. use POSIX qw/strftime/;
  1027. foreach my $file (sort keys %filestoscansf)
  1028. {
  1029. $found=0;
  1030. my $filesize = -s $file;
  1031. my $filedate = (stat $file)[9];
  1032. print $file." ".($filesize?"(found)":"(not found)");
  1033. print ($filesize?" - ".$filesize:"");
  1034. print ($filedate?" - ".strftime("%Y-%m-%d %H:%M:%S",localtime($filedate)):"");
  1035. print "\n";
  1036. }
  1037. if ($target eq 'SF' || $target eq 'ASSO')
  1038. {
  1039. print "\n";
  1040. if ($target eq 'SF') { $PUBLISH = $PUBLISHSTABLE; }
  1041. if ($target eq 'ASSO' && $BUILD =~ /[a-z]/i) { $PUBLISH = $PUBLISHBETARC.'/lastbuild'; }
  1042. if ($target eq 'ASSO' && $BUILD =~ /^[0-9]+$/) { $PUBLISH = $PUBLISHBETARC.'/stable'; }
  1043. $NEWPUBLISH=$PUBLISH;
  1044. print "Publish to target $NEWPUBLISH. Click enter or CTRL+C...\n";
  1045. # Ask which target to build
  1046. $NUM_SCRIPT=<STDIN>;
  1047. chomp($NUM_SCRIPT);
  1048. print "Create empty dir /tmp/emptydir. We need it to create target dir using rsync.\n";
  1049. $ret=`mkdir -p "/tmp/emptydir/"`;
  1050. %filestoscan=%filestoscansf;
  1051. foreach my $file (sort keys %filestoscan)
  1052. {
  1053. $found=0;
  1054. my $filesize = -s $file;
  1055. if (! $filesize) { next; }
  1056. print "\n";
  1057. if ($target eq 'SF') {
  1058. $destFolder="$NEWPUBLISH/$filestoscan{$file}/".$MAJOR.'.'.$MINOR.'.'.$BUILD;
  1059. }
  1060. elsif ($target eq 'ASSO' and $NEWPUBLISH =~ /stable/) {
  1061. $destFolder="$NEWPUBLISH/$filestoscanstableasso{$file}";
  1062. }
  1063. elsif ($target eq 'ASSO' and $NEWPUBLISH !~ /stable/) {
  1064. $destFolder="$NEWPUBLISH";
  1065. }
  1066. else # No more used
  1067. {
  1068. $dirnameonly=$file;
  1069. $dirnameonly =~ s/.*\/([^\/]+)\/[^\/]+$/$1/;
  1070. $filenameonly=$file;
  1071. $filenameonly =~ s/.*\/[^\/]+\/([^\/])+$/$1/;
  1072. $destFolder="$NEWPUBLISH/$dirnameonly";
  1073. }
  1074. print "Publish file ".$file." to ".$destFolder."\n";
  1075. # mkdir
  1076. #my $ssh = Net::SSH::Perl->new("frs.sourceforge.net");
  1077. #$ssh->login("$user","$pass");
  1078. #use String::ShellQuote qw( shell_quote );
  1079. #$ssh->cmd('mkdir '.shell_quote($destFolder).' && exit');
  1080. #use Net::SFTP::Foreign;
  1081. #my $sftp = Net::SFTP::Foreign->new($ip, user => $user, password => $pass, autodie => 1);
  1082. #$sftp->mkdir($destFolder)
  1083. #$command="ssh eldy,dolibarr\@frs.sourceforge.net mkdir -p \"$destFolder\"";
  1084. #print "$command\n";
  1085. #my $ret=`$command 2>&1`;
  1086. $command="rsync -s -e 'ssh' --recursive /tmp/emptydir/ \"".$destFolder."\"";
  1087. print "$command\n";
  1088. my $ret=`$command 2>&1`;
  1089. $command="rsync -s -e 'ssh' \"$file\" \"".$destFolder."\"";
  1090. print "$command\n";
  1091. my $ret2=`$command 2>&1`;
  1092. print "$ret2\n";
  1093. }
  1094. }
  1095. }
  1096. }
  1097. print "\n----- Summary -----\n";
  1098. foreach my $target (sort keys %CHOOSEDTARGET) {
  1099. if ($target eq '-CHKSUM') { print "Checksum was generated"; next; }
  1100. if ($CHOOSEDTARGET{$target} < 0) {
  1101. print "Package $target not built (bad requirement).\n";
  1102. } else {
  1103. print "Package $target built successfully in $DESTI\n";
  1104. }
  1105. }
  1106. if (! $batch) {
  1107. print "\nPress key to finish...";
  1108. my $WAITKEY=<STDIN>;
  1109. }
  1110. 0;