openSUSE Forums > Applications » What is causing "No rule to make target `modules'. Stop"?

Go Back   openSUSE Forums > Applications
Forums FAQ Members List Search Today's Posts Mark Forums Read

Applications Questions about desktops (KDE, Gnome, XFCE, etc.), software applications (configuration, usage, bugs, documentation)

Reply
Page 1 of 2 1 2
 
LinkBack Thread Tools Display Modes
  #1 (permalink)  
Old 04-Jul-2009, 18:15
XEyedBear's Avatar
Busy Penguin
 
Join Date: Jun 2008
Location: UK; deep south, far below Watford.
Posts: 279
XEyedBear hasn't been rated much yet
Default What is causing "No rule to make target `modules'. Stop"?

I submitted this problem to this forum earlier last week but it elicited no response in a forum environment where reaction to forum posts is outstandingly quick. I guess it was perhaps the thread Title which was off-putting as well as misleading, so I am submitting the problem again (please!) with a more relevant title.

I am trying to compile and install the driver which supports older Philips Web Cam (which my Logitech Quick Cam 3000 Pro needs). I am following the instructions that are part of the PWC package from Luc Saillard. The 'make' step fails and I cannot understand why this script is accessing the directories that it is.

I believe the kernel source is in /lib/modules/2.6.27.23-0.1-pae

But the make script seems to be accessing /usr/src/linux-2.6.27.23-0.1-obj/i386/pae which contains only the file Module.symvers (which I am guessing contains the headers for the kernel source ?)

The output from make says:

make -C /lib/modules/2.6.27.23-0.1-pae/build SUBDIRS=/home/tony/install_temp/pwc-10.0.11 modules
make[1]: Entering directory `/usr/src/linux-2.6.27.23-0.1-obj/i386/pae'
make[1]: *** No rule to make target `modules'. Stop.
make[1]: Leaving directory `/usr/src/linux-2.6.27.23-0.1-obj/i386/pae'
make: *** [all] Error 2


Can somebody please advise me what is causing this error to be invoked adn, by implication, what changes to the make script are required?


I have Googled the error message from make and followed the many 'hits' that are presented from this unique error text. None of the advice given fixes the problem. I am unable to progress beyond this point.
__________________
__________________
They said I wasn't fit to live with a pig; my brother stood up for me and said I was.
Reply With Quote
  #2 (permalink)  
Old 04-Jul-2009, 19:07
microchip8's Avatar
Shaman Penguin
 
Join Date: Jun 2008
Location: /dev/belgium
Posts: 2,555
microchip8 has great reputationmicrochip8 has great reputationmicrochip8 has great reputationmicrochip8 has great reputationmicrochip8 has great reputationmicrochip8 has great reputation
Default Re: What is causing "No rule to make target `modules'. Stop

No, kernel sources are always in /usr/src. the stuff in /lib/modules/<kernel>/source and /lib/modules/<kernel>/build is just a symlink to /usr/src/linux source directory, besides the actual modules which are also in /lib/modules. If you have installed the kernel source package, then do as follows which may solve the problem

1) login as root on console
2) cp /boot/config-$(uname -r) /usr/src/linux/.config (note the . (point) in .config)
3) cd /usr/src/linux && make prepare && make modules_prepare

and try compiling your module again
__________________
My site: http://microchip.bplaced.net
My repo: http://download.opensuse.org/repositories/home:/microchip8
SUSE Unbound Forum: http://suseunbound.lefora.com


Do coders dream of sheep() ?
Reply With Quote
  #3 (permalink)  
Old 05-Jul-2009, 14:23
XEyedBear's Avatar
Busy Penguin
 
Join Date: Jun 2008
Location: UK; deep south, far below Watford.
Posts: 279
XEyedBear hasn't been rated much yet
Default Re: What is causing "No rule to make target `modules'. Stop

I think I need a little more help here because things do not add up.

There is only one file in usr/src/linux... - Module.symvers. Perhaps this means that I have not got the kernel source installed? However Yast tells me that the package kernel-pae is already installed - in lib/modules/2.6.27.23-0.1-pae. This folder contains 2770+ files which do not appear to be symbolic links,, with a total size about 64 MB.

So do I have the source installed or not? If not, which source pacakge should I install?
__________________
They said I wasn't fit to live with a pig; my brother stood up for me and said I was.
Reply With Quote
  #4 (permalink)  
Old 05-Jul-2009, 14:28
microchip8's Avatar
Shaman Penguin
 
Join Date: Jun 2008
Location: /dev/belgium
Posts: 2,555
microchip8 has great reputationmicrochip8 has great reputationmicrochip8 has great reputationmicrochip8 has great reputationmicrochip8 has great reputationmicrochip8 has great reputation
Default Re: What is causing "No rule to make target `modules'. Stop

