Blame view

node_modules/node-sass/src/libsass/script/ci-build-libsass 4.03 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
  #!/bin/bash
  
  set -e
  
  script/bootstrap
  
  # export this path right here (was in script/spec before)
  export SASS_LIBSASS_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )"/../ && pwd )"
  
  # use some defaults if not running under travis ci
  if [ "x$CONTINUOUS_INTEGRATION" == "x" ]; then export CONTINUOUS_INTEGRATION=true; fi
  if [ "x$TRAVIS_BUILD_DIR" == "x" ]; then export TRAVIS_BUILD_DIR=$(pwd); fi
  if [ "x$SASS_SASSC_PATH" == "x" ]; then export SASS_SASSC_PATH=$(pwd)/sassc; fi
  if [ "x$SASS_SPEC_PATH" == "x" ]; then export SASS_SPEC_PATH=$(pwd)/sass-spec; fi
  
  # try to get the os name from uname (and filter via perl - probably not the most portable way?)
  if [ "x$TRAVIS_OS_NAME" == "x" ]; then export TRAVIS_OS_NAME=`uname -s | perl -ne 'print lc \$1 if\(/^([a-zA-Z]+)/'\)`; fi
  
  if [ "x$COVERAGE" == "xyes" ]; then
    COVERAGE_OPT="--enable-coverage"
    export EXTRA_CFLAGS="-fprofile-arcs -ftest-coverage"
    export EXTRA_CXXFLAGS="-fprofile-arcs -ftest-coverage"
    if [ "$TRAVIS_OS_NAME" == "osx" ]; then
      # osx doesn't seem to know gcov lib?
      export EXTRA_LDFLAGS="--coverage"
    else
      export EXTRA_LDFLAGS="-lgcov --coverage"
    fi
  else
    COVERAGE_OPT="--disable-coverage"
  fi
  
  if [ "x$BUILD" == "xstatic" ]; then
    SHARED_OPT="--disable-shared --enable-static"
    MAKE_TARGET="static"
  else
    # Makefile of sassc wants to link to static
    SHARED_OPT="--enable-shared --enable-static"
    MAKE_TARGET="shared"
  fi
  
  if [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then
    MAKE_OPTS="$MAKE_OPTS -j1 V=1"
  else
    MAKE_OPTS="$MAKE_OPTS -j5 V=1"
  fi
  
  if [ "x$PREFIX" == "x" ]; then
    if [ "x$TRAVIS_BUILD_DIR" == "x" ]; then
      PREFIX=$SASS_LIBSASS_PATH/build
    else
      PREFIX=$TRAVIS_BUILD_DIR/build
    fi
  fi
  
  # enable address sanitation
  # https://en.wikipedia.org/wiki/AddressSanitizer
  if [ "x$CC" == "xclang" ]; then
    if [ "x$COVERAGE" != "xyes" ]; then
      if [ "$TRAVIS_OS_NAME" == "linux" ]; then
        export EXTRA_CFLAGS="$EXTRA_CFLAGS -fsanitize=address"
        export EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -fsanitize=address"
        export EXTRA_LDFLAGS="$EXTRA_LDFLAGS -fsanitize=address"
      fi
    fi
  fi
  
  echo SASS_LIBSASS_PATH: $SASS_LIBSASS_PATH
  echo TRAVIS_BUILD_DIR: $TRAVIS_BUILD_DIR
  echo SASS_SASSC_PATH: $SASS_SASSC_PATH
  echo SASS_SPEC_PATH: $SASS_SPEC_PATH
  echo INSTALL_LOCATION: $PREFIX
  
  if [ "x$AUTOTOOLS" == "xyes" ]; then
  
    echo -en 'travis_fold:start:configure\r'
    autoreconf --force --install
    ./configure --enable-tests $COVERAGE_OPT \
      --disable-silent-rules \
      --with-sassc-dir=$SASS_SASSC_PATH \
      --with-sass-spec-dir=$SASS_SPEC_PATH \
      --prefix=$PREFIX \
      ${SHARED_OPT}
    echo -en 'travis_fold:end:configure\r'
  
    make $MAKE_OPTS clean
  
    # install to prefix directory
    PREFIX="$PREFIX" make $MAKE_OPTS install
  
  else
  
    make $MAKE_OPTS clean
  
  fi
  
  # install to prefix directory
  PREFIX="$PREFIX" make $MAKE_OPTS install
  
  ls -la $PREFIX/*
  
  echo successfully compiled libsass
  echo AUTOTOOLS=$AUTOTOOLS COVERAGE=$COVERAGE BUILD=$BUILD
  
  if [ "$CONTINUOUS_INTEGRATION" == "true" ] && [ "$TRAVIS_PULL_REQUEST" != "false" ] && [ "x$TRAVIS_PULL_REQUEST" != "x" ] &&
     ([ "$TRAVIS_OS_NAME" == "linux" ] || [ "$TRAVIS_OS_NAME" == "osx" ] || [ "$TRAVIS_OS_NAME" == "cygwin" ]);
  then
  
    echo "Fetching PR $TRAVIS_PULL_REQUEST"
  
    JSON=$(curl -L -sS https://api.github.com/repos/sass/libsass/pulls/$TRAVIS_PULL_REQUEST)
  
    if [[ $JSON =~ "API rate limit exceeded" ]];
    then
      echo "Travis rate limit on github exceeded"
      echo "Retrying via 'special purpose proxy'"
      JSON=$(curl -L -sS https://github-api-reverse-proxy.herokuapp.com/repos/sass/libsass/pulls/$TRAVIS_PULL_REQUEST)
    fi
  
    RE_SPEC_PR="sass\/sass-spec(#|\/pull\/)([0-9]+)"
  
    if [[ $JSON =~ $RE_SPEC_PR ]];
    then
      SPEC_PR="${BASH_REMATCH[2]}"
      echo "Fetching Sass Spec PR $SPEC_PR"
      git -C sass-spec fetch -u origin pull/$SPEC_PR/head:ci-spec-pr-$SPEC_PR
      git -C sass-spec checkout --force ci-spec-pr-$SPEC_PR
      LD_LIBRARY_PATH="$PREFIX/lib/" make $MAKE_OPTS test_probe
    else
      LD_LIBRARY_PATH="$PREFIX/lib/" make $MAKE_OPTS test_probe
    fi
  else
    LD_LIBRARY_PATH="$PREFIX/lib/" make $MAKE_OPTS test_probe
  fi