makepack-dolibarr.pl 56 KB

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