kernel-pae is the kernel *itself* and *not* the kernel source. Search for package kernel-source and install it
__________________
My site: http://microchip.bplaced.net
My repo: http://download.opensuse.org/repositories/home:/microchip8
SUSE Unbound Forum: http://suseunbound.lefora.com


Do coders dream of sheep() ?
Reply With Quote
  #5 (permalink)  
Old 07-Jul-2009, 11:45
XEyedBear's Avatar
Busy Penguin
 
Join Date: Jun 2008
Location: UK; deep south, far below Watford.
Posts: 279
XEyedBear hasn't been rated much yet
Default Re: What is causing "No rule to make target `modules'. Stop

OK; I found and installed the kernel files, followed your previous instructions (which appeared to work wthout any problem) and then re-invoked the make. The reult is a lengthy collection of erros, which I assume are caused by the developer of the make file making invalid assumptions. My probelm is that I do not understand what is causing this many erros and so do not understand how to fix the problem.

This is the output from 'make':

make -C /lib/modules/2.6.27.23-0.1-pae/build SUBDIRS=/home/tony/install_temp/pwc-10.0.11 modules
make[1]: Entering directory `/usr/src/linux-2.6.27.23-0.1-obj/i386/pae'
make -C ../../../linux-2.6.27.23-0.1 O=/usr/src/linux-2.6.27.23-0.1-obj/i386/pae/. modules
CC [M] /home/tony/install_temp/pwc-10.0.11/pwc-if.o
In file included from /home/tony/install_temp/pwc-10.0.11/pwc-if.c:69:
/home/tony/install_temp/pwc-10.0.11/pwc.h:28:26: error: linux/config.h: No such file or directory
/home/tony/install_temp/pwc-10.0.11/pwc.h:37:27: error: asm/semaphore.h: No such file or directory
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:164: error: variable ‘pwc_template’ has initializer but incomplete type
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:165: error: unknown field ‘owner’ specified in initializer
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:165: warning: excess elements in struct initializer
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:165: warning: (near initialization for ‘pwc_template’)
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:166: error: unknown field ‘name’ specified in initializer
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:166: warning: excess elements in struct initializer
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:166: warning: (near initialization for ‘pwc_template’)
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:167: error: unknown field ‘type’ specified in initializer
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:167: warning: excess elements in struct initializer
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:167: warning: (near initialization for ‘pwc_template’)
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:168: error: unknown field ‘hardware’ specified in initializer
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:168: error: ‘VID_HARDWARE_PWC’ undeclared here (not in a function)
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:168: warning: excess elements in struct initializer
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:168: warning: (near initialization for ‘pwc_template’)
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:169: error: unknown field ‘release’ specified in initializer
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:169: error: ‘video_device_release’ undeclared here (not in a function)
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:169: warning: excess elements in struct initializer
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:169: warning: (near initialization for ‘pwc_template’)
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:170: error: unknown field ‘fops’ specified in initializer
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:170: warning: excess elements in struct initializer
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:170: warning: (near initialization for ‘pwc_template’)
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:171: error: unknown field ‘minor’ specified in initializer
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:171: warning: excess elements in struct initializer
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:171: warning: (near initialization for ‘pwc_template’)
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘pwc_allocate_buffers’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:328: warning: format ‘%ld’ expects type ‘long int’, but argument 2 has type ‘int’
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘pwc_isoc_init’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:885: warning: assignment from incompatible pointer type
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: At top level:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:979: warning: ‘struct class_device’ declared inside parameter list
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:979: warning: its scope is only this definition or declaration, which is probably not what you want
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘cd_to_pwc’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:981: error: implicit declaration of function ‘to_video_device’
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:981: warning: initialization makes pointer from integer without a cast
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:982: error: implicit declaration of function ‘video_get_drvdata’
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:982: warning: return makes pointer from integer without a cast
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: At top level:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:985: warning: ‘struct class_device’ declared inside parameter list
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘show_pan_tilt’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:987: warning: passing argument 1 of ‘cd_to_pwc’ from incompatible pointer type
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: At top level:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:992: warning: ‘struct class_device’ declared inside parameter list
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘store_pan_tilt’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:994: warning: passing argument 1 of ‘cd_to_pwc’ from incompatible pointer type
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: At top level:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1008: error: expected ‘)’ before ‘(’ token
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1011: warning: ‘struct class_device’ declared inside parameter list
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘show_snapshot_button_status’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1013: warning: passing argument 1 of ‘cd_to_pwc’ from incompatible pointer type
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: At top level:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1019: error: expected ‘)’ before ‘(’ token
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘pwc_create_sysfs_files’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1024: warning: initialization makes pointer from integer without a cast
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1026: error: implicit declaration of function ‘video_device_create_file’
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1026: error: ‘class_device_attr_pan_tilt’ undeclared (first use in this function)
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1026: error: (Each undeclared identifier is reported only once
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1026: error: for each function it appears in.)
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1027: error: ‘class_device_attr_button’ undeclared (first use in this function)
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘pwc_remove_sysfs_files’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1032: warning: initialization makes pointer from integer without a cast
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1034: error: implicit declaration of function ‘video_device_remove_file’
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1034: error: ‘class_device_attr_pan_tilt’ undeclared (first use in this function)
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1035: error: ‘class_device_attr_button’ undeclared (first use in this function)
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘pwc_video_open’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1074: error: implicit declaration of function ‘video_devdata’
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1074: warning: initialization makes pointer from integer without a cast
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1079: error: dereferencing pointer to incomplete type
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘pwc_video_close’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1187: error: dereferencing pointer to incomplete type
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘pwc_video_read’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1247: error: dereferencing pointer to incomplete type
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘pwc_video_poll’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1311: error: dereferencing pointer to incomplete type
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘pwc_video_ioctl’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1327: error: implicit declaration of function ‘video_usercopy’
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘pwc_video_mmap’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1340: error: dereferencing pointer to incomplete type
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘usb_pwc_probe’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1648: error: implicit declaration of function ‘video_device_alloc’
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1648: warning: assignment makes pointer from integer without a cast
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1655: error: invalid application of ‘sizeof’ to incomplete type ‘struct video_device’
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1655: error: invalid application of ‘sizeof’ to incomplete type ‘struct video_device’
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1655: error: invalid application of ‘sizeof’ to incomplete type ‘struct video_device’
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1656: error: dereferencing pointer to incomplete type
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1657: error: dereferencing pointer to incomplete type
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1658: error: dereferencing pointer to incomplete type
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1659: error: implicit declaration of function ‘video_set_drvdata’
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1682: error: dereferencing pointer to incomplete type
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1683: error: implicit declaration of function ‘video_register_device’
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1683: error: ‘VFL_TYPE_GRABBER’ undeclared (first use in this function)
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1686: error: implicit declaration of function ‘video_device_release’
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1691: error: dereferencing pointer to incomplete type
/home/tony/install_temp/pwc-10.0.11/pwc-if.c: In function ‘usb_pwc_disconnect’:
/home/tony/install_temp/pwc-10.0.11/pwc-if.c:1745: error: implicit declaration of function ‘video_unregister_device’
make[4]: *** [/home/tony/install_temp/pwc-10.0.11/pwc-if.o] Error 1
make[3]: *** [_module_/home/tony/install_temp/pwc-10.0.11] Error 2
make[2]: *** [sub-make] Error 2
make[1]: *** [all] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.27.23-0.1-obj/i386/pae'
make: *** [all] Error 2
__________________
They said I wasn't fit to live with a pig; my brother stood up for me and said I was.
Reply With Quote
  #6 (permalink)  
Old 07-Jul-2009, 13:21
microchip8's Avatar
Shaman Penguin
 
Join Date: Jun 2008
Location: /dev/belgium
Posts: 2,555
microchip8 has great reputationmicrochip8 has great reputationmicrochip8 has great reputationmicrochip8 has great reputationmicrochip8 has great reputationmicrochip8 has great reputation
Default Re: What is causing "No rule to make target `modules'. Stop

