cldr2def: Improve ctype makefile generation to avoid symlinks
authorJohn Marino <draco@marino.st>
Sun, 13 Sep 2015 15:52:56 +0000 (17:52 +0200)
committerJohn Marino <draco@marino.st>
Sun, 13 Sep 2015 16:01:10 +0000 (18:01 +0200)
I was informed that symlinks in repository might cause problems
when the repository is extracted to windows.  The generated ctype
makefile was improved to work without symlinks at all.  (The symlinks
were there to avoid multiple copies of the same exact file, some of
which were greater than 1 Mb in size).

tools/tools/locale/tools/cldr2def.pl
tools/tools/locale/tools/finalize

index dfc90ba..fec503c 100644 (file)
@@ -770,6 +770,7 @@ sub make_makefile {
        print "Creating Makefile for $TYPE\n";
        my $SRCOUT;
        my $SRCOUT2;
+       my $SRCOUT3;
        my $MAPLOC;
        if ($TYPE eq "colldef") {
                $SRCOUT = "localedef -D -U -i \${.IMPSRC} \\\n" .
@@ -787,6 +788,15 @@ sub make_makefile {
                $SRCOUT2 = "LC_CTYPE";
                $MAPLOC = "MAPLOC=\t\t\${.CURDIR}/../../tools/tools/" .
                                "locale/etc/final-maps\n";
+               $SRCOUT3 = "## SYMPAIRS\n\n" .
+                       ".for PAIR in \${SYMPAIRS}\n" .
+                       "\${PAIR:C/^.*://:S/src\$/LC_CTYPE/}: " .
+                       "\${PAIR:C/:.*//}\n" .
+                       "\tlocaledef -D -U -c -w \${MAPLOC}/widths.txt \\\n" .
+                       "\t-f \${MAPLOC}/map.\${.TARGET:T:R:C/^.*\\.//} " .
+                       "\\\n\t-i \${.ALLSRC} \${.OBJDIR}/\${.TARGET:T:R} " .
+                       " || true\n" .
+                       ".endfor\n\n";
        }
        else {
                $SRCOUT = "grep -v -E '^(\#\$\$|\#[ ])' < \${.IMPSRC} > \${.TARGET}";
@@ -917,7 +927,7 @@ SYMLINKS+=  ../\${f:C/:.*\$//}/\${FILESNAME} \${LOCALEDIR}/\${f:C/^.*://}
 FILESDIR_\${f}.${SRCOUT2}= \${LOCALEDIR}/\${f}
 .endfor
 
-.include <bsd.prog.mk>
+${SRCOUT3}.include <bsd.prog.mk>
 EOF
 
        close(FOUT);
index ff24ee8..f8c0ce9 100755 (executable)
@@ -23,11 +23,14 @@ old=${base}/../${1}.draft
 new=${base}/../${1}
 TEMP=/tmp/${1}.locales
 TEMP2=/tmp/${1}.hashes
+TEMP3=/tmp/${1}.symlinks
 FULLMAP=/tmp/utf8-map
 FULLEXTRACT=/tmp/extracted-names
 AWKCMD="/## PLACEHOLDER/ { \
          while ( getline line < \"${TEMP}\" ) {print line} } \
-       !/## PLACEHOLDER/ { print \$0 }"
+       /## SYMPAIRS/ { \
+         while ( getline line < \"${TEMP3}\" ) {print line} } \
+       !/## / { print \$0 }"
 
 grep '^LOCALES+' ${old}/Makefile > ${TEMP}
 
@@ -40,9 +43,8 @@ for original in ${keep}
 do
        cp ${old}/${original} ${new}/
 done
-linx=$(awk '{ if ($1 == last1) { print "ln -s " last2 " ${new}/" $2 ";"} \
-else {last1 = $1; last2 = $2}}' ${TEMP2})
-eval $linx
+awk '{ if ($1 == last1) { print "SYMPAIRS+=\t" last2 ":" $2 } \
+else {last1 = $1; last2 = $2}}' ${TEMP2} > ${TEMP3}
 rm -f ${TEMP2}
        /usr/bin/sed -E -e 's/[ ]+/ /g' \
                ${CLDRDIR}/posix/UTF-8.cm \
@@ -81,4 +83,4 @@ fi
 
 grep -v '^LOCALES+' ${old}/Makefile | awk "${AWKCMD}" > ${new}/Makefile
 
-rm -f ${TEMP}
+rm -f ${TEMP} ${TEMP3}