Archive

Posts Tagged ‘complaints’

I wish everyone followed GNU makefile conventions

December 6th, 2008

According to gnu.org, “Installation directories should always be named by variables, so it is easy to install in a nonstandard place. The standard names for these variables and the values they should have in GNU packages are described below. They are based on a standard filesystem layout; variants of it are used in GNU/Linux and other modern operating systems.

Installers are expected to override these values when calling make (e.g., make prefix=/usr install or configure (e.g., configure --prefix=/usr). GNU packages should not try to guess which value should be appropriate for these variables on the system they are being installed onto: use the default settings specified here so that all GNU packages behave identically, allowing the installer to achieve any desired layout.

These two variables set the root for the installation. All the other installation directories should be subdirectories of one of these two, and nothing should be directly installed into these two directories.

prefix
A prefix used in constructing the default values of the variables listed below. The default value of prefix should be /usr/local. When building the complete GNU system, the prefix will be empty and /usr will be a symbolic link to /. (If you are using Autoconf, write it as `@prefix@‘.)Running `make install‘ with a different value of prefix from the one used to build the program should not recompile the program.

exec_prefix
A prefix used in constructing the default values of some of the variables listed below. The default value of exec_prefix should be $(prefix). (If you are using Autoconf, write it as `@exec_prefix@‘.)Generally, $(exec_prefix) is used for directories that contain machine-specific files (such as executables and subroutine libraries), while $(prefix) is used directly for other directories.

Running `make install‘ with a different value of exec_prefix from the one used to build the program should not recompile the program.

Executable programs are installed in one of the following directories.

bindir
The directory for installing executable programs that users can run. This should normally be /usr/local/bin, but write it as $(exec_prefix)/bin. (If you are using Autoconf, write it as `@bindir@‘.)
sbindir
The directory for installing executable programs that can be run from the shell, but are only generally useful to system administrators. This should normally be /usr/local/sbin, but write it as $(exec_prefix)/sbin. (If you are using Autoconf, write it as `@sbindir@‘.)
libexecdir
The directory for installing executable programs to be run by other programs rather than by users. This directory should normally be /usr/local/libexec, but write it as $(exec_prefix)/libexec. (If you are using Autoconf, write it as `@libexecdir@‘.)The definition of `libexecdir‘ is the same for all packages, so you should install your data in a subdirectory thereof. Most packages install their data under $(libexecdir)/package-name/, possibly within additional subdirectories thereof, such as $(libexecdir)/package-name/machine/version.

Data files used by the program during its execution are divided into categories in two ways.

  • Some files are normally modified by programs; others are never normally modified (though users may edit some of these).
  • Some files are architecture-independent and can be shared by all machines at a site; some are architecture-dependent and can be shared only by machines of the same kind and operating system; others may never be shared between two machines.

This makes for six different possibilities. However, we want to discourage the use of architecture-dependent files, aside from object files and libraries. It is much cleaner to make other data files architecture-independent, and it is generally not hard.

Here are the variables Makefiles should use to specify directories to put these various kinds of files in:

`datarootdir
The root of the directory tree for read-only architecture-independent data files. This should normally be /usr/local/share, but write it as $(prefix)/share. (If you are using Autoconf, write it as `@datarootdir@‘.) `datadir‘’s default value is based on this variable; so are `infodir‘, `mandir‘, and others.
`datadir
The directory for installing idiosyncratic read-only architecture-independent data files for this program. This is usually the same place as `datarootdir‘, but we use the two separate variables so that you can move these program-specific files without altering the location for Info files, man pages, etc.This should normally be /usr/local/share, but write it as $(datarootdir). (If you are using Autoconf, write it as `@datadir@‘.)

The definition of `datadir‘ is the same for all packages, so you should install your data in a subdirectory thereof. Most packages install their data under $(datadir)/package-name/.

`sysconfdir
The directory for installing read-only data files that pertain to a single machine–that is to say, files for configuring a host. Mailer and network configuration files, /etc/passwd, and so forth belong here. All the files in this directory should be ordinary ASCII text files. This directory should normally be /usr/local/etc, but write it as $(prefix)/etc. (If you are using Autoconf, write it as `@sysconfdir@‘.)Do not install executables here in this directory (they probably belong in $(libexecdir) or $(sbindir)). Also do not install files that are modified in the normal course of their use (programs whose purpose is to change the configuration of the system excluded). Those probably belong in $(localstatedir).

`sharedstatedir
The directory for installing architecture-independent data files which the programs modify while they run. This should normally be /usr/local/com, but write it as $(prefix)/com. (If you are using Autoconf, write it as `@sharedstatedir@‘.)
`localstatedir
The directory for installing data files which the programs modify while they run, and that pertain to one specific machine. Users should never need to modify files in this directory to configure the package’s operation; put such configuration information in separate files that go in $(datadir) or $(sysconfdir). $(localstatedir) should normally be /usr/local/var, but write it as $(prefix)/var. (If you are using Autoconf, write it as `@localstatedir@‘.)

These variables specify the directory for installing certain specific types of files, if your program has them. Every GNU package should have Info files, so every program needs `infodir‘, but not all need `libdir‘ or `lispdir‘.

`includedir
The directory for installing header files to be included by user programs with the C `#include‘ preprocessor directive. This should normally be /usr/local/include, but write it as $(prefix)/include. (If you are using Autoconf, write it as `@includedir@‘.)Most compilers other than GCC do not look for header files in directory /usr/local/include. So installing the header files this way is only useful with GCC. Sometimes this is not a problem because some libraries are only really intended to work with GCC. But some libraries are intended to work with other compilers. They should install their header files in two places, one specified by includedir and one specified by oldincludedir.

`oldincludedir
The directory for installing `#include‘ header files for use with compilers other than GCC. This should normally be /usr/include. (If you are using Autoconf, you can write it as `@oldincludedir@‘.)The Makefile commands should check whether the value of oldincludedir is empty. If it is, they should not try to use it; they should cancel the second installation of the header files.

A package should not replace an existing header in this directory unless the header came from the same package. Thus, if your Foo package provides a header file foo.h, then it should install the header file in the oldincludedir directory if either (1) there is no foo.h there or (2) the foo.h that exists came from the Foo package.

To tell whether foo.h came from the Foo package, put a magic string in the file—part of a comment—and grep for that string.

`docdir
The directory for installing documentation files (other than Info) for this package. By default, it should be /usr/local/share/doc/yourpkg, but it should be written as $(datarootdir)/doc/yourpkg. (If you are using Autoconf, write it as `@docdir@‘.) The yourpkg subdirectory, which may include a version number, prevents collisions among files with common names, such as README.
`infodir
The directory for installing the Info files for this package. By default, it should be /usr/local/share/info, but it should be written as $(datarootdir)/info. (If you are using Autoconf, write it as `@infodir@‘.) infodir is separate from docdir for compatibility with existing practice.
`htmldir
`dvidir
`pdfdir
`psdir
Directories for installing documentation files in the particular format. (It is not required to support documentation in all these formats.) They should all be set to $(docdir) by default. (If you are using Autoconf, write them as `@htmldir@‘, `@dvidir@‘, etc.) Packages which supply several translations of their documentation should install them in `$(htmldir)/ll, `$(pdfdir)/ll, etc. where ll is a locale abbreviation such as `en‘ or `pt_BR‘.
`libdir
The directory for object files and libraries of object code. Do not install executables here, they probably ought to go in $(libexecdir) instead. The value of libdir should normally be /usr/local/lib, but write it as $(exec_prefix)/lib. (If you are using Autoconf, write it as `@libdir@‘.)
`lispdir
The directory for installing any Emacs Lisp files in this package. By default, it should be /usr/local/share/emacs/site-lisp, but it should be written as $(datarootdir)/emacs/site-lisp.If you are using Autoconf, write the default as `@lispdir@‘. In order to make `@lispdir@‘ work, you need the following lines in your configure.in file:

          lispdir='${datarootdir}/emacs/site-lisp'
          AC_SUBST(lispdir)
`localedir
The directory for installing locale-specific message catalogs for this package. By default, it should be /usr/local/share/locale, but it should be written as $(datarootdir)/locale. (If you are using Autoconf, write it as `@localedir@‘.) This directory usually has a subdirectory per locale.

Unix-style man pages are installed in one of the following:

`mandir
The top-level directory for installing the man pages (if any) for this package. It will normally be /usr/local/share/man, but you should write it as $(datarootdir)/man. (If you are using Autoconf, write it as `@mandir@‘.)
`man1dir
The directory for installing section 1 man pages. Write it as $(mandir)/man1.
`man2dir
The directory for installing section 2 man pages. Write it as $(mandir)/man2
`
Don’t make the primary documentation for any GNU software be a man page. Write a manual in Texinfo instead. Man pages are just for the sake of people running GNU software on Unix, which is a secondary application only.
`manext
The file name extension for the installed man page. This should contain a period followed by the appropriate digit; it should normally be `.1‘.
`man1ext
The file name extension for installed section 1 man pages.
`man2ext
The file name extension for installed section 2 man pages.
`
Use these names instead of `manext‘ if the package needs to install man pages in more than one section of the manual.

And finally, you should set the following variable:

`srcdir
The directory for the sources being compiled. The value of this variable is normally inserted by the configure shell script. (If you are using Autconf, use `srcdir = @srcdir@‘.)”

Almost random, programming , , ,

Top 5 reasons why Gears of War sucks

November 21st, 2008

First off, don’t be afraid of insane mode.  It just means you shoot from a little further back than normal most of the time and don’t bother trying to get up close to chainsaw anyone.  So you’re left with the multiplayer and the horde.  The horde mode really is the shining star here, but it’s too bad this is where things also began to fall apart.

Top 5 reasons why Gears of War 2 sucks

  1. It will take forever to form groups on xbox live.  And when you see your group fill up and you think it’s about to start, don’t count your chickens yet.  It will probably reset and start trying to find players all over again.  When you’ve played a full round of multiplayer in public xbox live and the round is finishes, you will get kicked out to the main screen and have to start matchmaking all over again.  The only save here is that if you’re in a party with friends, at least your group will stay together, but you’ll still have to wait forever to find another group to play against!
  2. If you join a multiplayer or horde match using public xbox live, you’ll start from wave one with no choice.  If, at any time in the middle of playing, someone leaves the match, a new person can’t join.  So you’re basically screwed.  This has a much worse effect in multiplayer.  If a player or two on your team leaves, too bad so sad.  Your team is probably going to lose.  It won’t balance the teams between matches, or let a new person join in the middle of a fight, a la call of duty style.
  3. The whole roll up on someone and blast them with a shotgun to the face trick from the first Gears of War hasn’t been fixed.  So forget the lancer or the rifle.  The shotgun is your best choice from your starting arsenal in multiplayer.  If you can get your hands on a bow or boomshot, by all means take it.  But it’s just too bad there are no modes where people get different guns, or where everyone only gets a specific gun.  It would have been nice to have a pistol+sniper battle with no machine guns allowed.
  4. Oooo, check out my gold lancer or gold rifle.  woop-dee-doo.  How about different models of each type of gun or a few more choices?  Sure there’s three different pistols, but there’s only 1 rifle, 1 lancer, 1 bow, 1 boomshot, and 1sniper rifle.  While the weapon types vary tremendously, the selection is rather limited.
  5. Be prepared to get stuck taking cover, or going into cover facing the wrong way.  It’s just too bad that Geow2 is basically Geow1 all over again with new maps and a few new guns!

And my bonus gripe:  In the campaign mode, you’ll find yourself running around as a group of 4, sometimes splitting into 2 and 2.  Why couldn’t they have made it FOUR PLAYER CO-OP?!  Tweak the story a little here and there and wam, it would have been great.  I give this game a 7 out of 10.  And no, i’m not paid to rate this game at all.  After the initial wow factor wears off, you’re left with just “meh”.  Screw this, i’m going back to Call of Duty 4…

Uncategorized , , , , ,