Quote:
/home/tony/install_temp/pwc-10.0.11/pwc.h:28:26: error: linux/config.h: No such file or directory
/home/tony/install_temp/pwc-10.0.11/pwc.h:37:27: error: asm/semaphore.h: No such file or directory
it is looking for these files which you don't appear to have. Did you copy the /boot/config-$(uname -r) file to /usr/src/linux/.config and ran make prepare && make modules_prepare before trying to compile your module?
__________________
My site: http://microchip.bplaced.net
My repo: http://download.opensuse.org/repositories/home:/microchip8
SUSE Unbound Forum: http://suseunbound.lefora.com


Do coders dream of sheep() ?
Reply With Quote
  #7 (permalink)  
Old 07-Jul-2009, 13:55
malcolmlewis's Avatar
Global Moderator
 
Join Date: Jun 2008
Location: Podunk
Posts: 5,490
malcolmlewis has great reputationmalcolmlewis has great reputationmalcolmlewis has great reputationmalcolmlewis has great reputationmalcolmlewis has great reputationmalcolmlewis has great reputation
Default Re: What is causing "No rule to make target `modules'. Stop"?

Quote:
Originally Posted by microchip8

> */home/tony/install_temp/pwc-10.0.11/pwc.h:28:26: error:
> linux/config.h: No such file or directory
> /home/tony/install_temp/pwc-10.0.11/pwc.h:37:27: error:
> asm/semaphore.h: No such file or directory*


