makepack 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #!/usr/bin/env bash
  2. #
  3. # Shell script to make a FPC .tar package for Linux
  4. # Copyright 1996-2004 Michael Van Canneyt and Peter Vreman
  5. #
  6. set -e
  7. # Set this to "yes" if you want to force making the documentation.
  8. # if it is not equal to yes, the documentation is assumed present in a file docs.tar.gz
  9. MAKEDOCS=no
  10. # Set this to "no" if you want don't want to check for libgdb.a
  11. CHECKLIBGDB=yes
  12. unset FPCDIR
  13. # Goto the toplevel if necessary
  14. [ -d install ] || cd ..
  15. # Retrieve version from compiler/Makefile.fpc
  16. VERSION=`grep '^version' compiler/Makefile.fpc | sed 's+[^=]*= *\(.*\)+\1+'`
  17. # Retrieve current system info by calling FPC. We need
  18. # to use the | head -n1 to fix a bug in fpc 1.9.4 and earlier
  19. # that uses exitcode 1 also when printing info resulting in
  20. # fpc binary to print an error line (PFV)
  21. SOURCECPU=`fpc -iSP | head -n1`
  22. SOURCEOS=`fpc -iSO | head -n1`
  23. # retrieve real OS.
  24. HOSTOS=`uname -s | tr "[:upper:]" "[:lower:]"`
  25. MAKE=make
  26. case "$HOSTOS" in
  27. *BSD*) MAKE=gmake
  28. ;;
  29. *bsd*) MAKE=gmake
  30. ;;
  31. esac
  32. if [ $# -ne 0 ]; then
  33. if [ $# -ne 1 ]; then
  34. echo "Usage: makepack [<cpu>-<os>]"
  35. exit 1
  36. fi
  37. TARGETCPU=`echo $1 | sed 's+\([^-]*\)-.*+\1+'`
  38. TARGETOS=`echo $1 | sed 's+[^-]*-\(.*\)+\1+'`
  39. else
  40. TARGETCPU=$SOURCECPU
  41. TARGETOS=$SOURCEOS
  42. fi
  43. FULLTARGET=$TARGETCPU-$TARGETOS
  44. FULLSOURCE=$SOURCECPU-$SOURCEOS
  45. echo "FPC Source: $FULLSOURCE"
  46. echo "FPC Target: $FULLTARGET"
  47. # Check for libgdb.a
  48. if [ "$CHECKLIBGDB" = "yes" ]; then
  49. if [ "$GDBLIBDIR" = "" ]; then
  50. GDBLIBDIR=libgdb/$TARGETOS/$TARGETCPU
  51. fi
  52. if [ ! -e "$GDBLIBDIR/libgdb.a" ]; then
  53. echo "Libgdb ($GDBLIBDIR/libgdb.a) not found, aborting"
  54. exit 1
  55. fi
  56. fi
  57. # Cross building
  58. # - add prefix
  59. # - no IDE
  60. if [ "$FULLTARGET" != "$FULLSOURCE" ]; then
  61. CROSS="cross"
  62. CROSSPREFIX=$FULLTARGET-
  63. IDE=
  64. else
  65. CROSS=
  66. CROSSPREFIX=
  67. IDE=ide
  68. fi
  69. # Build everything using the makefiles
  70. ${MAKE} distclean CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS
  71. ${MAKE} ${CROSS}zipinstall CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS
  72. if [ $? != 0 ]; then
  73. echo "Failed to make distribution archive."
  74. exit 1
  75. fi
  76. if [ "$CROSS" = "" ]; then
  77. if [ ! -f docs.tar.gz ]; then
  78. if [ "$MAKEDOCS" != "yes" ]; then
  79. echo "No documentation available. Please copy the file docs.tar.gz to this directory."
  80. exit 1
  81. else
  82. ${MAKE} makepackdocs
  83. if [ $? != 0 ]; then
  84. echo "Failed to make documentation archive."
  85. exit 1
  86. fi
  87. fi
  88. fi
  89. ${MAKE} demozip CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS FPC_VERSION=$VERSION
  90. if [ $? != 0 ]; then
  91. echo "Failed to make demo source archive."
  92. exit 1
  93. fi
  94. fi
  95. # Files to be in the release
  96. RELFILES="install.sh"
  97. # install.sh
  98. echo "Copying install.sh"
  99. sed s+%version%+$VERSION+ install/install.sh > install.sh
  100. chmod 755 install.sh
  101. # binary.*.tar
  102. BINARYTAR=${CROSSPREFIX}binary.$FULLTARGET.tar
  103. echo "Creating $BINARYTAR"
  104. BINPACKAGES="base $IDE units utils"
  105. BINFILES=
  106. for p in $BINPACKAGES; do
  107. BINFILES="$BINFILES ${CROSSPREFIX}$p*.$FULLSOURCE.tar.gz"
  108. done
  109. tar cf $BINARYTAR $BINFILES
  110. if [ $? != 0 ]; then
  111. echo "Failed to create $BINARYTAR"
  112. exit 1
  113. fi
  114. RELFILES="$RELFILES $BINARYTAR"
  115. if [ "$CROSS" = "" ]; then
  116. # demo, docs
  117. RELFILES="$RELFILES demo.tar.gz docs.tar.gz"
  118. fi
  119. # Files to be added to the .tar
  120. TARNAME=${CROSSPREFIX}fpc-$VERSION.$FULLSOURCE.tar
  121. echo "Creating $TARNAME"
  122. tar cf $TARNAME $RELFILES
  123. if [ $? != 0 ]; then
  124. echo "Failed to create $TARNAME"
  125. exit 1
  126. fi