makepack-dolibarr.pl 58 KB

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