it is looking for these files which you don't appear to have. Did you
copy the /boot/config-$(uname -r) file to /usr/src/linux/.config and ran
-make prepare && make modules_prepare- before trying to compile your
module?
Hi
Looks like the OP will need to patch the header files,
it's linux/semaphore.h not asm.

@OP, you do realize the pwc module is part of the kernel?

--
Cheers Malcolm °¿° (Linux Counter #276890)
SUSE Linux Enterprise Desktop 11 (x86_64) Kernel 2.6.27.23-0.1-default
up 10 days 3:59, 4 users, load average: 0.22, 0.26, 0.29
GPU GeForce 8600 GTS Silent - Driver Version: 185.18.14

Reply With Quote
  #8 (permalink)  
Old 07-Jul-2009, 14:25
malcolmlewis's Avatar
Global Moderator
 
Join Date: Jun 2008
Location: Podunk
Posts: 5,490
malcolmlewis has great reputationmalcolmlewis has great reputationmalcolmlewis has great reputationmalcolmlewis has great reputationmalcolmlewis has great reputationmalcolmlewis has great reputation
Default Re: What is causing "No rule to make target `modules'. Stop"?

Quote:
Originally Posted by Malcolm
Quote:
Originally Posted by microchip8

> */home/tony/install_temp/pwc-10.0.11/pwc.h:28:26: error:
> linux/config.h: No such file or directory
> /home/tony/install_temp/pwc-10.0.11/pwc.h:37:27: error:
> asm/semaphore.h: No such file or directory*


it is looking for these files which you don't appear to have. Did you
copy the /boot/config-$(uname -r) file to /usr/src/linux/.config and ran
-make prepare && make modules_prepare- before trying to compile your
module?
Hi
Looks like the OP will need to patch the header files,
it's linux/semaphore.h not asm.

@OP, you do realize the pwc module is part of the kernel?
Hi
Also see that the uvc module may be of use?
http://linux-uvc.berlios.de/

--
Cheers Malcolm °¿° (Linux Counter #276890)
SUSE Linux Enterprise Desktop 11 (x86_64) Kernel 2.6.27.23-0.1-default
up 10 days 4:52, 2 users, load average: 0.22, 0.18, 0.18
GPU GeForce 8600 GTS Silent - Driver Version: 185.18.14

Reply With Quote
  #9 (permalink)  
Old 09-Jul-2009, 10:33
XEyedBear's Avatar
Busy Penguin
 
Join Date: Jun 2008
Location: UK; deep south, far below Watford.
Posts: 279
XEyedBear hasn't been rated much yet
Default Re: What is causing "No rule to make target `modules'. Stop

In response to the two last questions:

1. Re the UVC module: I am lead to believe that this is not relevant to my older web-cam (Logitech Quick Cam Pro 3000), which is supported, I'm told, only by the PWC driver. Is my understanding correct?


2. Re PWC being part of the kernel: no, I was not aware of this and the reading I have done so far, looking at the web-cam sensors that are supported, also lead me to believe that I had to add the PWC driver to the kernel (and hence the mess that I have managed to get myself into thus far). In fact I have not been able to find an applications with which the camera will work (for example AMSN), so I took this as good evidence that there is currently no support for this web-cam in my version of the kernel. Am I mistaken in this belief?
__________________
They said I wasn't fit to live with a pig; my brother stood up for me and said I was.
Reply With Quote
  #10 (permalink)  
Old 09-Jul-2009, 10:36
XEyedBear's Avatar
Busy Penguin
 
Join Date: Jun 2008
Location: UK; deep south, far below Watford.
Posts: 279
XEyedBear hasn't been rated much yet
Default Re: What is causing "No rule to make target `modules'. Stop

Quote:
Originally Posted by microchip8 View Post
it is looking for these files which you don't appear to have. Did you copy the /boot/config-$(uname -r) file to /usr/src/linux/.config and ran make prepare && make modules_prepare before trying to compile your module?
Yes, If I have understood it correctly, your previous post gave me directions on how to do this. I copied your instructions (i.e. didn't retype them) into a terminal session, logged in as root. Both commands seemed to work without error. But I note that the first command you suggested creates a file called .config in usr/src/linux and not a file called .config.h

Is this intended? There is no .config.h file in the usr/src/linux directory, so I do not understand how the 'make' process can work
__________________
They said I wasn't fit to live with a pig; my brother stood up for me and said I was.
Reply With Quote
Reply
Page 1 of 2 1 2

Bookmarks


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




 

Search Engine Friendly URLs by vBSEO 3.3.2