tags:

views:

311

answers:

3

If I put comments (# ...) in my Makefile, make gives me an error and quit. If I remove the comments, the makefile works fine.

Makefile:1: *** missing separator. Stop.
  • Make-version: 3.81
  • Linux: Ubuntu 9.04

The Makefile:

# Backup Makefile
#
# Create backups from various services and the system itself. This
# script is used to perform single backup tasks or a whole backup
# from the system. For more information about this file and how to
# use it, read the README file in the same directory.

BACKUP_ROOT = /srv/backup
ETC_PATH = /srv/config
SVN_PATH = /srv/svn/
TRAC_PATH = /srv/trac/sysinventory
PR10_PATH = /swsd/project/vmimages/...
PR10_MOUNT_PATH = /tmp/temp_sshfs_pr10

MYSQL_USER = "xxx"
MYSQL_PASSWORD = "xxx"


DATE = `date +%F`

help :
        cat README

init-environment :
        mkdir -p $(BACKUP_ROOT)
        mkdir $(BACKUP_ROOT)/tmp
        mkdir -p $(PR10_MOUNT_PATH)

backup : backup-mysql backup-configuration backup-svn backup-trac

upload-to-pr10 : mount-pr10
        tar cf $(DATE)-backup-blizzard.tar -C $(BACKUP_ROOT) *.-backup.tar.gz
        mv $(BACKUP_ROOT)/*-backup-blizzard.tar $(PR10_MOUNT_PATH)/
        umount $(PR10_MOUNT_PATH)

mount-pr10 :
        su xxx -d "sshfs -o allow_root xxx@xxx:$(PR10_PATH) $(PR10_MOUNT_PATH)"
        fusermount -u $(PR10_MOUNT_PATH)

backup-mysql :
        mysqldump --comments --user=$(MYSQL_USER) --password=$(MYSQL_PASSWORD) --all-databases --result-file=$(BACKUP_ROOT)/tmp/mysql_dump.sql
        tar czf $(BACKUP_ROOT)/$(DATE)-mysql-backup.tar.gz -C 
        $(BACKUP_ROOT)/tmp/mysql_dump.sql

backup-configuration :
        tar czf $(BACKUP_ROOT)/$(DATE)-configuration-backup.tar.gz $(ETC_PATH)/

backup-svn :
        svnadmin dump $(SVN_PATH)/repository > $(BACKUP_ROOT)/tmp/svn_repository.dump
        tar czf $(BACKUP_ROOT)/$(DATE)-subversion-backup.tar.gz -C $(BACKUP_ROOT)/tmp/svn_repository.dump

backup-trac :
        tar czf $(BACKUP_ROOT)/$(DATE)-trac-backup.tar.gz $(TRAC_PATH)/

clean :
        rm -f $(BACKUP_ROOT)/tmp/mysql_dump.sql
        rm -f $(BACKUP_ROOT)/tmp/svn_repository.dump
        rm -f $(BACKUP_ROOT)/*-backup.tar.gz
        rm -f $(BACKUP_ROOT)/*-backup-blizzard.tar

I found the problem. The file has had some invisible characters in it. This question can be deleted.

A: 

Does the line before end with \ ?

ur
No. It ends with an word.
Fu86
+1  A: 

You may have used spaces instead of tabs for your comment. Please post the makefile so we don't have to guess.

Kristof Provost
If that's the problem (quite likely), posting on the SO (or the internet in general) won't help too much. Who uses tabs on the internet?
Chris Lutz
No, there are no tabs in the comments.
Fu86
I misspoke. The tabs should be in your rules. I thought you'd have comments in your rules which had spaces in front of them instead of tabs. This doesn't seem to be the case (you have no comments in the rules).
Kristof Provost
+5  A: 

Your Makefile works for me (with spaces replaced by tabs), so it sounds like you have a case of stray non-printing chars.

Try inspecting the output of "cat -vet Makefile". That will show where EOL, TAB and other unseen chars are.

You'll want to see something like this:

# Backup Makefile$
#$
# Create backups from various services and the system itself. This$
# script is used to perform single backup tasks or a whole backup$
# from the system. For more information about this file and how to$
# use it, read the README file in the same directory.$
$
BACKUP_ROOT = /srv/backup$
ETC_PATH = /srv/config$
SVN_PATH = /srv/svn/$
TRAC_PATH = /srv/trac/sysinventory$
PR10_PATH = /swsd/project/vmimages/...$
PR10_MOUNT_PATH = /tmp/temp_sshfs_pr10$
$
MYSQL_USER = "xxx"$
MYSQL_PASSWORD = "xxx"$
$
$
DATE = `date +%F`$
$
help :$
^Icat README$
$
$
init-environment :$
^Imkdir -p $(BACKUP_ROOT)$
^Imkdir $(BACKUP_ROOT)/tmp$
^Imkdir -p $(PR10_MOUNT_PATH)$
$

Make sure all commands are preceeded by "^I".

You could also try to looking for stray chars using something like:

cat -vet Makefile | grep "\^[^I]" --colour=auto
lsc
Thanks! That was the solution!
Fu86