This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
In cflags.SH trim the case statement of file basenames.
authorNicholas Clark <nick@ccl4.org>
Wed, 28 Mar 2012 15:15:15 +0000 (17:15 +0200)
committerNicholas Clark <nick@ccl4.org>
Tue, 19 Jun 2012 08:29:20 +0000 (10:29 +0200)
Add examples showing how to use cflags.SH to tweak the compiler flags used
for individual object files.

Previously cflags.SH contained a somewhat stale pre-canned list of file
basenames including removed files such as usersub (deleted before 5.000
shipped), and a partial list of 5.000 XS extensions. Whilst it's possible
to generate the correct list in cflags by parsing MANIFEST (and adding a few
fixups), it's still not actually *useful*, as cflags gets overwritten as
soon as config.sh changes. Hence the most end-user useful solution with
minimal maintenance is to eliminate the list entirely, and document how the
user should add to it as necessary.

INSTALL
cflags.SH

diff --git a/INSTALL b/INSTALL
index 4d93d1f..333e809 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1269,9 +1269,16 @@ lost.
 
 If you have any additional changes to make to the C compiler command
 line, they can be made in cflags.SH.  For instance, to turn off the
-optimizer on toke.c, find the line in the switch structure for
-toke.c and put the command optimize='-g' before the ;; .  You
-should not edit the generated file cflags directly, as your changes will
+optimizer on toke.c, find the switch structure marked 'or customize here',
+and add a line for toke.c ahead of the catch-all *) so that it now reads:
+
+    : or customize here
+
+    case "$file" in
+    toke) optimize='-g' ;;
+    *) ;;
+
+You should not edit the generated file cflags directly, as your changes will
 be lost the next time you run Configure, or if you edit config.sh.
 
 To explore various ways of changing ccflags from within a hint file,
index ac03b85..6420bf3 100755 (executable)
--- a/cflags.SH
+++ b/cflags.SH
@@ -273,56 +273,23 @@ for file do
     : or customize here
 
     case "$file" in
-    DB_File) ;;
-    GDBM_File) ;;
-    NDBM_File) ;;
-    ODBM_File) ;;
-    POSIX) ;;
-    SDBM_File) ;;
-    av) ;;
-    byterun) ;;
-    deb) ;;
-    dl) ;;
-    doio) ;;
-    doop) ;;
-    dump) ;;
-    globals) ;;
-    gv) ;;
-    hv) ;;
-    locale) ;;
-    madly) ;;
-    main) ;;
-    malloc) ;;
-    mg) ;;
-    miniperlmain) ;;
-    numeric) ;;
-    op) ;;
-    opmini) ;;
-    pad) ;;
-    perl) ;;
-    perlapi) ;;
-    perlmain) ;;
-    perly) ;;
-    pp) ;;
-    pp_ctl) ;;
-    pp_hot) ;;
-    pp_pack) ;;
-    pp_sort) ;;
-    pp_sys) ;;
-    regcomp) ;;
-    regexec) ;;
-    run) ;;
-    scope) ;;
-    sv) ;;
-    taint) ;;
-    toke) ;;
-    universal) ;;
-    usersub) ;;
-    utf8) ;;
-    util) ;;
     *) ;;
+
+    *) : Customization examples follow: ;;
+    av) ccflags=`echo $ccflags | sed -e s/-pipe//` ;;
+    deb) ccflags="$ccflags -fno-jump-tables" ;;
+    hv) warn=`echo $warn | sed -e s/-Wextra//` ;;
+    toke) optimize=-O0 ;;
     esac
 
+    : The examples are intentionally unreachable as the '*)' case always
+    : matches. To use them, move before the '*)' and edit as appropriate.
+    : It is not a good idea to set ccflags to an absolute value here, as it
+    : often contains general -D defines which are needed for correct
+    : compilation. It is better to edit ccflags as shown, using interpolation
+    : to add flags, or sed to remove flags.
+
+
     case "$cc" in
     *g++*)
       # Extra paranoia in case people have bad canned ccflags: