From 790c25497a9d7b9f1e12f1755a47fab80109ed6c Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@users.sourceforge.net>
Date: Wed, 22 Jun 2011 23:33:30 +0000
Subject: [PATCH] Enhance packagers

---
 build/makepack-dolibarrlang.pl       | 460 +++++++++++++--------------
 build/makepack-dolibarrtheme.pl      |   2 +-
 build/rpm/dolibarr.spec              | 167 +++++++---
 build/rpm/httpd-dolibarr.conf        |  13 +-
 build/rpm/install.forced.php.install |  17 +
 build/tgz/tar_exclude.txt            |   3 +-
 6 files changed, 380 insertions(+), 282 deletions(-)
 create mode 100755 build/rpm/install.forced.php.install

diff --git a/build/makepack-dolibarrlang.pl b/build/makepack-dolibarrlang.pl
index 6d9e3e4b9c2..06ece335d26 100644
--- a/build/makepack-dolibarrlang.pl
+++ b/build/makepack-dolibarrlang.pl
@@ -8,307 +8,297 @@
 
 use Cwd;
 
-$PROJECT="dolibarr";
-
-@LISTETARGET=("TGZ");   # Possible packages
-%REQUIREMENTTARGET=(    # Tool requirement for each package
-"TGZ"=>"tar",
-"ZIP"=>"7z",
-"RPM"=>"rpmbuild",
-"DEB"=>"dpkg-buildpackage",
-"EXE"=>"makensis.exe"
+$PROJECT = "dolibarr";
+
+@LISTETARGET       = ("TGZ");    # Possible packages
+%REQUIREMENTTARGET = (           # Tool requirement for each package
+	"TGZ" => "tar",
+	"ZIP" => "7z",
+	"EXE" => "makensis.exe"
 );
-%ALTERNATEPATH=(
-"7z"=>"7-ZIP",
-"makensis.exe"=>"NSIS"
+%ALTERNATEPATH = (
+	"7z"           => "7-ZIP",
+	"makensis.exe" => "NSIS"
 );
 
-
 use vars qw/ $REVISION $VERSION /;
-$REVISION='$Revision$'; $REVISION =~ /\s(.*)\s/; $REVISION=$1;
-$VERSION="1.0 (build $REVISION)";
-
-
+$REVISION = '$Revision$';
+$REVISION =~ /\s(.*)\s/;
+$REVISION = $1;
+$VERSION  = "1.0 (build $REVISION)";
 
 #------------------------------------------------------------------------------
 # MAIN
 #------------------------------------------------------------------------------
-($DIR=$0) =~ s/([^\/\\]+)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1;
-$DIR||='.'; $DIR =~ s/([^\/\\])[\\\/]+$/$1/;
+( $DIR  = $0 ) =~ s/([^\/\\]+)$//;
+( $PROG = $1 ) =~ s/\.([^\.]*)$//;
+$Extension = $1;
+$DIR ||= '.';
+$DIR =~ s/([^\/\\])[\\\/]+$/$1/;
 
 # Detect OS type
 # --------------
-if ("$^O" =~ /linux/i || (-d "/etc" && -d "/var" && "$^O" !~ /cygwin/i)) { $OS='linux'; $CR=''; }
-elsif (-d "/etc" && -d "/Users") { $OS='macosx'; $CR=''; }
-elsif ("$^O" =~ /cygwin/i || "$^O" =~ /win32/i) { $OS='windows'; $CR="\r"; }
-if (! $OS) {
-    print "makepack-dolbarrlang.pl was not able to detect your OS.\n";
+if ( "$^O" =~ /linux/i || ( -d "/etc" && -d "/var" && "$^O" !~ /cygwin/i ) ) {
+	$OS = 'linux';
+	$CR = '';
+}
+elsif ( -d "/etc" && -d "/Users" ) { $OS = 'macosx'; $CR = ''; }
+elsif ( "$^O" =~ /cygwin/i || "$^O" =~ /win32/i ) {
+	$OS = 'windows';
+	$CR = "\r";
+}
+if ( !$OS ) {
+	print "makepack-dolbarrlang.pl was not able to detect your OS.\n";
 	print "Can't continue.\n";
 	print "makepack-dolibarrlang.pl aborted.\n";
-    sleep 2;
+	sleep 2;
 	exit 1;
 }
 
 # Define buildroot
 # ----------------
-if ($OS =~ /linux/) {
-    $TEMP=$ENV{"TEMP"}||$ENV{"TMP"}||"/tmp";
+if ( $OS =~ /linux/ ) {
+	$TEMP = $ENV{"TEMP"} || $ENV{"TMP"} || "/tmp";
 }
-if ($OS =~ /macos/) {
-    $TEMP=$ENV{"TEMP"}||$ENV{"TMP"}||"/tmp";
+if ( $OS =~ /macos/ ) {
+	$TEMP = $ENV{"TEMP"} || $ENV{"TMP"} || "/tmp";
 }
-if ($OS =~ /windows/) {
-    $TEMP=$ENV{"TEMP"}||$ENV{"TMP"}||"c:/temp";
-    $PROGPATH=$ENV{"ProgramFiles"};
+if ( $OS =~ /windows/ ) {
+	$TEMP = $ENV{"TEMP"} || $ENV{"TMP"} || "c:/temp";
+	$PROGPATH = $ENV{"ProgramFiles"};
 }
-if (! $TEMP || ! -d $TEMP) {
-    print "Error: A temporary directory can not be find.\n";
-    print "Check that TEMP or TMP environment variable is set correctly.\n";
+if ( !$TEMP || !-d $TEMP ) {
+	print "Error: A temporary directory can not be find.\n";
+	print "Check that TEMP or TMP environment variable is set correctly.\n";
 	print "makepack-dolibarrlang.pl aborted.\n";
-    sleep 2;
-    exit 2;
-} 
-$BUILDROOT="$TEMP/dolibarr-buildroot";
-
+	sleep 2;
+	exit 2;
+}
+$BUILDROOT = "$TEMP/dolibarr-buildroot";
 
-my $copyalreadydone=0;
-my $batch=0;
+my $copyalreadydone = 0;
+my $batch           = 0;
 
 print "Makepack langs version $VERSION\n";
 print "Enter language code to package (en_US, fr_FR, ...) : ";
-$PROJECT=<STDIN>;
+$PROJECT = <STDIN>;
 chomp($PROJECT);
+
 # TODO Autodetect version
 # Ask and set version $MAJOR and $MINOR
 print "Enter value for version: ";
-$PROJVERSION=<STDIN>;
+$PROJVERSION = <STDIN>;
 chomp($PROJVERSION);
-($MAJOR,$MINOR)=split(/\./,$PROJVERSION,2);
-if ($MINOR eq '')
-{
+( $MAJOR, $MINOR ) = split( /\./, $PROJVERSION, 2 );
+if ( $MINOR eq '' ) {
 	print "Enter value for minor version: ";
-	$MINOR=<STDIN>;
+	$MINOR = <STDIN>;
 	chomp($MINOR);
 }
 
+$FILENAME    = "$PROJECT";
+$FILENAMETGZ = "lang_$PROJECT-$MAJOR.$MINOR";
+if ( -d "/usr/src/redhat" ) {
 
-$FILENAME="$PROJECT";
-$FILENAMETGZ="lang_$PROJECT-$MAJOR.$MINOR";
-if (-d "/usr/src/redhat") {
-    # redhat
-    $RPMDIR="/usr/src/redhat";
-}
-if (-d "/usr/src/RPM") {
-    # mandrake
-    $RPMDIR="/usr/src/RPM";
+	# redhat
+	$RPMDIR = "/usr/src/redhat";
 }
+if ( -d "/usr/src/RPM" ) {
 
-$SOURCE="$DIR/../../dolibarr";
-$DESTI="$SOURCE/build";
+	# mandrake
+	$RPMDIR = "/usr/src/RPM";
+}
 
+$SOURCE = "$DIR/../../dolibarr";
+$DESTI  = "$SOURCE/build";
 
 # Choose package targets
 #-----------------------
-$target="TGZ";    # Les langs sont au format tgz
+$target = "ZIP";    # Les langs sont au format zip
 if ($target) {
-    $CHOOSEDTARGET{uc($target)}=1;
+	$CHOOSEDTARGET{ uc($target) } = 1;
 }
 else {
-    my $found=0;
-    my $NUM_SCRIPT;
-    while (! $found) {
-    	my $cpt=0;
-    	printf(" %d - %3s    (%s)\n",$cpt,"All","Need ".join(",",values %REQUIREMENTTARGET));
-    	foreach my $target (@LISTETARGET) {
-    		$cpt++;
-    		printf(" %d - %3s    (%s)\n",$cpt,$target,"Need ".$REQUIREMENTTARGET{$target});
-    	}
-    
-    	# Are asked to select the file to move
-    	print "Choose one package number or several separated with space: ";
-    	$NUM_SCRIPT=<STDIN>; 
-    	chomp($NUM_SCRIPT);
-    	if ($NUM_SCRIPT =~ s/-//g) {
-    		# Do not do copy	
-    		$copyalreadydone=1;
-    	}
-    	if ($NUM_SCRIPT !~ /^[0-$cpt\s]+$/)
-    	{
-    		print "This is not a valid package number list.\n";
-    		$found = 0;
-    	}
-    	else
-    	{
-    		$found = 1;
-    	}
-    }
-    print "\n";
-    if ($NUM_SCRIPT) {
-    	foreach my $num (split(/\s+/,$NUM_SCRIPT)) {
-    		$CHOOSEDTARGET{$LISTETARGET[$num-1]}=1;
-    	}
-    }
-    else {
-    	foreach my $key (@LISTETARGET) {
-    	    $CHOOSEDTARGET{$key}=1;
-        }
-    }
+	my $found = 0;
+	my $NUM_SCRIPT;
+	while ( !$found ) {
+		my $cpt = 0;
+		printf( " %d - %3s    (%s)\n",
+			$cpt, "All", "Need " . join( ",", values %REQUIREMENTTARGET ) );
+		foreach my $target (@LISTETARGET) {
+			$cpt++;
+			printf( " %d - %3s    (%s)\n",
+				$cpt, $target, "Need " . $REQUIREMENTTARGET{$target} );
+		}
+
+		# Are asked to select the file to move
+		print "Choose one package number or several separated with space: ";
+		$NUM_SCRIPT = <STDIN>;
+		chomp($NUM_SCRIPT);
+		if ( $NUM_SCRIPT =~ s/-//g ) {
+
+			# Do not do copy
+			$copyalreadydone = 1;
+		}
+		if ( $NUM_SCRIPT !~ /^[0-$cpt\s]+$/ ) {
+			print "This is not a valid package number list.\n";
+			$found = 0;
+		}
+		else {
+			$found = 1;
+		}
+	}
+	print "\n";
+	if ($NUM_SCRIPT) {
+		foreach my $num ( split( /\s+/, $NUM_SCRIPT ) ) {
+			$CHOOSEDTARGET{ $LISTETARGET[ $num - 1 ] } = 1;
+		}
+	}
+	else {
+		foreach my $key (@LISTETARGET) {
+			$CHOOSEDTARGET{$key} = 1;
+		}
+	}
 }
 
 # Test if requirement is ok
 #--------------------------
-foreach my $target (keys %CHOOSEDTARGET) {
-    foreach my $req (split(/[,\s]/,$REQUIREMENTTARGET{$target})) {
-        # Test    
-        print "Test requirement for target $target: Search '$req'... ";
-        $ret=`"$req" 2>&1`;
-        $coderetour=$?; $coderetour2=$coderetour>>8;
-        if ($coderetour != 0 && (($coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i) || ($coderetour2 == 127 && $OS !~ /windows/)) && $PROGPATH) { 
-            # Not found error, we try in PROGPATH
-            $ret=`"$PROGPATH/$ALTERNATEPATH{$req}/$req\" 2>&1`;
-            $coderetour=$?; $coderetour2=$coderetour>>8;
-            $REQUIREMENTTARGET{$target}="$PROGPATH/$ALTERNATEPATH{$req}/$req";
-        }    
-
-        if ($coderetour != 0 && (($coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i) || ($coderetour2 == 127 && $OS !~ /windows/))) {
-            # Not found error
-            print "Not found\nCan't build target $target. Requirement '$req' not found in PATH\n";
-            $CHOOSEDTARGET{$target}=-1;
-            last;
-        } else {
-            # Pas erreur ou erreur autre que programme absent
-            print " Found ".$REQUIREMENTTARGET{$target}."\n";
-        }
-    }
+foreach my $target ( keys %CHOOSEDTARGET ) {
+	foreach my $req ( split( /[,\s]/, $REQUIREMENTTARGET{$target} ) ) {
+
+		# Test
+		print "Test requirement for target $target: Search '$req'... ";
+		$ret         = `"$req" 2>&1`;
+		$coderetour  = $?;
+		$coderetour2 = $coderetour >> 8;
+		if (
+			$coderetour != 0
+			&& (   ( $coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i )
+				|| ( $coderetour2 == 127 && $OS !~ /windows/ ) )
+			&& $PROGPATH
+		  )
+		{
+
+			# Not found error, we try in PROGPATH
+			$ret         = `"$PROGPATH/$ALTERNATEPATH{$req}/$req\" 2>&1`;
+			$coderetour  = $?;
+			$coderetour2 = $coderetour >> 8;
+			$REQUIREMENTTARGET{$target} = "$PROGPATH/$ALTERNATEPATH{$req}/$req";
+		}
+
+		if (
+			$coderetour != 0
+			&& (   ( $coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i )
+				|| ( $coderetour2 == 127 && $OS !~ /windows/ ) )
+		  )
+		{
+
+			# Not found error
+			print
+"Not found\nCan't build target $target. Requirement '$req' not found in PATH\n";
+			$CHOOSEDTARGET{$target} = -1;
+			last;
+		}
+		else {
+
+			# Pas erreur ou erreur autre que programme absent
+			print " Found " . $REQUIREMENTTARGET{$target} . "\n";
+		}
+	}
 }
 
 print "\n";
 
 # Check if there is at least on target to build
 #----------------------------------------------
-$nboftargetok=0;
-foreach my $target (keys %CHOOSEDTARGET) {
-    if ($CHOOSEDTARGET{$target} < 0) { next; }
-    $nboftargetok++;
+$nboftargetok = 0;
+foreach my $target ( keys %CHOOSEDTARGET ) {
+	if ( $CHOOSEDTARGET{$target} < 0 ) { next; }
+	$nboftargetok++;
 }
 
 if ($nboftargetok) {
 
-    # Update buildroot
-    #-----------------
-    if (! $copyalreadydone) {
-    	print "Delete directory $BUILDROOT\n";
-    	$ret=`rm -fr "$BUILDROOT"`;
-    	mkdir "$BUILDROOT";
-    	mkdir "$BUILDROOT/htdocs";
-    	mkdir "$BUILDROOT/htdocs/langs";
-    	mkdir "$BUILDROOT/htdocs/langs/$PROJECT";
-
-    	print "Copy $SOURCE into $BUILDROOT\n";
-    	mkdir "$BUILDROOT";
-    	$ret=`cp -pr "$SOURCE/htdocs/langs/$PROJECT" "$BUILDROOT/htdocs/langs"`;
-    }
-    print "Clean $BUILDROOT\n";
-    $ret=`rm -fr $BUILDROOT/htdocs/langs/$PROJECT/Thumbs.db $BUILDROOT/htdocs/langs/$PROJECT/*/Thumbs.db $BUILDROOT/htdocs/langs/$PROJECT/*/*/Thumbs.db $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/Thumbs.db`;
-    $ret=`rm -fr $BUILDROOT/htdocs/langs/$PROJECT/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/*/*/CVS*`;
-    
-    
-    # Build package for each target
-    #------------------------------
-    foreach my $target (keys %CHOOSEDTARGET) {
-        if ($CHOOSEDTARGET{$target} < 0) { next; }
-    
-        print "\nBuild package for target $target\n";
-        
-    	if ($target eq 'TGZ') {
-    		unlink $FILENAMETGZ.tgz;
-#    		unlink $BUILDROOT/$FILENAMETGZ.tgz;
-    		print "Compress $BUILDROOT/htdocs into $FILENAMETGZ.tgz...\n";
-   		    $cmd="tar --exclude-vcs --exclude-from \"$DESTI/tgz/tar.exclude\" --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$FILENAMETGZ.tgz\" htdocs";
-   		    $ret=`$cmd`;
+	# Update buildroot
+	#-----------------
+	if ( !$copyalreadydone ) {
+		print "Delete directory $BUILDROOT\n";
+		$ret = `rm -fr "$BUILDROOT"`;
+		mkdir "$BUILDROOT";
+		mkdir "$BUILDROOT/htdocs";
+		mkdir "$BUILDROOT/htdocs/langs";
+		mkdir "$BUILDROOT/htdocs/langs/$PROJECT";
+
+		print "Copy $SOURCE into $BUILDROOT\n";
+		mkdir "$BUILDROOT";
+		$ret =
+		  `cp -pr "$SOURCE/htdocs/langs/$PROJECT" "$BUILDROOT/htdocs/langs"`;
+	}
+	print "Clean $BUILDROOT\n";
+	$ret =
+`rm -fr $BUILDROOT/htdocs/langs/$PROJECT/Thumbs.db $BUILDROOT/htdocs/langs/$PROJECT/*/Thumbs.db $BUILDROOT/htdocs/langs/$PROJECT/*/*/Thumbs.db $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/Thumbs.db`;
+	$ret =
+`rm -fr $BUILDROOT/htdocs/langs/$PROJECT/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/*/*/CVS*`;
+
+	# Build package for each target
+	#------------------------------
+	foreach my $target ( keys %CHOOSEDTARGET ) 
+	{
+		if ( $CHOOSEDTARGET{$target} < 0 ) { next; }
+
+		print "\nBuild package for target $target\n";
+
+		if ( $target eq 'TGZ' ) 
+		{
+			unlink $FILENAMETGZ . tgz;
+
+			#    		unlink $BUILDROOT/$FILENAMETGZ.tgz;
+			print "Compress $BUILDROOT/htdocs into $FILENAMETGZ.tgz...\n";
+			$cmd =
+"tar --exclude-vcs --exclude-from \"$DESTI/tgz/tar.exclude\" --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$FILENAMETGZ.tgz\" htdocs";
+			$ret = `$cmd`;
+
 #        	$cmd="tar --exclude-vcs --exclude-from \"$DESTI/tgz/tar.exclude\" --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$BUILDROOT/$FILENAMETGZ.tgz\" htdocs\n";
 #        	$ret=`$cmd`;
-            if ($OS =~ /windows/i) {
-        		print "Move $FILENAMETGZ.tgz to $DESTI/$FILENAMETGZ.tgz\n";
-        		$ret=`mv "$FILENAMETGZ.tgz" "$DESTI/$FILENAMETGZ.tgz"`;
-#        		$ret=`mv "$BUILDROOT/$FILENAMETGZ.tgz" "$DESTI/$FILENAMETGZ.tgz"`;
-            }
-    		next;
-    	}
-
-    	if ($target eq 'ZIP') {
-    		unlink $FILENAMEZIP.zip;
-    		print "Compress $FILENAMETGZ into $FILENAMEZIP.zip...\n";
-     		chdir("$BUILDROOT");
-            #print "cd $BUILDROOTNT & 7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMETGZ\\*.*\n";
-            #$ret=`cd $BUILDROOTNT & 7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMETGZ\\*.*`;
-    		$ret=`7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMETGZ\\*.*`;
-		print "Move $FILENAMEZIP.zip to $DESTI\n";
-    		rename("$BUILDROOT/$FILENAMEZIP.zip","$DESTI/$FILENAMEZIP.zip");
-    		next;
-    	}
-    
-    	if ($target eq 'RPM') {                 # Linux only
-    		$BUILDFIC="$FILENAME.spec";
-    		unlink $FILENAMETGZ.tgz;
-    		print "Compress $FILENAMETGZ into $FILENAMETGZ.tgz...\n";
-    		$ret=`tar --exclude-from "$SOURCE/build/tgz/tar.exclude" --directory "$BUILDROOT" -czvf "$BUILDROOT/$FILENAMETGZ.tgz" $FILENAMETGZ`;
-
-    		print "Move $FILENAMETGZ.tgz to $RPMDIR/SOURCES/$FILENAMETGZ.tgz\n";
-    		$cmd="mv \"$BUILDROOT/$FILENAMETGZ.tgz\" \"$RPMDIR/SOURCES/$FILENAMETGZ.tgz\"";
-            $ret=`$cmd`;
-
-    		print "Copy $SOURCE/make/rpm/${BUILDFIC} to $BUILDROOT\n";
-#    		$ret=`cp -p "$SOURCE/make/rpm/${BUILDFIC}" "$BUILDROOT"`;
-            open (SPECFROM,"<$SOURCE/make/rpm/${BUILDFIC}") || die "Error";
-            open (SPECTO,">$BUILDROOT/$BUILDFIC") || die "Error";
-            while (<SPECFROM>) {
-                $_ =~ s/__VERSION__/$MAJOR.$MINOR.$BUILD/;
-                print SPECTO $_;
-            }
-            close SPECFROM;
-            close SPECTO;
-    
-    		print "Launch RPM build (rpm --clean -ba $BUILDROOT/${BUILDFIC})\n";
-    		$ret=`rpm --clean -ba $BUILDROOT/${BUILDFIC}`;
-    	
-   		    print "Move $RPMDIR/RPMS/noarch/${FILENAMERPM}.noarch.rpm into $DESTI/${FILENAMERPM}.noarch.rpm\n";
-   		    $cmd="mv \"$RPMDIR/RPMS/noarch/${FILENAMERPM}.noarch.rpm\" \"$DESTI/${FILENAMERPM}.noarch.rpm\"";
-    		$ret=`$cmd`;
-    		next;
-    	}
-    	
-    	if ($target eq 'DEB') {
-            print "Automatic build for DEB is not yet supported.\n";
-        }
-        
-    	if ($target eq 'EXE') {
-    		unlink "$FILENAMEEXE.exe";
-    		print "Compress into $FILENAMEEXE.exe by $FILENAMEEXE.nsi...\n";
-    		$command="\"$REQUIREMENTTARGET{$target}\" /DMUI_VERSION_DOT=$MAJOR.$MINOR.$BUILD /X\"SetCompressor bzip2\" \"$SOURCE\\build\\exe\\$FILENAME.nsi\"";
-            print "$command\n";
-    		$ret=`$command`;
-    		print "Move $FILENAMEEXE.exe to $DESTI\n";
-    		rename("$SOURCE\\build\\exe\\$FILENAMEEXE.exe","$DESTI/$FILENAMEEXE.exe");
-    		next;
-    	}
-    
-    }
-
+			if ( $OS =~ /windows/i ) {
+				print "Move $FILENAMETGZ.tgz to $DESTI/$FILENAMETGZ.tgz\n";
+				$ret = `mv "$FILENAMETGZ.tgz" "$DESTI/$FILENAMETGZ.tgz"`;
+
+   #        		$ret=`mv "$BUILDROOT/$FILENAMETGZ.tgz" "$DESTI/$FILENAMETGZ.tgz"`;
+			}
+			next;
+		}
+
+		if ( $target eq 'ZIP' ) 
+		{
+			unlink $FILENAMEZIP . zip;
+			print "Compress $FILENAMETGZ into $FILENAMEZIP.zip...\n";
+			chdir("$BUILDROOT");
+
+#print "cd $BUILDROOTNT & 7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMETGZ\\*.*\n";
+#$ret=`cd $BUILDROOTNT & 7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMETGZ\\*.*`;
+			$ret =
+			  `7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMETGZ\\*.*`;
+			print "Move $FILENAMEZIP.zip to $DESTI\n";
+			rename( "$BUILDROOT/$FILENAMEZIP.zip", "$DESTI/$FILENAMEZIP.zip" );
+			next;
+		}
+	}
 }
 
 print "\n----- Summary -----\n";
-foreach my $target (keys %CHOOSEDTARGET) {
-    if ($CHOOSEDTARGET{$target} < 0) {
-        print "Package $target not built (bad requirement).\n";
-    } else {
-        print "Package $target built succeessfully in $DESTI\n";
-    }
+foreach my $target ( keys %CHOOSEDTARGET ) {
+	if ( $CHOOSEDTARGET{$target} < 0 ) {
+		print "Package $target not built (bad requirement).\n";
+	}
+	else {
+		print "Package $target built succeessfully in $DESTI\n";
+	}
 }
 
-if (! $btach) {
-    print "\nPress key to finish...";
-    my $WAITKEY=<STDIN>;
+if ( !$btach ) {
+	print "\nPress key to finish...";
+	my $WAITKEY = <STDIN>;
 }
 
 0;
diff --git a/build/makepack-dolibarrtheme.pl b/build/makepack-dolibarrtheme.pl
index 9d2cf83fe3e..6730f6f202b 100644
--- a/build/makepack-dolibarrtheme.pl
+++ b/build/makepack-dolibarrtheme.pl
@@ -109,7 +109,7 @@ $DESTI="$SOURCE/build";
 
 # Choose package targets
 #-----------------------
-$target="TGZ";    # Les themes sont au format tgz
+$target="ZIP";    # Packages uses this format
 if ($target) {
     $CHOOSEDTARGET{uc($target)}=1;
 }
diff --git a/build/rpm/dolibarr.spec b/build/rpm/dolibarr.spec
index 7f74cec6503..3ea9dee9c29 100644
--- a/build/rpm/dolibarr.spec
+++ b/build/rpm/dolibarr.spec
@@ -1,11 +1,13 @@
+#---------------------------------------------------------
+# Spec file to build a rpm file
+#
+# This is an example to build a rpm file. You can use this 
+# file to build a package for your own distributions and 
+# edit it if you need to match your rules.
+# --------------------------------------------------------
 %define name dolibarr
 %define version	__VERSION__
-# For Mandrake
-#%define release 1mdk
-# For all other distrib
 %define release __RELEASE__
-%define filenametgz __FILENAMETGZ__
-
 
 Name: %{name}
 Version: %{version}
@@ -29,7 +31,7 @@ Group: Networking/WWW
 # For all other distrib
 Group: Applications/Internet
 
-Requires=httpd
+Requires: mysql-server mysql httpd php php-cli php-gd php-ldap php-imap php-mysql 
 AutoReqProv: yes
 
 
@@ -58,19 +60,19 @@ echo Building %{name}-%{version}-%{release}
 %install
 rm -rf $RPM_BUILD_ROOT
 
-mkdir -p $RPM_BUILD_ROOT/usr/local/dolibarr/build
-mkdir -p $RPM_BUILD_ROOT/usr/local/dolibarr/doc
-mkdir -p $RPM_BUILD_ROOT/usr/local/dolibarr/htdocs
-mkdir -p $RPM_BUILD_ROOT/usr/local/dolibarr/scripts
+mkdir -p $RPM_BUILD_ROOT/var/www/dolibarr/build
+mkdir -p $RPM_BUILD_ROOT/var/www/dolibarr/doc
+mkdir -p $RPM_BUILD_ROOT/var/www/dolibarr/htdocs
+mkdir -p $RPM_BUILD_ROOT/var/www/dolibarr/scripts
 #mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/dolibarr
 #mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/cron.daily
 
-install -m 444 README  $RPM_BUILD_ROOT/usr/local/dolibarr/README
-install -m 444 COPYRIGHT  $RPM_BUILD_ROOT/usr/local/dolibarr/COPYRIGHT
-cp -pr build $RPM_BUILD_ROOT/usr/local/dolibarr
-cp -pr doc $RPM_BUILD_ROOT/usr/local/dolibarr
-cp -pr htdocs $RPM_BUILD_ROOT/usr/local/dolibarr
-cp -pr scripts $RPM_BUILD_ROOT/usr/local/dolibarr
+install -m 444 README  $RPM_BUILD_ROOT/var/www/dolibarr/README
+install -m 444 COPYRIGHT  $RPM_BUILD_ROOT/var/www/dolibarr/COPYRIGHT
+cp -pr build $RPM_BUILD_ROOT/var/www/dolibarr
+cp -pr doc $RPM_BUILD_ROOT/var/www/dolibarr
+cp -pr htdocs $RPM_BUILD_ROOT/var/www/dolibarr
+cp -pr scripts $RPM_BUILD_ROOT/var/www/dolibarr
 
 
 #---- clean
@@ -83,39 +85,126 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(-,root,root)
 %doc README
 %doc COPYRIGHT
-%doc /usr/local/dolibarr/doc/*
-#%config /usr/local/dolibarr/htdocs/conf/conf.php
-%dir /usr/local/dolibarr/build
-%dir /usr/local/dolibarr/htdocs
-%dir /usr/local/dolibarr/scripts
-/usr/local/dolibarr/build/*
-/usr/local/dolibarr/htdocs/*
-/usr/local/dolibarr/scripts/*
-/usr/local/dolibarr/README
-/usr/local/dolibarr/COPYRIGHT
-
-#---- post
+%doc /var/www/dolibarr/doc/*
+%dir /var/www/dolibarr/build
+%dir /var/www/dolibarr/htdocs
+%dir /var/www/dolibarr/scripts
+/var/www/dolibarr/build/*
+/var/www/dolibarr/htdocs/*
+/var/www/dolibarr/scripts/*
+/var/www/dolibarr/README
+/var/www/dolibarr/COPYRIGHT
+#%config /var/www/dolibarr/htdocs/conf/conf.php
+
+#---- post (after install)
 %post
 
-# Create a config file
-if [ 1 -eq 1 ]; then
-  if [ ! -f /%{_sysconfdir}/httpd/conf.d/dolibarr.conf ]; then
-  	 echo Create dolibarr web server config file
-     cp /usr/local/dolibarr/httpd-dolibarr.conf /%{_sysconfdir}/httpd/conf.d/dolibarr.conf
-  fi
+# Dolibarr files are stored into /var/www
+export targetdir='/var/www/dolibarr'
+# Dolibarr uploaded files and generated documents are stored into /usr/share/dolibarr/documents 
+export docdir='/usr/share/dolibarr/documents'
+
+
+# Create empty directory for uploaded files and generated documents 
+echo Create document directory $docdir
+mkdir -p $docdir
+
+# Create install.forced.php into Dolibarr install directory
+fileorig="$targetdir/build/rpm/install.forced.php.install"
+config="$targetdir/htdocs/install/install.forced.php"
+superuserlogin=''
+superuserpassword=''
+if [ -f %{_sysconfdir}/mysql/debian.cnf ] ; then
+    # Load superuser login and pass
+    superuserlogin=$(/bin/grep --max-count=1 "user" %{_sysconfdir}/mysql/debian.cnf | /bin/sed -e 's/^user[ =]*//g')
+    superuserpassword=$(/bin/grep --max-count=1 "password" %{_sysconfdir}/mysql/debian.cnf | /bin/sed -e 's/^password[ =]*//g')
+fi
+echo Mysql superuser found to use is $superuserlogin
+if [ -z "$superuserlogin" ] ; then
+    cat $fileorig | sed -e 's/__SUPERUSERLOGIN__/root/g' | sed -e 's/__SUPERUSERPASSWORD__//g' > $config
+else
+    cat $fileorig | sed -e 's/__SUPERUSERLOGIN__/'$superuserlogin'/g' | sed -e 's/__SUPERUSERPASSWORD__/'$superuserpassword'/g' > $config
+fi
+
+# Create a config file %{_sysconfdir}/dolibarr/apache.conf
+if [ ! -f %{_sysconfdir}/dolibarr/apache.conf ]; then
+  	 echo Create dolibarr web server config file %{_sysconfdir}/dolibarr/apache.conf
+     mkdir -p %{_sysconfdir}/dolibarr
+     cp $targetdir/build/rpm/httpd-dolibarr.conf %{_sysconfdir}/dolibarr/apache.conf
+     chmod a-x %{_sysconfdir}/dolibarr/apache.conf
+     chmod go-w %{_sysconfdir}/dolibarr/apache.conf
+fi
+
+# Create a config link %{_sysconfdir}/httpd/conf.d/dolibarr.conf
+if [ ! -f %{_sysconfdir}/httpd/conf.d/dolibarr.conf ]; then
+     echo Create dolibarr web server config link %{_sysconfdir}/httpd/conf.d/dolibarr.conf
+     ln -fs /etc/dolibarr/apache.conf %{_sysconfdir}/httpd/conf.d/dolibarr.conf
+fi
+
+# Set permissions
+echo Set permission on $targetdir
+chown -R apache.apache $targetdir
+chmod -R a-w $targetdir
+
+echo Set permission on $docdir
+chown -R apache.apache $docdir
+chmod -R o-w $docdir
+
+if [ -s /usr/bin/chcon ]; then
+    echo Set SELinux permissions 
+    chcon -R -h -t httpd_sys_content_t $targetdir
+    chcon -R -h -t httpd_sys_content_t $docdir
+    chcon -R -h -t httpd_sys_script_rw_t $targetdir
+    chcon -R -h -t httpd_sys_script_rw_t $docdir
+    chcon -R -h -t httpd_sys_script_exec_t $targetdir
+fi
+
+# Create empty conf.php file for web installer
+if [ ! -s $targetdir/htdocs/conf/conf.php ]; then
+    echo Create empty Dolibarr conf.php file
+    touch $targetdir/htdocs/conf/conf.php
+    chown apache.apache $targetdir/htdocs/conf/conf.php
+    chmod ug+rw $targetdir/htdocs/conf/conf.php
 fi
-# /%{_sysconfdir}/dolibarr/dolibarr.`hostname`.conf || :
 
 # Restart web server
 echo Restart web server
-echo TODO
+if [ -f %{_sysconfdir}/init.d/httpd ]; then
+    %{_sysconfdir}/init.d/httpd restart
+fi
 
 # Show result
 echo
-echo ----- Dolibarr %version - Dolibarr dev team -----
-echo Dolibarr files have been installed in /usr/local/dolibarr
+echo "----- Dolibarr %version - (c) Dolibarr dev team -----"
+echo "Dolibarr files are now installed (into /var/www/dolibarr)."
+echo To finish installation and use Dolibarr, call the following
+echo page from your web browser:  
+echo http://localhost/dolibarr/
 echo
 
 
-%changelog
 
+#---- postun (after uninstall)
+%postun
+
+export conffile="%{_sysconfdir}/httpd/conf.d/dolibarr.conf"
+if [ -f $conffile ] ;
+then
+    echo Delete apache config file for Dolibarr
+    rm -f $conffile
+    status=purge
+fi
+
+if [ "x$status" = "xpurge" ] ;
+then
+    # Restart web server
+    echo Restart web server
+    if [ -f %{_sysconfdir}/init.d/httpd ]; then
+        %{_sysconfdir}/init.d/httpd restart
+    fi
+fi
+
+rm -rf /etc/dolibarr
+
+
+%changelog
diff --git a/build/rpm/httpd-dolibarr.conf b/build/rpm/httpd-dolibarr.conf
index 63cc47083ac..38af8c4839e 100644
--- a/build/rpm/httpd-dolibarr.conf
+++ b/build/rpm/httpd-dolibarr.conf
@@ -1,6 +1,6 @@
-Alias /dolibarr /usr/share/dolibarr
+Alias /dolibarr /var/www/dolibarr/htdocs
 
-<DirectoryMatch /usr/share/dolibarr/>
+<DirectoryMatch /var/www/dolibarr/>
   Options +FollowSymLinks +Indexes
 
   ErrorDocument 401 /public/error-401.html
@@ -8,19 +8,20 @@ Alias /dolibarr /usr/share/dolibarr
 
   <IfModule mod_php4.c>
     php_flag magic_quotes_gpc Off
-    php_flag track_vars On
-    php_flag register_globals On
+  </IfModule>
+  <IfModule mod_php5.c>
+    php_flag magic_quotes_gpc Off
   </IfModule>
 
 </DirectoryMatch>
 
-<DirectoryMatch /usr/share/dolibarr/public/>
+<DirectoryMatch /var/www/dolibarr/public/>
     AllowOverride All
     Order deny,allow
     Allow from all
 </DirectoryMatch>
 
-<DirectoryMatch /usr/share/dolibarr/theme/>
+<DirectoryMatch /var/www/dolibarr/theme/>
     AllowOverride All
     Order deny,allow
     Allow from all
diff --git a/build/rpm/install.forced.php.install b/build/rpm/install.forced.php.install
new file mode 100755
index 00000000000..d5480a2a848
--- /dev/null
+++ b/build/rpm/install.forced.php.install
@@ -0,0 +1,17 @@
+<?php
+$force_install_noedit=1;
+$force_install_message='KeepDefaultValuesDeb';
+$force_install_main_data_root='/usr/share/dolibarr/documents';
+$force_install_type='mysqli';
+$force_install_port='3306';
+$force_install_database='dolibarr';
+$force_install_createdatabase='1';
+$force_install_databaselogin='dolibarrmysql';
+$force_install_databasepass='';
+$force_install_createuser='1';
+$force_install_databaserootlogin='__SUPERUSERLOGIN__';
+$force_install_databaserootpass='__SUPERUSERPASSWORD__';
+$force_install_dolibarrlogin='admin';
+$force_install_nophpinfo='1';
+$force_install_lockinstall='444';
+?>
\ No newline at end of file
diff --git a/build/tgz/tar_exclude.txt b/build/tgz/tar_exclude.txt
index 7df8a47116c..12ba7ebbf39 100644
--- a/build/tgz/tar_exclude.txt
+++ b/build/tgz/tar_exclude.txt
@@ -1,4 +1,5 @@
-build
+build/exe
+build/html
 dev/dbmodel
 dev/fpdf
 dev/initdemo
-- 
GitLab